diff --git a/electron/electron-preload.js b/electron/electron-preload.js index fedb94bf2..1dd57b5ed 100644 --- a/electron/electron-preload.js +++ b/electron/electron-preload.js @@ -72,6 +72,7 @@ contextBridge.exposeInMainWorld( contextBridge.exposeInMainWorld( 'process', { type: process.type, - versions: process.versions + versions: process.versions, + platform: process.platform, } ); diff --git a/electron/electron.js b/electron/electron.js index bd6c67b1a..7380e8b81 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -1,9 +1,11 @@ const fs = require('fs') const os = require("os"); const path = require('path') -const {app, BrowserWindow, ipcMain, dialog, clipboard, nativeImage, shell, Tray, Menu, globalShortcut, Notification} = require('electron') +const {app, BrowserWindow, ipcMain, dialog, clipboard, nativeImage, shell, Tray, Menu, globalShortcut, Notification, BrowserView, nativeTheme} = require('electron') const {autoUpdater} = require("electron-updater") const log = require("electron-log"); +const electronConf = require('electron-config') +const userConf = new electronConf() const fsProm = require('fs/promises'); const PDFDocument = require('pdf-lib').PDFDocument; const Screenshots = require("electron-screenshots-tool").Screenshots; @@ -33,6 +35,19 @@ let mainWindow = null, let screenshotObj = null, screenshotKey = null; +let webWindow = null, + webTabView = [], + webTabHeight = 38; + +let showState = {}, + onShowWindow = (win) => { + if (typeof showState[win.webContents.id] === 'undefined') { + showState[win.webContents.id] = true + win.setBackgroundColor('rgba(255, 255, 255, 0)') + win.show(); + } + } + if (fs.existsSync(devloadCachePath)) { devloadUrl = fs.readFileSync(devloadCachePath, 'utf8') } @@ -44,6 +59,8 @@ function createMainWindow() { mainWindow = new BrowserWindow({ width: 1280, height: 800, + minWidth: 360, + minHeight: 360, center: true, autoHideMenuBar: true, webPreferences: { @@ -65,13 +82,9 @@ function createMainWindow() { electronMenu.webContentsMenu(mainWindow.webContents) if (devloadUrl) { - mainWindow.loadURL(devloadUrl).then(_ => { - - }) + mainWindow.loadURL(devloadUrl).then(_ => { }).catch(_ => { }) } else { - mainWindow.loadFile('./public/index.html').then(_ => { - - }) + mainWindow.loadFile('./public/index.html').then(_ => { }).catch(_ => { }) } mainWindow.on('page-title-updated', (event, title) => { @@ -122,7 +135,10 @@ function createSubWindow(args) { browser = new BrowserWindow(Object.assign({ width: 1280, height: 800, + minWidth: 360, + minHeight: 360, center: true, + show: false, parent: mainWindow, autoHideMenuBar: true, webPreferences: Object.assign({ @@ -155,6 +171,14 @@ function createSubWindow(args) { } }) + browser.once('ready-to-show', () => { + onShowWindow(browser); + }) + + browser.webContents.once('dom-ready', () => { + onShowWindow(browser); + }) + subWindow.push({ name, browser }) } const originalUA = browser.webContents.session.getUserAgent() || browser.webContents.getUserAgent() @@ -169,15 +193,11 @@ function createSubWindow(args) { const hash = args.hash || args.path; if (/^https?:\/\//i.test(hash)) { - browser.loadURL(hash).then(_ => { - - }) + browser.loadURL(hash).then(_ => { }).catch(_ => { }) return; } if (devloadUrl) { - browser.loadURL(devloadUrl + '#' + hash).then(_ => { - - }) + browser.loadURL(devloadUrl + '#' + hash).then(_ => { }).catch(_ => { }) return; } browser.loadFile('./public/index.html', { @@ -204,15 +224,11 @@ function updateSubWindow(browser, args) { const hash = args.hash || args.path; if (hash) { if (devloadUrl) { - browser.loadURL(devloadUrl + '#' + hash).then(_ => { - - }) + browser.loadURL(devloadUrl + '#' + hash).then(_ => { }).catch(_ => { }) } else { browser.loadFile('./public/index.html', { hash - }).then(_ => { - - }) + }).then(_ => { }).catch(_ => { }) } } if (args.name) { @@ -223,6 +239,284 @@ function updateSubWindow(browser, args) { } } +/** + * 创建内置浏览器 + * @param args {url, ?} + */ +function createWebWindow(args) { + if (!args) { + return; + } + + if (!utils.isJson(args)) { + args = {url: args} + } + + if (!allowedUrls.test(args.url)) { + return; + } + + // 创建父级窗口 + if (!webWindow) { + let config = Object.assign(args.config || {}, userConf.get('webWindow', {})); + let webPreferences = args.webPreferences || {}; + const titleBarOverlay = { + height: webTabHeight + } + if (nativeTheme.shouldUseDarkColors) { + titleBarOverlay.color = '#3B3B3D' + titleBarOverlay.symbolColor = '#C5C5C5' + } + webWindow = new BrowserWindow(Object.assign({ + x: mainWindow.getBounds().x + webTabHeight, + y: mainWindow.getBounds().y + webTabHeight, + width: 1280, + height: 800, + minWidth: 360, + minHeight: 360, + center: true, + show: false, + autoHideMenuBar: true, + titleBarStyle: 'hidden', + titleBarOverlay, + webPreferences: Object.assign({ + preload: path.join(__dirname, 'electron-preload.js'), + webSecurity: true, + nodeIntegration: true, + contextIsolation: true, + nativeWindowOpen: true + }, webPreferences), + }, config)) + + webWindow.on('resize', () => { + resizeWebTab(0) + }) + + webWindow.on('enter-full-screen', () => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'enter-full-screen', + }).then(_ => { }) + }) + + webWindow.on('leave-full-screen', () => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'leave-full-screen', + }).then(_ => { }) + }) + + webWindow.on('close', event => { + if (!willQuitApp) { + closeWebTab(0) + event.preventDefault() + } else { + userConf.set('webWindow', webWindow.getBounds()) + } + }) + + webWindow.on('closed', () => { + webWindow = null + }) + + webWindow.once('ready-to-show', () => { + onShowWindow(webWindow); + }) + + webWindow.webContents.once('dom-ready', () => { + onShowWindow(webWindow); + }) + + webWindow.webContents.on('before-input-event', (event, input) => { + if (input.meta && input.key.toLowerCase() === 'r') { + reloadWebTab(0) + event.preventDefault() + } + }) + + webWindow.loadFile('./render/tabs/index.html', {}).then(_ => { + + }) + } + webWindow.focus(); + + // 创建子窗口 + const browserView = new BrowserView({ + useHTMLTitleAndIcon: true, + useLoadingView: true, + useErrorView: true, + webPreferences: { + type: 'browserView', + preload: path.join(__dirname, 'electron-preload.js'), + nodeIntegrationInSubFrames: true, + } + }) + if (nativeTheme.shouldUseDarkColors) { + browserView.setBackgroundColor('#575757') + } else { + browserView.setBackgroundColor('#FFFFFF') + } + browserView.setBounds({ + x: 0, + y: webTabHeight, + width: webWindow.getContentBounds().width || 1280, + height: (webWindow.getContentBounds().height || 800) - webTabHeight, + }) + browserView.webContents.setWindowOpenHandler(({url}) => { + createWebWindow({url}) + return {action: 'deny'} + }) + browserView.webContents.on('page-title-updated', (event, title) => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'title', + id: browserView.webContents.id, + title: title, + url: browserView.webContents.getURL(), + }).then(_ => { }) + }) + browserView.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => { + if (!errorDescription) { + return + } + utils.onDispatchEvent(webWindow.webContents, { + event: 'title', + id: browserView.webContents.id, + title: errorDescription, + url: browserView.webContents.getURL(), + }).then(_ => { }) + }) + browserView.webContents.on('page-favicon-updated', (event, favicons) => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'favicon', + id: browserView.webContents.id, + favicons + }).then(_ => { }) + }) + browserView.webContents.on('did-start-loading', _ => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'start-loading', + id: browserView.webContents.id, + }).then(_ => { }) + }) + browserView.webContents.on('did-stop-loading', _ => { + utils.onDispatchEvent(webWindow.webContents, { + event: 'stop-loading', + id: browserView.webContents.id, + }).then(_ => { }) + }) + browserView.webContents.on('before-input-event', (event, input) => { + if (input.meta && input.key.toLowerCase() === 'r') { + browserView.webContents.reload() + event.preventDefault() + } + }) + browserView.webContents.loadURL(args.url).then(_ => { }).catch(_ => { }) + + webWindow.addBrowserView(browserView) + webTabView.push({ + id: browserView.webContents.id, + view: browserView + }) + + utils.onDispatchEvent(webWindow.webContents, { + event: 'create', + id: browserView.webContents.id, + url: args.url, + }).then(_ => { }) + switchWebTab(browserView.webContents.id) +} + +/** + * 获取当前内置浏览器标签 + * @returns {Electron.BrowserView|undefined} + */ +function currentWebTab() { + const views = webWindow.getBrowserViews() + const view = views.length ? views[views.length - 1] : undefined + if (!view) { + return undefined + } + return webTabView.find(item => item.id == view.webContents.id) +} + +/** + * 重新加载内置浏览器标签 + * @param id + */ +function reloadWebTab(id) { + const item = id === 0 ? currentWebTab() : webTabView.find(item => item.id == id) + if (!item) { + return + } + item.view.webContents.reload() +} + +/** + * 调整内置浏览器标签尺寸 + * @param id + */ +function resizeWebTab(id) { + const item = id === 0 ? currentWebTab() : webTabView.find(item => item.id == id) + if (!item) { + return + } + item.view.setBounds({ + x: 0, + y: webTabHeight, + width: webWindow.getContentBounds().width || 1280, + height: (webWindow.getContentBounds().height || 800) - webTabHeight, + }) +} + +/** + * 切换内置浏览器标签 + * @param id + */ +function switchWebTab(id) { + const item = id === 0 ? currentWebTab() : webTabView.find(item => item.id == id) + if (!item) { + return + } + resizeWebTab(item.id) + webWindow.setTopBrowserView(item.view) + item.view.webContents.focus() + utils.onDispatchEvent(webWindow.webContents, { + event: 'switch', + id: item.id, + }).then(_ => { }) +} + +/** + * 关闭内置浏览器标签 + * @param id + */ +function closeWebTab(id) { + const item = id === 0 ? currentWebTab() : webTabView.find(item => item.id == id) + if (!item) { + return + } + if (webTabView.length === 1) { + webWindow.hide() + } + webWindow.removeBrowserView(item.view) + item.view.webContents.close() + + const index = webTabView.findIndex(({id}) => item.id == id) + if (index > -1) { + webTabView.splice(index, 1) + } + + utils.onDispatchEvent(webWindow.webContents, { + event: 'close', + id: item.id, + }).then(_ => { }) + + if (webTabView.length === 0) { + userConf.set('webWindow', webWindow.getBounds()) + webWindow.destroy() + } else { + switchWebTab(0) + } +} + const getTheLock = app.requestSingleInstanceLock() if (!getTheLock) { app.quit() @@ -355,6 +649,45 @@ ipcMain.on('updateRouter', (event, args) => { event.returnValue = "ok" }) +/** + * 内置浏览器 - 打开创建 + * @param args {url, ?} + */ +ipcMain.on('openWebWindow', (event, args) => { + createWebWindow(args) + event.returnValue = "ok" +}) + +/** + * 内置浏览器 - 激活标签 + * @param id + */ +ipcMain.on('webTabSwitch', (event, id) => { + switchWebTab(id) + event.returnValue = "ok" +}) + +/** + * 内置浏览器 - 关闭标签 + * @param id + */ +ipcMain.on('webTabClose', (event, id) => { + closeWebTab(id) + event.returnValue = "ok" +}) + +/** + * 内置浏览器 - 在外部浏览器打开 + */ +ipcMain.on('webTabBrowser', (event) => { + const item = currentWebTab() + if (!item) { + return + } + openExternal(item.view.webContents.getURL()) + event.returnValue = "ok" +}) + /** * 隐藏窗口(mac、win隐藏,其他关闭) */ @@ -512,9 +845,7 @@ ipcMain.on('storageBrowser', (event, args) => { }, }) } - storageBrowser.loadURL(args.url).then(_ => { - - }) + storageBrowser.loadURL(args.url).then(_ => { }).catch(_ => { }) } event.returnValue = "ok" }) @@ -682,6 +1013,9 @@ ipcMain.on('updateCheckAndDownload', (event, args) => { autoUpdater.setFeedURL(args) } autoUpdater.checkForUpdates().then(info => { + if (!info) { + return + } if (utils.compareVersion(config.version, info.updateInfo.version) >= 0) { return } diff --git a/electron/package.json b/electron/package.json index a35e7ece9..dcd42a6ef 100755 --- a/electron/package.json +++ b/electron/package.json @@ -26,14 +26,14 @@ "url": "https://github.com/kuaifan/dootask.git" }, "devDependencies": { - "@electron-forge/cli": "^7.2.0", - "@electron-forge/maker-deb": "^7.2.0", - "@electron-forge/maker-rpm": "^7.2.0", - "@electron-forge/maker-squirrel": "^7.2.0", - "@electron-forge/maker-zip": "^7.2.0", + "@electron-forge/cli": "^7.3.0", + "@electron-forge/maker-deb": "^7.3.0", + "@electron-forge/maker-rpm": "^7.3.0", + "@electron-forge/maker-squirrel": "^7.3.0", + "@electron-forge/maker-zip": "^7.3.0", "dotenv": "^16.3.1", - "electron": "^28.1.1", - "electron-builder": "^24.9.1", + "electron": "^29.0.1", + "electron-builder": "^24.12.0", "electron-notarize": "^1.2.2", "form-data": "^4.0.0", "ora": "^4.1.1" @@ -41,7 +41,8 @@ "dependencies": { "axios": "^1.6.2", "crc": "^3.8.0", - "electron-log": "^5.0.1", + "electron-config": "^2.0.0", + "electron-log": "^5.1.1", "electron-screenshots-tool": "^1.1.2", "electron-squirrel-startup": "^1.0.0", "electron-updater": "^6.1.7", @@ -67,6 +68,7 @@ "output": "dist" }, "files": [ + "render/**/*", "public/**/*", "electron-menu.js", "electron-preload.js", diff --git a/electron/render/tabs/assets/css/style.css b/electron/render/tabs/assets/css/style.css new file mode 100644 index 000000000..addb93c6a --- /dev/null +++ b/electron/render/tabs/assets/css/style.css @@ -0,0 +1,269 @@ +:root { + --tab-font-family: -apple-system, 'Segoe UI', roboto, oxygen-sans, ubuntu, cantarell, 'Helvetica Neue', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + --tab-font-size: 12px; + --tab-transition: background-color 200ms ease-out, color 200ms ease-out; + --tab-cursor: pointer; /* 设置鼠标指针为手型 */ + --tab-color: #7f8792; + --tab-background: #EFF0F4; + --tab-active-color: #222529; + --tab-active-background: #FFFFFF; + --tab-close-color: #9DA3AC; +} + +* { + margin: 0; + padding: 0; +} + +html, body { + margin: 0; + padding: 0; + font-family: 'Roboto', sans-serif; + font-size: 16px; + color: #333; +} + +.nav { + font-family: var(--tab-font-family); + font-feature-settings: 'clig', 'kern'; + display: flex; + width: 100%; + cursor: default; + background-color: var(--tab-background); + -webkit-app-region: drag; +} + +.nav ul { + display: flex; + height: 30px; + margin: 8px 46px 0 0; + user-select: none; + overflow-x: auto; + overflow-y: hidden; +} + +.nav ul::-webkit-scrollbar { + display: none; +} + +.nav ul li { + display: inline-flex; + position: relative; + box-sizing: border-box; + align-items: center; + height: 100%; + padding: 7px 8px; + margin: 0 8px 0 0; + min-width: 100px; + max-width: 240px; + scroll-margin: 12px; + font-size: var(--tab-font-size); + color: var(--tab-color); + cursor: var(--tab-cursor); + transition: var(--tab-transition); + -webkit-app-region: none; +} + +.nav ul li:first-child { + margin-left: 8px; + border-left: none; +} + + +.nav ul li.active { + color: var(--tab-active-color); + background: var(--tab-active-background); + border-radius: 6px 6px 0 0; +} + +.nav ul li.active::before { + position: absolute; + bottom: 0; + left: -6px; + width: 6px; + height: 6px; + background-image: url(../image/select_left.png); + background-repeat: no-repeat; + background-size: cover; + content: ''; +} + +.nav ul li.active::after { + position: absolute; + right: -6px; + bottom: 0; + width: 6px; + height: 6px; + background-image: url(../image/select_right.png); + background-repeat: no-repeat; + background-size: cover; + content: ''; +} + +.nav ul li.active .tab-icon.background { + background-image: url(../image/link_normal_selected_icon.png); +} + + +.nav ul li:not(.active)::after { + position: absolute; + right: 0; + width: 1px; + height: 16px; + background: rgba(0, 0, 0, 0.08); + content: ''; +} + +.nav ul li:not(.active):last-child::after { + content: none; +} + +/* 浏览器打开 */ +.browser { + position: absolute; + top: 0; + right: 0; + display: flex; + align-items: center; + height: 38px; + padding: 0 14px; + cursor: pointer; + -webkit-app-region: none; +} +.browser span { + display: inline-block; + width: 18px; + height: 18px; + background-size: cover; + background-image: url(../image/link_normal_selected_icon.png); +} + +/* 图标 */ +.tab-icon { + display: inline-block; + flex-shrink: 0; + width: 18px; + height: 18px; + background-size: cover; +} + +.tab-icon.background { + background-image: url(../image/link_normal_icon.png); +} + +.tab-icon.loading { + background-image: none !important; +} + +.tab-icon .tab-icon-loading { + width: 18px; + height: 18px; + border: 2px solid #eeeeee; + border-bottom-color: #84C56A; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: spin 0.75s linear infinite; +} + +.tab-icon:not(.loading) .tab-icon-loading { + display: none; +} + +.tab-icon img { + width: 16px; + height: 16px; + border-radius: 4px; +} + +@keyframes spin { + 0% { + transform: scale(0.8) rotate(0deg); + } + 100% { + transform: scale(0.8) rotate(360deg); + } +} + +/* 标题 */ +.tab-title { + display: inline-block; + flex: 1; + margin-right: 8px; + margin-left: 6px; + overflow: hidden; + line-height: 150%; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* 关闭 */ +.tab-close { + display: inline-block; + width: 14px; + height: 14px; + margin-right: 2px; + position: relative; +} + +.tab-close::after, +.tab-close::before { + position: absolute; + top: 50%; + right: 50%; + transform: translate(50%, -50%) scale(0.9) rotate(45deg); + content: ""; + width: 2px; + height: 11px; + border-radius: 3px; + background-color: var(--tab-close-color); +} + +.tab-close::before { + transform: translate(50%, -50%) scale(0.9) rotate(-45deg); +} + +/* 不同平台样式 */ +body.win32 .nav ul { + margin-left: 8px; + margin-right: 186px; +} +body.win32 .browser { + right: 140px; +} +body.darwin .nav ul { + margin-left: 76px; +} +body.darwin.full-screen .nav ul { + margin-left: 8px; +} + +/* 暗黑模式 */ +@media (prefers-color-scheme: dark) { + :root { + --tab-color: #C5C5C5; + --tab-background: #3B3B3D; + --tab-active-color: #E1E1E1; + --tab-active-background: #575757; + --tab-close-color: #E3E3E3; + } + .nav ul li.active::before { + background-image: url(../image/dark/select_left.png); + } + + .nav ul li.active::after { + background-image: url(../image/dark/select_right.png); + } + + .nav ul li.active .tab-icon.background { + background-image: url(../image/dark/link_normal_selected_icon.png); + } + + .browser span { + background-image: url(../image/dark/link_normal_selected_icon.png); + } + + .tab-icon.background { + background-image: url(../image/dark/link_normal_icon.png); + } +} diff --git a/electron/render/tabs/assets/image/dark/link_normal_icon.png b/electron/render/tabs/assets/image/dark/link_normal_icon.png new file mode 100644 index 000000000..b8872c175 Binary files /dev/null and b/electron/render/tabs/assets/image/dark/link_normal_icon.png differ diff --git a/electron/render/tabs/assets/image/dark/link_normal_selected_icon.png b/electron/render/tabs/assets/image/dark/link_normal_selected_icon.png new file mode 100644 index 000000000..1fb4c665d Binary files /dev/null and b/electron/render/tabs/assets/image/dark/link_normal_selected_icon.png differ diff --git a/electron/render/tabs/assets/image/dark/select_left.png b/electron/render/tabs/assets/image/dark/select_left.png new file mode 100644 index 000000000..8edc1417c Binary files /dev/null and b/electron/render/tabs/assets/image/dark/select_left.png differ diff --git a/electron/render/tabs/assets/image/dark/select_right.png b/electron/render/tabs/assets/image/dark/select_right.png new file mode 100644 index 000000000..fe9826025 Binary files /dev/null and b/electron/render/tabs/assets/image/dark/select_right.png differ diff --git a/electron/render/tabs/assets/image/link_normal_icon.png b/electron/render/tabs/assets/image/link_normal_icon.png new file mode 100644 index 000000000..b8872c175 Binary files /dev/null and b/electron/render/tabs/assets/image/link_normal_icon.png differ diff --git a/electron/render/tabs/assets/image/link_normal_selected_icon.png b/electron/render/tabs/assets/image/link_normal_selected_icon.png new file mode 100644 index 000000000..842d89929 Binary files /dev/null and b/electron/render/tabs/assets/image/link_normal_selected_icon.png differ diff --git a/electron/render/tabs/assets/image/select_left.png b/electron/render/tabs/assets/image/select_left.png new file mode 100644 index 000000000..2a77b7425 Binary files /dev/null and b/electron/render/tabs/assets/image/select_left.png differ diff --git a/electron/render/tabs/assets/image/select_right.png b/electron/render/tabs/assets/image/select_right.png new file mode 100644 index 000000000..8902845f8 Binary files /dev/null and b/electron/render/tabs/assets/image/select_right.png differ diff --git a/electron/render/tabs/assets/js/vue.global.min.js b/electron/render/tabs/assets/js/vue.global.min.js new file mode 100644 index 000000000..7640be59b --- /dev/null +++ b/electron/render/tabs/assets/js/vue.global.min.js @@ -0,0 +1,14 @@ +var Vue=function(r){"use strict";function e(e,t){const n=Object.create(null);var r=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}const y={[1]:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT","-1":"HOISTED","-2":"BAIL"},x={[1]:"STABLE",2:"DYNAMIC",3:"FORWARDED"};const i=e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),d=2;const _=e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function w(e){return!!e||""===e}function a(t){if(ae(t)){const o={};for(let e=0;e{if(e){const t=e.split(u);1N(e,t))}const V=(e,t)=>t&&t.__v_isRef?V(e,t.value):Y(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n])=>(e[t+" =>"]=n,e),{})}:X(t)?{[`Set(${t.size})`]:[...t.values()]}:!re(t)||ae(t)||he(t)?t:String(t),E=Object.freeze({}),le=Object.freeze([]),te=()=>{},H=()=>!1,z=/^on[^a-z]/,W=e=>z.test(e),K=e=>e.startsWith("onUpdate:"),$=Object.assign,G=(e,t)=>{t=e.indexOf(t);-1J.call(e,t),ae=Array.isArray,Y=e=>"[object Map]"===ee(e),X=e=>"[object Set]"===ee(e),Z=e=>"[object Date]"===ee(e),ne=e=>"function"==typeof e,ce=e=>"string"==typeof e,pe=e=>"symbol"==typeof e,re=e=>null!==e&&"object"==typeof e,de=e=>re(e)&&ne(e.then)&&ne(e.catch),Q=Object.prototype.toString,ee=e=>Q.call(e),fe=e=>ee(e).slice(8,-1),he=e=>"[object Object]"===ee(e),me=e=>ce(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,ve=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ge=e("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo");var ye=t=>{const n=Object.create(null);return e=>{return n[e]||(n[e]=t(e))}};const be=/-(\w)/g,A=ye(e=>e.replace(be,(e,t)=>t?t.toUpperCase():"")),_e=/\B([A-Z])/g,I=ye(e=>e.replace(_e,"-$1").toLowerCase()),we=ye(e=>e.charAt(0).toUpperCase()+e.slice(1)),xe=ye(e=>e?"on"+we(e):""),Se=(e,t)=>!Object.is(e,t),Ce=(t,n)=>{for(let e=0;e{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Te=e=>{var t=parseFloat(e);return isNaN(t)?e:t};let Ee;const Ne=()=>Ee=Ee||("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{});function Oe(e,...t){console.warn("[Vue warn] "+e,...t)}let n;class $e{constructor(e=!1){this.active=!0,this.effects=[],this.cleanups=[],!e&&n&&(this.parent=n,this.index=(n.scopes||(n.scopes=[])).push(this)-1)}run(e){if(this.active){var t=n;try{return n=this,e()}finally{n=t}}else Oe("cannot run an inactive effect scope.")}on(){n=this}off(){n=this.parent}stop(n){if(this.active){let e,t;for(e=0,t=this.effects.length;e{const t=new Set(e);return t.w=0,t.n=0,t},Ie=e=>0<(e.w&je),Me=e=>0<(e.n&je),Fe=new WeakMap;let Pe=0,je=1;const Ve=30;let s;const Le=Symbol("iterate"),Be=Symbol("Map key iterate");class Ue{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,Re(this,n)}run(){if(!this.active)return this.fn();let e=s;for(var t=He;e;){if(e===this)return;e=e.parent}try{if(this.parent=s,s=this,He=!0,je=1<<++Pe,Pe<=Ve){var n=[this["deps"]][0];if(n.length)for(let e=0;e{("length"===t||o<=t)&&n.push(e)});else switch(void 0!==r&&n.push(l.get(r)),t){case"add":ae(e)?me(r)&&n.push(l.get("length")):(n.push(l.get(Le)),Y(e)&&n.push(l.get(Be)));break;case"delete":ae(e)||(n.push(l.get(Le)),Y(e)&&n.push(l.get(Be)));break;case"set":Y(e)&&n.push(l.get(Le))}t={target:e,type:t,key:r,newValue:o,oldValue:i,oldTarget:s};if(1===n.length)n[0]&&qe(n[0],t);else{const a=[];for(const c of n)c&&a.push(...c);qe(Ae(a),t)}}}function qe(e,t){e=ae(e)?e:[...e];for(const n of e)n.computed&&Ye(n,t);for(const r of e)r.computed||Ye(r,t)}function Ye(e,t){e===s&&!e.allowRecurse||(e.onTrigger&&e.onTrigger($({effect:e},t)),e.scheduler?e.scheduler():e.run())}const Xe=e("__proto__,__v_isRef,__isVue"),Ze=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(pe));var ye=rt(),Qe=rt(!1,!0),t=rt(!0),et=rt(!0,!0);const tt=nt();function nt(){const e={};return["includes","indexOf","lastIndexOf"].forEach(r=>{e[r]=function(...e){const n=M(this);for(let e=0,t=this.length;e{e[t]=function(...e){We();e=M(this)[t].apply(this,e);return Ke(),e}}),e}function rt(o=!1,i=!1){return function(e,t,n){if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return i;if("__v_raw"===t&&n===(o?i?Ft:Mt:i?It:At).get(e))return e;var r=ae(e);if(!o&&r&&R(tt,t))return Reflect.get(tt,t,n);n=Reflect.get(e,t,n);return(pe(t)?Ze.has(t):Xe(t))?n:(o||f(e,"get",t),i?n:q(n)?r&&me(t)?n:n.value:re(n)?(o?Vt:Pt)(n):n)}}function ot(l=!1){return function(e,t,n,r){let o=e[t];if(Dt(o)&&q(o)&&!q(n))return!1;if(!l&&!Dt(n)&&(Ht(n)||(n=M(n),o=M(o)),!ae(e)&&q(o)&&!q(n)))return o.value=n,!0;var i=ae(e)&&me(t)?Number(t)e,ut=e=>Reflect.getPrototypeOf(e);function pt(e,t,n=!1,r=!1){var o=M(e=e.__v_raw),i=M(t);n||(t!==i&&f(o,"get",t),f(o,"get",i));const s=ut(o)["has"],l=r?ct:n?Gt:Kt;return s.call(o,t)?l(e.get(t)):s.call(o,i)?l(e.get(i)):void(e!==o&&e.get(t))}function dt(e,t=!1){const n=this.__v_raw;var r=M(n),o=M(e);return t||(e!==o&&f(r,"has",e),f(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function ft(e,t=!1){return e=e.__v_raw,t||f(M(e),"iterate",Le),Reflect.get(e,"size",e)}function ht(e){e=M(e);const t=M(this),n=ut(t);return n.has.call(t,e)||(t.add(e),Je(t,"add",e,e)),this}function mt(e,t){t=M(t);const n=M(this),{has:r,get:o}=ut(n);let i=r.call(n,e);i?Rt(n,r,e):(e=M(e),i=r.call(n,e));var s=o.call(n,e);return n.set(e,t),i?Se(t,s)&&Je(n,"set",e,t,s):Je(n,"add",e,t),this}function vt(e){const t=M(this),{has:n,get:r}=ut(t);let o=n.call(t,e);o?Rt(t,n,e):(e=M(e),o=n.call(t,e));var i=r?r.call(t,e):void 0,s=t.delete(e);return o&&Je(t,"delete",e,void 0,i),s}function gt(){const e=M(this);var t=0!==e.size,n=new(Y(e)?Map:Set)(e),r=e.clear();return t&&Je(e,"clear",void 0,void 0,n),r}function yt(s,l){return function(n,r){const o=this,e=o.__v_raw;var t=M(e);const i=l?ct:s?Gt:Kt;return s||f(t,"iterate",Le),e.forEach((e,t)=>n.call(r,i(e),i(t),o))}}function bt(l,a,c){return function(...e){const t=this.__v_raw;var n=M(t),r=Y(n);const o="entries"===l||l===Symbol.iterator&&r;r="keys"===l&&r;const i=t[l](...e),s=c?ct:a?Gt:Kt;return a||f(n,"iterate",r?Be:Le),{next(){var{value:e,done:t}=i.next();return t?{value:e,done:t}:{value:o?[s(e[0]),s(e[1])]:s(e),done:t}},[Symbol.iterator](){return this}}}}function _t(t){return function(...e){e=e[0]?`on key "${e[0]}" `:"";return console.warn(we(t)+` operation ${e}failed: target is readonly.`,M(this)),"delete"!==t&&this}}function wt(){const t={get(e){return pt(this,e)},get size(){return ft(this)},has:dt,add:ht,set:mt,delete:vt,clear:gt,forEach:yt(!1,!1)},n={get(e){return pt(this,e,!1,!0)},get size(){return ft(this)},has:dt,add:ht,set:mt,delete:vt,clear:gt,forEach:yt(!1,!0)},r={get(e){return pt(this,e,!0)},get size(){return ft(this,!0)},has(e){return dt.call(this,e,!0)},add:_t("add"),set:_t("set"),delete:_t("delete"),clear:_t("clear"),forEach:yt(!0,!1)},o={get(e){return pt(this,e,!0,!0)},get size(){return ft(this,!0)},has(e){return dt.call(this,e,!0)},add:_t("add"),set:_t("set"),delete:_t("delete"),clear:_t("clear"),forEach:yt(!0,!0)},e=["keys","values","entries",Symbol.iterator];return e.forEach(e=>{t[e]=bt(e,!1,!1),r[e]=bt(e,!0,!1),n[e]=bt(e,!1,!0),o[e]=bt(e,!0,!0)}),[t,r,n,o]}const[xt,St,Ct,kt]=wt();function Tt(r,e){const o=e?r?kt:Ct:r?St:xt;return(e,t,n)=>"__v_isReactive"===t?!r:"__v_isReadonly"===t?r:"__v_raw"===t?e:Reflect.get(R(o,t)&&t in e?o:e,t,n)}const Et={get:Tt(!1,!1)},Nt={get:Tt(!1,!0)},Ot={get:Tt(!0,!1)},$t={get:Tt(!0,!0)};function Rt(e,t,n){var r=M(n);r!==n&&t.call(e,r)&&(n=fe(e),console.warn(`Reactive ${n} contains both the raw and reactive `+`versions of the same object${"Map"===n?" as keys":""}, `+"which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible."))}const At=new WeakMap,It=new WeakMap,Mt=new WeakMap,Ft=new WeakMap;function Pt(e){return Dt(e)?e:Bt(e,!1,it,Et,At)}function jt(e){return Bt(e,!1,lt,Nt,It)}function Vt(e){return Bt(e,!0,st,Ot,Mt)}function Lt(e){return Bt(e,!0,at,$t,Ft)}function Bt(e,t,n,r,o){if(!re(e))return console.warn("value cannot be made reactive: "+String(e)),e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;t=o.get(e);if(t)return t;t=function(e){if(e.__v_skip||!Object.isExtensible(e))return 0;switch(fe(e)){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(e);if(0===t)return e;t=new Proxy(e,2===t?r:n);return o.set(e,t),t}function Ut(e){return Dt(e)?Ut(e.__v_raw):!(!e||!e.__v_isReactive)}function Dt(e){return!(!e||!e.__v_isReadonly)}function Ht(e){return!(!e||!e.__v_isShallow)}function zt(e){return Ut(e)||Dt(e)}function M(e){var t=e&&e.__v_raw;return t?M(t):e}function Wt(e){return ke(e,"__v_skip",!0),e}const Kt=e=>re(e)?Pt(e):e,Gt=e=>re(e)?Vt(e):e;function Jt(e){He&&s&&Ge((e=M(e)).dep||(e.dep=Ae()),{target:e,type:"get",key:"value"})}function qt(e,t){(e=M(e)).dep&&qe(e.dep,{target:e,type:"set",key:"value",newValue:t})}function q(e){return!(!e||!0!==e.__v_isRef)}function Yt(e){return Xt(e,!1)}function Xt(e,t){return q(e)?e:new Zt(e,t)}class Zt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:M(e),this._value=t?e:Kt(e)}get value(){return Jt(this),this._value}set value(e){e=this.__v_isShallow?e:M(e),Se(e,this._rawValue)&&(this._rawValue=e,this._value=this.__v_isShallow?e:Kt(e),qt(this,e))}}function Qt(e){return q(e)?e.value:e}const en={get:(e,t,n)=>Qt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return q(o)&&!q(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function tn(e){return Ut(e)?e:new Proxy(e,en)}class nn{constructor(e){this.dep=void 0,this.__v_isRef=!0;var{get:e,set:t}=e(()=>Jt(this),()=>qt(this));this._get=e,this._set=t}get value(){return this._get()}set value(e){this._set(e)}}class rn{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){var e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}}function on(e,t,n){var r=e[t];return q(r)?r:new rn(e,t,n)}class sn{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new Ue(e,()=>{this._dirty||(this._dirty=!0,qt(this))}),(this.effect.computed=this).effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=M(this);return Jt(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}const ln=[];function an(e){ln.push(e)}function cn(){ln.pop()}function oe(e,...t){We();const n=ln.length?ln[ln.length-1].component:null;var r=n&&n.appContext.config.warnHandler;const o=function(){let e=ln[ln.length-1];if(!e)return[];const t=[];for(;e;){const r=t[0];r&&r.vnode===e?r.recurseCount++:t.push({vnode:e,recurseCount:0});var n=e.component&&e.component.parent;e=n&&n.vnode}return t}();if(r)pn(r,n,11,[e+t.join(""),n&&n.proxy,o.map(({vnode:e})=>`at <${rs(n,e.type)}>`).join("\n"),o]);else{const i=["[Vue warn]: "+e,...t];o.length&&i.push(` +`,...function(e){const r=[];return e.forEach((e,t)=>{var n;r.push(...0===t?[]:[` +`],...({vnode:t,recurseCount:e}=[e][0],e=0{n.push(...function e(t,n,r){return ce(n)?(n=JSON.stringify(n),r?n:[t+"="+n]):"number"==typeof n||"boolean"==typeof n||null==n?r?n:[t+"="+n]:q(n)?(n=e(t,M(n.value),!0),r?n:[t+"=Ref<",n,">"]):ne(n)?[t+"=fn"+(n.name?`<${n.name}>`:"")]:(n=M(n),r?n:[t+"=",n])}(e,t[e]))}),3{fn(e,n,r)}),e}const i=[];for(let e=0;e>>1;Fn(vn[r])Fn(e)-Fn(t)),Sn=0;Snnull==e.id?1/0:e.id;function Pn(e){mn=!1,hn=!0,In(e=e||new Map),vn.sort((e,t)=>Fn(e)-Fn(t));try{for(gn=0;gnEn)return oe(`Maximum recursive updates exceeded${(n=(n=t.ownerInstance)&&ns(n.type))?` in component <${n}>`:""}. `+"This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function."),!0;e.set(t,r+1)}else e.set(t,1)}let Vn=!1;const Ln=new Set,Bn=(Ne().__VUE_HMR_RUNTIME__={createRecord:zn(Un),rerender:zn(function(e,t){const n=Bn.get(e);n&&(n.initialDef.render=t,[...n.instances].forEach(e=>{t&&(e.render=t,Dn(e.type).render=t),e.renderCache=[],Vn=!0,e.update(),Vn=!1}))}),reload:zn(function(e,t){var n=Bn.get(e);if(n){t=Dn(t),Hn(n.initialDef,t);const o=[...n.instances];for(const i of o){var r=Dn(i.type);Ln.has(r)||(r!==n.initialDef&&Hn(r,t),Ln.add(r)),i.appContext.optionsCache.delete(i.type),i.ceReload?(Ln.add(r),i.ceReload(t.styles),Ln.delete(r)):i.parent?(On(i.parent.update),i.parent.type.__asyncLoader&&i.parent.ceReload&&i.parent.ceReload(t.styles)):i.appContext.reload?i.appContext.reload():"undefined"!=typeof window?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required.")}An(()=>{for(const e of o)Ln.delete(Dn(e.type))})}})},new Map);function Un(e,t){return!Bn.has(e)&&(Bn.set(e,{initialDef:Dn(t),instances:new Set}),!0)}function Dn(e){return os(e)?e.__vccOpts:e}function Hn(e,t){$(e,t);for(const n in e)"__file"===n||n in t||delete e[n]}function zn(n){return(e,t)=>{try{return n(e,t)}catch(e){console.error(e),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let Wn=[],Kn=!1;function Gn(e,...t){r.devtools?r.devtools.emit(e,...t):Kn||Wn.push({event:e,args:t})}function Jn(e,t){if(r.devtools=e,r.devtools)r.devtools.enabled=!0,Wn.forEach(({event:e,args:t})=>r.devtools.emit(e,...t)),Wn=[];else if("undefined"==typeof window||!window.HTMLElement||null!=(e=null==(e=window.navigator)?void 0:e.userAgent)&&e.includes("jsdom"))Kn=!0,Wn=[];else{const n=t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[];n.push(e=>{Jn(e,t)}),setTimeout(()=>{r.devtools||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Kn=!0,Wn=[])},3e3)}}const qn=Zn("component:added"),Yn=Zn("component:updated"),Xn=Zn("component:removed");function Zn(t){return e=>{Gn(t,e.appContext.app,e.uid,e.parent?e.parent.uid:void 0,e)}}const Qn=tr("perf:start"),er=tr("perf:end");function tr(r){return(e,t,n)=>{Gn(r,e.appContext.app,e.uid,e,t,n)}}function nr(r,o,...i){if(!r.isUnmounted){var s=r.vnode.props||E,{emitsOptions:l,propsOptions:[a]}=r;if(l)if(o in l){const u=l[o];ne(u)&&!u(...i)&&oe(`Invalid event arguments: event validation failed for event "${o}".`)}else a&&xe(o)in a||oe(`Component emitted event "${o}" but it is neither declared in `+`the emits option nor as an "${xe(o)}" prop.`);let e=i;var c,l=o.startsWith("update:"),a=l&&o.slice(7),a=(a&&a in s&&({number:a,trim:c}=s[`${"modelValue"===a?"model":a}Modifiers`]||E,c&&(e=i.map(e=>e.trim())),a&&(e=i.map(Te))),c=e,Gn("component:emit",r.appContext.app,r,o,c),o.toLowerCase());a!==o&&s[xe(a)]&&oe(`Event "${a}" is emitted in component `+rs(r,r.type)+` but the handler is registered for "${o}". `+"Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. "+`You should probably use "${I(o)}" instead of "${o}".`);let t,n=s[t=xe(o)]||s[t=xe(A(o))];(n=!n&&l?s[t=xe(I(o))]:n)&&dn(n,r,6,e);i=s[t+"Once"];if(i){if(r.emitted){if(r.emitted[t])return}else r.emitted={};r.emitted[t]=!0,dn(i,r,6,e)}}}function rr(e,t){return e&&W(t)&&(t=t.slice(2).replace(/Once$/,""),R(e,t[0].toLowerCase()+t.slice(1))||R(e,I(t))||R(e,t))}let h=null,or=null;function ir(e){var t=h;return h=e,or=e&&e.type.__scopeId||null,t}function sr(n,r=h,e){if(!r)return n;if(n._n)return n;const o=(...e)=>{o._d&&bi(-1);var t=ir(r),e=n(...e);return ir(t),o._d&&bi(1),Yn(r),e};return o._n=!0,o._c=!0,o._d=!0,o}let lr=!1;function ar(){lr=!0}function cr(t){const{type:e,vnode:n,proxy:r,withProxy:o,props:i,propsOptions:[s],slots:l,attrs:a,emit:c,render:u,renderCache:p,data:d,setupState:f,ctx:h,inheritAttrs:m}=t;let v,g;var y=ir(t);lr=!1;try{if(4&n.shapeFlag){var b=o||r;v=Ii(u.call(b,b,p,i,f,d,h)),g=a}else{const u=e;a===i&&ar(),v=Ii(1 renders non-element root node that cannot be animated."),_.transition=n.transition),w?w(_):v=_,ir(y),v}const ur=t=>{const n=t.children,r=t.dynamicChildren;var e=pr(n);if(!e)return[t,void 0];const o=n.indexOf(e),i=r?r.indexOf(e):-1;return[Ii(e),e=>{n[o]=e,r&&(-1{let t;for(const n in e)"class"!==n&&"style"!==n&&!W(n)||((t=t||{})[n]=e[n]);return t},fr=(e,t)=>{const n={};for(const r in e)K(r)&&r.slice(9)in t||(n[r]=e[r]);return n},hr=e=>7&e.shapeFlag||e.type===se;function mr(t,n,r){var o=Object.keys(n);if(o.length!==Object.keys(t).length)return!0;for(let e=0;ee.__isSuspense;ye={name:"Suspense",__isSuspense:!0,process(e,t,n,r,o,i,s,l,a,c){if(null!=e){var[e,u,p,d,f,h,m,v,{p:g,um:y,o:{createElement:b}}]=[e,t,n,r,o,s,l,a,c];const _=u.suspense=e.suspense,w=((_.vnode=u).el=e.el,u.ssContent),x=u.ssFallback,{activeBranch:S,pendingBranch:C,isInFallback:k,isHydrating:T}=_;if(C)Si(_.pendingBranch=w,C)?(g(C,w,_.hiddenContainer,null,f,_,h,m,v),_.deps<=0?_.resolve():k&&(g(S,x,p,d,f,null,h,m,v),Sr(_,x))):(_.pendingId++,T?(_.isHydrating=!1,_.activeBranch=C):y(C,f,_),_.deps=0,_.effects.length=0,_.hiddenContainer=b("div"),k?(g(null,w,_.hiddenContainer,null,f,_,h,m,v),_.deps<=0?_.resolve():(g(S,x,p,d,f,null,h,m,v),Sr(_,x))):S&&Si(w,S)?(g(S,w,p,d,f,_,h,m,v),_.resolve(!0)):(g(null,w,_.hiddenContainer,null,f,_,h,m,v),_.deps<=0&&_.resolve()));else if(S&&Si(w,S))g(S,w,p,d,f,_,h,m,v),Sr(_,w);else if(yr(u,"onPending"),_.pendingBranch=w,_.pendingId++,g(null,w,_.hiddenContainer,null,f,_,h,m,v),_.deps<=0)_.resolve();else{const{timeout:E,pendingId:N}=_;0{_.pendingId===N&&_.fallback(x)},E):0===E&&_.fallback(x)}}else{e=t;y=n;b=r;p=o;d=i;u=s;g=l;f=a;h=c;const{p:O,o:{createElement:$}}=h,R=$("div"),A=e.suspense=_r(e,d,p,y,R,b,u,g,f,h);O(null,A.pendingBranch=e.ssContent,R,null,p,A,u,g),0 is an experimental feature and its API will likely change."));const{p,m:d,um:f,n:h,o:{parentNode:m,remove:v}}=l;l=Te(e.props&&e.props.timeout);const g={vnode:e,parent:t,parentComponent:n,isSVG:s,container:r,hiddenContainer:o,anchor:i,deps:0,pendingId:0,timeout:"number"==typeof l?l:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:a,isUnmounted:!1,effects:[],resolve(t=!1){if(!t&&!g.pendingBranch)throw new Error("suspense.resolve() is called without a pending branch.");if(g.isUnmounted)throw new Error("suspense.resolve() is called on an already unmounted suspense boundary.");const{vnode:e,activeBranch:n,pendingBranch:r,pendingId:o,effects:i,parentComponent:s,container:l}=g;if(g.isHydrating)g.isHydrating=!1;else if(!t){t=n&&r.transition&&"out-in"===r.transition.mode;t&&(n.transition.afterLeave=()=>{o===g.pendingId&&d(r,l,e,0)});let e=g["anchor"];n&&(e=h(n),f(n,s,g,!0)),t||d(r,l,e,0)}Sr(g,r),g.pendingBranch=null,g.isInFallback=!1;let a=g.parent,c=!1;for(;a;){if(a.pendingBranch){a.effects.push(...i),c=!0;break}a=a.parent}c||An(i),g.effects=[],yr(e,"onResolve")},fallback(e){if(g.pendingBranch){const{vnode:r,activeBranch:o,parentComponent:i,container:s,isSVG:l}=g,a=(yr(r,"onFallback"),h(o));var t=()=>{g.isInFallback&&(p(null,e,s,a,i,null,l,c,u),Sr(g,e))},n=e.transition&&"out-in"===e.transition.mode;n&&(o.transition.afterLeave=t),g.isInFallback=!0,f(o,i,null,!0),n||t()}},move(e,t,n){g.activeBranch&&d(g.activeBranch,e,t,n),g.container=e},next(){return g.activeBranch&&h(g.activeBranch)},registerDep(n,r){const o=!!g.pendingBranch,i=(o&&g.deps++,n.vnode.el);n.asyncDep.catch(e=>{fn(e,n,0)}).then(e=>{if(!n.isUnmounted&&!g.isUnmounted&&g.pendingId===n.suspenseId){n.asyncResolved=!0;const t=n["vnode"];an(t),Ki(n,e,!1),i&&(t.el=i);e=!i&&n.subTree.el;r(n,t,m(i||n.subTree.el),i?null:h(n.subTree),g,s,u),e&&v(e),vr(n,t.el),cn(),o&&0==--g.deps&&g.resolve()}})},unmount(e,t){g.isUnmounted=!0,g.activeBranch&&f(g.activeBranch,n,e,t),g.pendingBranch&&f(g.pendingBranch,n,e,t)}};return g}function wr(t){let e;var n;return ne(t)&&((n=yi&&t._c)&&(t._d=!1,vi()),t=t(),n&&(t._d=!0,e=c,gi())),ae(t)&&((n=pr(t))||oe(" slots expect a single root node."),t=n),t=Ii(t),e&&!t.dynamicChildren&&(t.dynamicChildren=e.filter(e=>e!==t)),t}function xr(e,t){t&&t.pendingBranch?ae(e)?t.effects.push(...e):t.effects.push(e):An(e)}function Sr(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e;e=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=e,vr(r,e))}function Cr(t,n){if(b){let e=b.provides;var r=b.parent&&b.parent.provides;(e=r===e?b.provides=Object.create(r):e)[t]=n}else oe("provide() can only be used inside setup().")}function kr(e,t,n=!1){var r,o=b||h;if(o)return(r=null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides)&&e in r?r[e]:1{oe("Invalid watch source: ",e,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},a=b;let c,u=!1,p=!1;if(q(e)?(c=()=>e.value,u=Ht(e)):Ut(e)?(c=()=>e,r=!0):ae(e)?(p=!0,u=e.some(e=>Ut(e)||Ht(e)),c=()=>e.map(e=>q(e)?e.value:Ut(e)?Rr(e):ne(e)?pn(e,a,2):void l(e))):ne(e)?c=t?()=>pn(e,a,2):()=>{if(!a||!a.isUnmounted)return d&&d(),dn(e,a,3,[f])}:(c=te,l(e)),t&&r){const y=c;c=()=>Rr(y())}let d,f=e=>{d=g.onStop=()=>{pn(e,a,4)}},h=p?[]:Er;const m=()=>{if(g.active)if(t){const e=g.run();(r||u||(p?e.some((e,t)=>Se(e,h[t])):Se(e,h)))&&(d&&d(),dn(t,a,3,[e,h===Er?void 0:h,f]),h=e)}else g.run()};m.allowRecurse=!!t;let v;v="sync"===o?m:"post"===o?()=>F(m,a&&a.suspense):()=>{Rn(m,bn,yn,_n)};const g=new Ue(c,v);return g.onTrack=i,g.onTrigger=s,t?n?m():h=g.run():"post"===o?F(g.run.bind(g),a&&a.suspense):g.run(),()=>{g.stop(),a&&a.scope&&G(a.scope.effects,g)}}function $r(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{Rr(e,n)});else if(he(t))for(const e in t)Rr(t[e],n);return t}function Ar(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Zr(()=>{e.isMounted=!0}),to(()=>{e.isUnmounting=!0}),e}t=[Function,Array];const Ir={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:t,onEnter:t,onAfterEnter:t,onEnterCancelled:t,onBeforeLeave:t,onLeave:t,onAfterLeave:t,onLeaveCancelled:t,onBeforeAppear:t,onAppear:t,onAfterAppear:t,onAppearCancelled:t},setup(p,{slots:e}){const d=Li(),f=Ar();let h;return()=>{var n=e.default&&Lr(e.default(),!0);if(n&&n.length){let t=n[0];if(1 can only be used on a single element or component. Use for lists.");break}t=c,e=!0}}var n=M(p),r=n["mode"];if(r&&"in-out"!==r&&"out-in"!==r&&"default"!==r&&oe("invalid mode: "+r),f.isLeaving)return Pr(t);var o=jr(t);if(!o)return Pr(t);const s=Fr(o,n,f,d);Vr(o,s);var i=d.subTree;const l=i&&jr(i);let e=!1;const a=o.type["getTransitionKey"];if(a&&(i=a(),void 0===h?h=i:i!==h&&(h=i,e=!0)),l&&l.type!==se&&(!Si(o,l)||e)){const u=Fr(l,n,f,d);if(Vr(l,u),"out-in"===r)return f.isLeaving=!0,u.afterLeave=()=>{f.isLeaving=!1,d.update()},Pr(t);"in-out"===r&&o.type!==se&&(u.delayLeave=(e,t,n)=>{const r=Mr(f,l);r[String(l.key)]=l,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete s.delayedLeave},s.delayedLeave=n})}return t}}}};function Mr(e,t){const n=e["leavingVNodes"];let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Fr(i,t,s,n){const{appear:l,mode:e,persisted:r=!1,onBeforeEnter:o,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:p,onLeave:d,onAfterLeave:f,onLeaveCancelled:h,onBeforeAppear:m,onAppear:v,onAfterAppear:g,onAppearCancelled:y}=t,b=String(i.key),_=Mr(s,i),w=(e,t)=>{e&&dn(e,n,9,t)},x=(e,t)=>{const n=t[1];w(e,t),ae(e)?e.every(e=>e.length<=1)&&n():e.length<=1&&n()},S={mode:e,persisted:r,beforeEnter(e){let t=o;if(!s.isMounted){if(!l)return;t=m||o}e._leaveCb&&e._leaveCb(!0);const n=_[b];n&&Si(i,n)&&n.el._leaveCb&&n.el._leaveCb(),w(t,[e])},enter(t){let e=a,n=c,r=u;if(!s.isMounted){if(!l)return;e=v||a,n=g||c,r=y||u}let o=!1;var i=t._enterCb=e=>{o||(o=!0,e?w(r,[t]):w(n,[t]),S.delayedLeave&&S.delayedLeave(),t._enterCb=void 0)};e?x(e,[t,i]):i()},leave(t,n){const r=String(i.key);if(t._enterCb&&t._enterCb(!0),s.isUnmounting)return n();w(p,[t]);let o=!1;var e=t._leaveCb=e=>{o||(o=!0,n(),e?w(h,[t]):w(f,[t]),t._leaveCb=void 0,_[r]===i&&delete _[r])};_[r]=i,d?x(d,[t,e]):e()},clone(e){return Fr(e,t,s,n)}};return S}function Pr(e){if(Hr(e))return(e=$i(e)).children=null,e}function jr(e){return Hr(e)?e.children?e.children[0]:void 0:e}function Vr(e,t){6&e.shapeFlag&&e.component?Vr(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Lr(t,n=!1,r){let o=[],i=0;for(let e=0;e!!e.type.__asyncLoader;function Dr(e,{vnode:{ref:t,props:n,children:r}}){const o=P(e,n,r);return o.ref=t,o}const Hr=e=>e.type.__isKeepAlive;Qe={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(l,{slots:a}){const r=Li(),e=r.ctx,c=new Map,u=new Set;let p=null;r.__v_cache=c;const s=r.suspense,{p:d,m:f,um:t,o:{createElement:n}}=e["renderer"],o=n("div");function i(e){Jr(e),t(e,r,s,!0)}function h(n){c.forEach((e,t)=>{e=ns(e.type);!e||n&&n(e)||m(t)})}function m(e){var t=c.get(e);p&&t.type===p.type?p&&Jr(p):i(t),c.delete(e),u.delete(e)}e.activate=(t,e,n,r,o)=>{const i=t.component;f(t,e,n,0,s),d(i.vnode,t,e,n,i,s,r,t.slotScopeIds,o),F(()=>{i.isDeactivated=!1,i.a&&Ce(i.a);var e=t.props&&t.props.onVnodeMounted;e&&j(e,i.parent,t)},s),qn(i)},e.deactivate=t=>{const n=t.component;f(t,o,null,1,s),F(()=>{n.da&&Ce(n.da);var e=t.props&&t.props.onVnodeUnmounted;e&&j(e,n.parent,t),n.isDeactivated=!0},s),qn(n)},Nr(()=>[l.include,l.exclude],([t,n])=>{t&&h(e=>zr(t,e)),n&&h(e=>!zr(n,e))},{flush:"post",deep:!0});let v=null;var g=()=>{null!=v&&c.set(v,qr(r.subTree))};return Zr(g),eo(g),to(()=>{c.forEach(e=>{var{subTree:t,suspense:n}=r,t=qr(t);if(e.type===t.type)return Jr(t),void((t=t.component.da)&&F(t,n));i(e)})}),()=>{if(v=null,!a.default)return null;var e=a.default();const t=e[0];if(1parseInt(s,10)&&m(u.values().next().value)),n.shapeFlag|=256,p=n,gr(t.type)?t:n}}};function zr(e,t){return ae(e)?e.some(e=>zr(e,t)):ce(e)?e.split(",").includes(t):!!e.test&&e.test(t)}function Wr(e,t){Gr(e,"a",t)}function Kr(e,t){Gr(e,"da",t)}function Gr(t,n,r=b){var o=t.__wdc||(t.__wdc=()=>{let e=r;for(;e;){if(e.isDeactivated)return;e=e.parent}return t()});if(Yr(n,o,r),r){let e=r.parent;for(;e&&e.parent;)Hr(e.parent.vnode)&&!function(e,t,n,r){const o=Yr(t,e,r,!0);no(()=>{G(r[t],o)},n)}(o,n,r,e),e=e.parent}}function Jr(e){let t=e.shapeFlag;256&t&&(t-=256),512&t&&(t-=512),e.shapeFlag=t}function qr(e){return 128&e.shapeFlag?e.ssContent:e}function Yr(t,n,r=b,e=!1){if(r){const i=r[t]||(r[t]=[]);var o=n.__weh||(n.__weh=(...e)=>{if(!r.isUnmounted)return We(),Bi(r),e=dn(n,r,t,e),Ui(),Ke(),e});return e?i.unshift(o):i.push(o),o}oe(xe(un[t].replace(/ hook$/,""))+" is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.")}et=n=>(e,t=b)=>(!Wi||"sp"===n)&&Yr(n,e,t);const Xr=et("bm"),Zr=et("m"),Qr=et("bu"),eo=et("u"),to=et("bum"),no=et("um"),ro=et("sp"),oo=et("rtg"),io=et("rtc");function so(e,t=b){Yr("ec",e,t)}function lo(e){ge(e)&&oe("Do not use built-in directive ids as custom directive id: "+e)}function ao(t,n,r,o){var i=t.dirs,s=n&&n.dirs;for(let e=0;ee?zi(e)?Qi(e)||e.proxy:ho(e.parent):null,mo=$(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>Lt(e.props),$attrs:e=>Lt(e.attrs),$slots:e=>Lt(e.slots),$refs:e=>Lt(e.refs),$parent:e=>ho(e.parent),$root:e=>ho(e.root),$emit:e=>e.emit,$options:e=>xo(e),$forceUpdate:e=>e.f||(e.f=()=>On(e.update)),$nextTick:e=>e.n||(e.n=Nn.bind(e.proxy)),$watch:e=>function(e,t,n){const r=this.proxy;var o=ce(e)?e.includes(".")?$r(r,e):()=>r[e]:e.bind(r,r);let i;return ne(t)?i=t:(i=t.handler,n=t),t=b,Bi(this),o=Or(o,i.bind(r),n),t?Bi(t):Ui(),o}.bind(e)}),vo=e=>"_"===e||"$"===e,go={get({_:e},t){const{ctx:n,setupState:r,data:o,props:i,accessCache:s,type:l,appContext:a}=e;if("__isVue"===t)return!0;if(r!==E&&r.__isScriptSetup&&R(r,t))return r[t];if("$"!==t[0]){var c=s[t];if(void 0!==c)switch(c){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(r!==E&&R(r,t))return s[t]=1,r[t];if(o!==E&&R(o,t))return s[t]=2,o[t];if((c=e.propsOptions[0])&&R(c,t))return s[t]=3,i[t];if(n!==E&&R(n,t))return s[t]=4,n[t];bo&&(s[t]=0)}}const u=mo[t];let p,d;return u?("$attrs"===t&&(f(e,"get",t),ar()),u(e)):(p=l.__cssModules)&&(p=p[t])?p:n!==E&&R(n,t)?(s[t]=4,n[t]):(d=a.config.globalProperties,R(d,t)?d[t]:void(!h||ce(t)&&0===t.indexOf("__v")||(o!==E&&vo(t[0])&&R(o,t)?oe(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved `+'character ("$" or "_") and is not proxied on the render context.'):e===h&&oe(`Property ${JSON.stringify(t)} was accessed during render `+"but is not defined on instance."))))},set({_:e},t,n){const{data:r,setupState:o,ctx:i}=e;return o!==E&&R(o,t)?(o[t]=n,!0):r!==E&&R(r,t)?(r[t]=n,!0):R(e.props,t)?(oe(`Attempting to mutate prop "${t}". Props are readonly.`,e),!1):"$"===t[0]&&t.slice(1)in e?(oe(`Attempting to mutate public property "${t}". `+"Properties starting with $ are reserved and readonly.",e),!1):(t in e.appContext.config.globalProperties?Object.defineProperty(i,t,{enumerable:!0,configurable:!0,value:n}):i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:i}},s){return!!n[s]||e!==E&&R(e,s)||t!==E&&R(t,s)||(n=i[0])&&R(n,s)||R(r,s)||R(mo,s)||R(o.config.globalProperties,s)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:R(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)},ownKeys:e=>(oe("Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead."),Reflect.ownKeys(e))},yo=$({},go,{get(e,t){if(t!==Symbol.unscopables)return go.get(e,t,e)},has(e,t){var n="_"!==t[0]&&!i(t);return!n&&go.has(e,t)&&oe(`Property ${JSON.stringify(t)} should not start with _ which is a reserved prefix for Vue internals.`),n}});let bo=!0;function _o(e){var t=xo(e);const n=e.proxy;var r=e.ctx;bo=!1,t.beforeCreate&&wo(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:s,watch:l,provide:a,inject:c,created:u,beforeMount:p,mounted:d,beforeUpdate:P,updated:j,activated:V,deactivated:L,beforeUnmount:B,unmounted:U,render:f,renderTracked:D,renderTriggered:H,errorCaptured:z,serverPrefetch:W,expose:h,inheritAttrs:m,components:v,directives:g}=t,y=function(){const n=Object.create(null);return(e,t)=>{n[t]?oe(`${e} property "${t}" is already defined in ${n[t]}.`):n[t]=e}}();var[t]=e.propsOptions;if(t)for(const C in t)y("Props",C);if(c){var[b,_,K=te,G=!1]=[c,r,y,e.appContext.config.unwrapInjectedRef];for(const k in b=ae(b)?To(b):b){var w=b[k];let t;q(t=re(w)?"default"in w?kr(w.from||k,w.default,!0):kr(w.from||k):kr(w))?G?Object.defineProperty(_,k,{enumerable:!0,configurable:!0,get:()=>t.value,set:e=>t.value=e}):(oe(`injected property "${k}" is a ref and will be auto-unwrapped `+"and no longer needs `.value` in the next minor release. To opt-in to the new behavior now, set `app.config.unwrapInjectedRef = true` (this config is temporary and will not be needed in the future.)"),_[k]=t):_[k]=t,K("Inject",k)}}if(s)for(const T in s){const E=s[T];ne(E)?(Object.defineProperty(r,T,{value:E.bind(n),configurable:!0,enumerable:!0,writable:!0}),y("Methods",T)):oe(`Method "${T}" has type "${typeof E}" in the component definition. `+"Did you reference the function correctly?")}if(o){ne(o)||oe("The data option must be a function. Plain object usage is no longer supported.");const N=o.call(n,n);if(de(N)&&oe("data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + ."),re(N)){e.data=Pt(N);for(const O in N)y("Data",O),vo(O[0])||Object.defineProperty(r,O,{configurable:!0,enumerable:!0,get:()=>N[O],set:te})}else oe("data() should return an object.")}if(bo=!0,i)for(const $ in i){const R=i[$];var x=ne(R)?R.bind(n,n):ne(R.get)?R.get.bind(n,n):te,J=(x===te&&oe(`Computed property "${$}" has no getter.`),!ne(R)&&ne(R.set)?R.set.bind(n):()=>{oe(`Write operation failed: computed property "${$}" is readonly.`)});const A=is({get:x,set:J});Object.defineProperty(r,$,{enumerable:!0,configurable:!0,get:()=>A.value,set:e=>A.value=e}),y("Computed",$)}if(l)for(const I in l)!function t(e,n,r,o){const i=o.includes(".")?$r(r,o):()=>r[o];if(ce(e)){const s=n[e];ne(s)?Nr(i,s):oe(`Invalid watch handler specified by key "${e}"`,s)}else if(ne(e))Nr(i,e.bind(r));else if(re(e))if(ae(e))e.forEach(e=>t(e,n,r,o));else{const l=ne(e.handler)?e.handler.bind(r):n[e.handler];ne(l)?Nr(i,l,e):oe(`Invalid watch handler specified by key "${e.handler}"`,l)}else oe(`Invalid watch option: "${o}"`,e)}(l[I],r,n,I);if(a){const M=ne(a)?a.call(n):a;Reflect.ownKeys(M).forEach(e=>{Cr(e,M[e])})}function S(t,e){ae(e)?e.forEach(e=>t(e.bind(n))):e&&t(e.bind(n))}if(u&&wo(u,e,"c"),S(Xr,p),S(Zr,d),S(Qr,P),S(eo,j),S(Wr,V),S(Kr,L),S(so,z),S(io,D),S(oo,H),S(to,B),S(no,U),S(ro,W),ae(h))if(h.length){const F=e.exposed||(e.exposed={});h.forEach(t=>{Object.defineProperty(F,t,{get:()=>n[t],set:e=>n[t]=e})})}else e.exposed||(e.exposed={});f&&e.render===te&&(e.render=f),null!=m&&(e.inheritAttrs=m),v&&(e.components=v),g&&(e.directives=g)}function wo(e,t,n){dn(ae(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function xo(e){var t=e.type,{mixins:n,extends:r}=t;const{mixins:o,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext;e=i.get(t);let l;return e?l=e:o.length||n||r?(l={},o.length&&o.forEach(e=>So(l,e,s,!0)),So(l,t,s)):l=t,i.set(t,l),l}function So(t,e,n,r=!1){const{mixins:o,extends:i}=e;i&&So(t,i,n,!0),o&&o.forEach(e=>So(t,e,n,!0));for(const s in e)if(r&&"expose"===s)oe('"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.');else{const l=Co[s]||n&&n[s];t[s]=l?l(t[s],e[s]):e[s]}return t}const Co={data:ko,props:Eo,emits:Eo,methods:Eo,computed:Eo,beforeCreate:o,created:o,beforeMount:o,mounted:o,beforeUpdate:o,updated:o,beforeDestroy:o,beforeUnmount:o,destroyed:o,unmounted:o,activated:o,deactivated:o,errorCaptured:o,serverPrefetch:o,components:Eo,directives:Eo,watch:function(e,t){if(!e)return t;if(!t)return e;const n=$(Object.create(null),e);for(const r in t)n[r]=o(e[r],t[r]);return n},provide:ko,inject:function(e,t){return Eo(To(e),To(t))}};function ko(e,t){return t?e?function(){return $(ne(e)?e.call(this,this):e,ne(t)?t.call(this,this):t)}:t:e}function To(t){if(ae(t)){const n={};for(let e=0;eAo(e,t)):ne(e)&&Ao(e,t)?0:-1}function Mo(e,t,n){var r=M(t),o=n.propsOptions[0];for(const s in o){var i=o[s];null!=i&&!function(e,n,t,r){const{type:o,required:i,validator:s}=t;if(i&&r)oe('Missing required prop: "'+e+'"');else if(null!=n||t.required){if(null!=o&&!0!==o){let t=!1;var l=ae(o)?o:[o];const u=[];for(let e=0;e"boolean"===e.toLowerCase())}([e,o])&&(r+=" with value "+i);r+=`, got ${o} `,jo(o)&&(r+=`with value ${t}.`);return r}(e,n,u))}s&&!s(n)&&oe('Invalid prop: custom validator check failed for prop "'+e+'".')}}(s,r[s],i,!R(e,s)&&!R(e,I(s)))}}const Fo=e("String,Number,Boolean,Function,Symbol,BigInt");function Po(e,t){return"String"===t?`"${e}"`:"Number"===t?""+Number(e):""+e}function jo(t){return["string","number","boolean"].some(e=>t.toLowerCase()===e)}const Vo=e=>"_"===e[0]||"$stable"===e,Lo=e=>ae(e)?e.map(Ii):[Ii(e)],Bo=(e,t,n)=>{var r=e._ctx;for(const i in e)if(!Vo(i)){var o=e[i];if(ne(o))t[i]=((t,n,e)=>{if(n._n)return n;const r=sr((...e)=>(b&&oe(`Slot "${t}" invoked outside of the render function: `+"this will not track dependencies used in the slot. Invoke the slot function inside the render function instead."),Lo(n(...e))),e);return r._c=!1,r})(i,o,r);else if(null!=o){oe(`Non-function value encountered for slot "${i}". `+"Prefer function slots for better performance.");const s=Lo(o);t[i]=()=>s}}},Uo=(e,t)=>{Hr(e.vnode)||oe("Non-function value encountered for default slot. Prefer function slots for better performance.");const n=Lo(t);e.slots.default=()=>n},Do=(e,t)=>{var n;32&e.vnode.shapeFlag?(n=t._)?(e.slots=M(t),ke(t,"_",n)):Bo(t,e.slots={}):(e.slots={},t&&Uo(e,t)),ke(e.slots,ki,1)},Ho=(e,t,n)=>{const{vnode:r,slots:o}=e;let i=!0,s=E;var l;if(32&r.shapeFlag?((l=t._)?Vn?$(o,t):n&&1===l?i=!1:($(o,t),n||1!==l||delete o._):(i=!t.$stable,Bo(t,o)),s=t):t&&(Uo(e,t),s={default:1}),i)for(const a in o)Vo(a)||a in s||delete o[a]};function zo(){return{app:null,config:{isNativeTag:H,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Wo=0;function Ko(u,p){return function(i,s=null){ne(i)||(i=Object.assign({},i)),null==s||re(s)||(oe("root props passed to app.mount() must be an object."),s=null);const l=zo(),n=new Set;let a=!1;const c=l.app={_uid:Wo++,_component:i,_props:s,_container:null,_context:l,_instance:null,version:ps,get config(){return l.config},set config(e){oe("app.config cannot be replaced. Modify individual options instead.")},use(e,...t){return n.has(e)?oe("Plugin has already been applied to target app."):e&&ne(e.install)?(n.add(e),e.install(c,...t)):ne(e)?(n.add(e),e(c,...t)):oe('A plugin must either be a function or an object with an "install" function.'),c},mixin(e){return l.mixins.includes(e)?oe("Mixin has already been applied to target app"+(e.name?": "+e.name:"")):l.mixins.push(e),c},component(e,t){return Hi(e,l.config),t?(l.components[e]&&oe(`Component "${e}" has already been registered in target app.`),l.components[e]=t,c):l.components[e]},directive(e,t){return lo(e),t?(l.directives[e]&&oe(`Directive "${e}" has already been registered in target app.`),l.directives[e]=t,c):l.directives[e]},mount(e,t,n){if(!a){e.__vue_app__&&oe("There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling `app.unmount()` first.");const o=P(i,s);return(o.appContext=l).reload=()=>{u($i(o),e,n)},t&&p?p(o,e):u(o,e,n),a=!0,((c._container=e).__vue_app__=c)._instance=o.component,t=c,r=ps,Gn("app:init",t,r,{Fragment:ie,Text:fi,Comment:se,Static:hi}),Qi(o.component)||o.component.proxy}var r;oe("App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. `const createMyApp = () => createApp(App)`")},unmount(){a?(u(null,c._container),c._instance=null,Gn("app:unmount",c),delete c._container.__vue_app__):oe("Cannot unmount an app that is not mounted.")},provide(e,t){return e in l.provides&&oe(`App already provides property with key "${String(e)}". `+"It will be overwritten with the new value."),l.provides[e]=t,c}};return c}}function Go(t,n,r,o,i=!1){if(ae(t))t.forEach((e,t)=>Go(e,n&&(ae(n)?n[t]:n),r,o,i));else if(!Ur(o)||i){const s=4&o.shapeFlag?Qi(o.component)||o.component.proxy:o.el,l=i?null:s,{i:a,r:c}=t;if(a){const u=n&&n.r,p=a.refs===E?a.refs={}:a.refs,d=a.setupState;if(null!=u&&u!==c&&(ce(u)?(p[u]=null,R(d,u)&&(d[u]=null)):q(u)&&(u.value=null)),ne(c))pn(c,a,12,[l,p]);else{const f=ce(c);var e=q(c);f||e?(e=()=>{if(t.f){const e=f?p[c]:c.value;i?ae(e)&&G(e,s):ae(e)?e.includes(s)||e.push(s):f?(p[c]=[s],R(d,c)&&(d[c]=p[c])):(c.value=[s],t.k&&(p[t.k]=c.value))}else f?(p[c]=l,R(d,c)&&(d[c]=l)):q(c)?(c.value=l,t.k&&(p[t.k]=l)):oe("Invalid template ref type:",c,`(${typeof c})`)},l?(e.id=-1,F(e,r)):e()):oe("Invalid template ref type:",c,`(${typeof c})`)}}else oe("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.")}}let Jo=!1;const qo=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,Yo=e=>8===e.nodeType;function Xo(v){const{mt:g,p,o:{patchProp:h,createText:y,nextSibling:b,parentNode:_,remove:m,insert:w,createComment:l}}=v;const x=(t,n,e,r,o,i=!1)=>{const s=Yo(t)&&"["===t.data;var l=()=>T(t,n,e,r,o,s),{type:a,ref:c,shapeFlag:u,patchFlag:p}=n,d=t.nodeType;n.el=t,-2===p&&(i=!1,n.dynamicChildren=null);let f=null;switch(a){case fi:f=3!==d?""===n.children?(w(n.el=y(""),_(t),t),t):l():(t.data!==n.children&&(Jo=!0,oe("Hydration text mismatch:\n- Client: "+JSON.stringify(t.data)+` +- Server: `+JSON.stringify(n.children)),t.data=n.children),b(t));break;case se:f=8!==d||s?l():b(t);break;case hi:if(1===d){f=t;var h=!n.children.length;for(let e=0;e{l=l||!!r.dynamicChildren;const{type:e,props:t,patchFlag:a,shapeFlag:c,dirs:u}=r;var p="input"===e&&u||"option"===e;{if(u&&ao(r,null,o,"created"),t)if(p||!l||48&a)for(const f in t)(p&&f.endsWith("value")||W(f)&&!ve(f))&&h(n,f,null,t[f],!1,void 0,o);else t.onClick&&h(n,"onClick",null,t.onClick,!1,void 0,o);let e;if((e=t&&t.onVnodeBeforeMount)&&j(e,o,r),u&&ao(r,null,o,"beforeMount"),((e=t&&t.onVnodeMounted)||u)&&xr(()=>{e&&j(e,o,r),u&&ao(r,null,o,"mounted")},i),16&c&&(!t||!t.innerHTML&&!t.textContent)){let e=C(n.firstChild,r,n,o,i,s,l),t=!1;for(;e;){Jo=!0,t||(oe(`Hydration children mismatch in <${r.type}>: `+"server rendered element contains more child nodes than client vdom."),t=!0);var d=e;e=e.nextSibling,m(d)}}else 8&c&&n.textContent!==r.children&&(Jo=!0,oe(`Hydration text content mismatch in <${r.type}>: +`+`- Client: ${n.textContent} +`+"- Server: "+r.children),n.textContent=r.children)}return n.nextSibling},C=(t,e,n,r,o,i,s)=>{s=s||!!e.dynamicChildren;const l=e.children;var a=l.length;let c=!1;for(let e=0;e: `+"server rendered element contains fewer child nodes than client vdom."),c=!0),p(null,u,n,null,r,o,qo(n),i))}return t},k=(e,t,n,r,o,i)=>{var s=t["slotScopeIds"],s=(s&&(o=o?o.concat(s):s),_(e)),e=C(b(e),t,s,n,r,o,i);return e&&Yo(e)&&"]"===e.data?b(t.anchor=e):(Jo=!0,w(t.anchor=l("]"),s,e),e)},T=(e,t,n,r,o,i)=>{if(Jo=!0,oe(`Hydration node mismatch: +- Client vnode:`,t.type,` +- Server rendered DOM:`,e,3===e.nodeType?"(text)":Yo(e)&&"["===e.data?"(start of fragment)":""),t.el=null,i)for(var s=E(e);;){const l=b(e);if(!l||l===s)break;m(l)}const l=b(e);i=_(e);return m(e),p(null,t,i,l,n,r,qo(i),o),l},E=e=>{let t=0;for(;e;)if((e=b(e))&&Yo(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return b(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return oe("Attempting to hydrate existing markup but container is empty. Performing full mount instead."),p(null,e,t),void Mn();Jo=!1,x(t.firstChild,e,null,null,null),Mn(),Jo&&console.error("Hydration completed but contains mismatches.")},x]}let Zo,Qo;function ei(e,t){e.appContext.config.performance&&ni()&&Qo.mark(`vue-${t}-`+e.uid),Qn(e,t,(ni()?Qo:Date).now())}function ti(e,t){var n,r;e.appContext.config.performance&&ni()&&(r=(n=`vue-${t}-`+e.uid)+":end",Qo.mark(r),Qo.measure(`<${rs(e,e.type)}> `+t,n,r),Qo.clearMarks(n),Qo.clearMarks(r)),er(e,t,(ni()?Qo:Date).now())}function ni(){return void 0!==Zo||("undefined"!=typeof window&&window.performance?(Zo=!0,Qo=window.performance):Zo=!1),Zo}const F=xr;function ri(e){return ii(e)}function oi(e){return ii(e,Xo)}function ii(e,t){const n=Ne(),{insert:V,remove:d,patchProp:b,createElement:g,createText:L,createComment:o,setText:B,setElementText:C,parentNode:y,nextSibling:U,setScopeId:s=te,insertStaticContent:D}=(n.__VUE__=!0,Jn(n.__VUE_DEVTOOLS_GLOBAL_HOOK__,n),e),N=(r,o,i,s=null,l=null,a=null,c=!1,u=null,p=!Vn&&!!o.dynamicChildren)=>{if(r!==o){r&&!Si(r,o)&&(s=Y(r),q(r,l,a,!0),r=null),-2===o.patchFlag&&(p=!1,o.dynamicChildren=null);const{type:O,ref:$,shapeFlag:R}=o;switch(O){case fi:var e=r,t=o,n=i,d=s;if(e==null)V(t.el=L(t.children),n,d);else{const A=t.el=e.el;if(t.children!==e.children)B(A,t.children)}break;case se:H(r,o,i,s);break;case hi:if(null==r)n=o,d=i,e=s,t=c,[n.el,n.anchor]=D(n.children,d,e,t,n.el,n.anchor);else{var f=r,h=o,m=i,v=c;if(h.children!==f.children){const I=U(f.anchor);z(f);[h.el,h.anchor]=D(h.children,m,I,v)}else{h.el=f.el;h.anchor=f.anchor}}break;case ie:{m=r;v=o;h=i;f=s;var g=l;var y=a;var b=c;var _=u;var w=p;const M=v.el=m?m.el:L(""),F=v.anchor=m?m.anchor:L("");let{patchFlag:e,dynamicChildren:t,slotScopeIds:n}=v;if(Vn||e&2048){e=0;w=false;t=null}if(n)_=_?_.concat(n):n;if(m==null){V(M,h,f);V(F,h,f);W(v.children,h,F,g,y,b,_,w)}else if(e>0&&e&64&&t&&m.dynamicChildren){K(m.dynamicChildren,t,h,g,y,b,_);if(g&&g.type.__hmrId)li(m,v);else if(v.key!=null||g&&v===g.subTree)li(m,v,true)}else J(m,v,h,F,g,y,b,_,w)}break;default:if(1&R){var g=r,y=o,b=i,_=s,w=l,x=a,S=c,C=u,k=p;if(S=S||y.type==="svg",g==null)Z(y,b,_,w,x,S,C,k);else Q(g,y,w,x,S,C,k)}else if(6&R){var x=r,S=o,C=i,k=s,T=l,P=a,E=c,j=u,N=p;if(S.slotScopeIds=j,x==null)if(S.shapeFlag&512)T.ctx.activate(S,C,k,E,N);else G(S,C,k,T,P,E,N);else ee(x,S,N)}else 64&R||128&R?O.process(r,o,i,s,l,a,c,u,p,X):oe("Invalid VNode type:",O,`(${typeof O})`)}null!=$&&l&&Go($,r&&r.ref,a,o||r,!o)}},H=(e,t,n,r)=>{null==e?V(t.el=o(t.children||""),n,r):t.el=e.el},z=({el:e,anchor:t})=>{for(var n;e&&e!==t;)n=U(e),d(e),e=n;d(t)},Z=(e,t,n,r,o,i,s,l)=>{let a,c;const{type:u,props:p,shapeFlag:d,transition:f,dirs:h}=e;if(a=e.el=g(e.type,i,p&&p.is,p),8&d?C(a,e.children):16&d&&W(e.children,a,null,r,o,i&&"foreignObject"!==u,s,l),h&&ao(e,null,r,"created"),p){for(const v in p)"value"===v||ve(v)||b(a,v,null,p[v],i,e.children,r,o,T);"value"in p&&b(a,"value",null,p.value),(c=p.onVnodeBeforeMount)&&j(c,r,e)}_(a,e,e.scopeId,s,r),Object.defineProperty(a,"__vnode",{value:e,enumerable:!1}),Object.defineProperty(a,"__vueParentComponent",{value:r,enumerable:!1}),h&&ao(e,null,r,"beforeMount");const m=(!o||!o.pendingBranch)&&f&&!f.persisted;m&&f.beforeEnter(a),V(a,t,n),((c=p&&p.onVnodeMounted)||m||h)&&F(()=>{c&&j(c,r,e),m&&f.enter(a),h&&ao(e,null,r,"mounted")},o)},_=(t,n,r,o,i)=>{if(r&&s(t,r),o)for(let e=0;e{for(let e=c;e{var l=e.el=t.el;let{patchFlag:a,dynamicChildren:c,dirs:u}=e;a|=16&t.patchFlag;var p=t.props||E,d=e.props||E;let f;n&&si(n,!1),(f=d.onVnodeBeforeUpdate)&&j(f,n,e,t),u&&ao(e,t,n,"beforeUpdate"),n&&si(n,!0),Vn&&(a=0,s=!1,c=null);var h=o&&"foreignObject"!==e.type;if(c?(K(t.dynamicChildren,c,l,n,r,h,i),n&&n.type.__hmrId&&li(t,e)):s||J(t,e,l,null,n,r,h,i,!1),0{f&&j(f,n,e,t),u&&ao(e,t,n,"updated")},r)},K=(t,n,r,o,i,s,l)=>{for(let e=0;e{if(n!==r){for(const c in r){var l,a;ve(c)||(l=r[c])!==(a=n[c])&&"value"!==c&&b(e,c,a,l,s,t.children,o,i,T)}if(n!==E)for(const u in n)ve(u)||u in r||b(e,u,n[u],null,s,t.children,o,i,T);"value"in r&&b(e,"value",n.value,r.value)}},G=(e,t,n,r,o,i,s)=>{const l=e.component=function(e,t,n){const r=e.type,o=(t||e).appContext||ji,i={uid:Vi++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,scope:new $e(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:function n(e,r,t=!1){const o=r.propsCache;var i=o.get(e);if(i)return i;var s=e.props;const l={},a=[];let c=!1;if(ne(e)||(i=e=>{c=!0;var[e,t]=n(e,r,!0);$(l,e),t&&a.push(...t)},!t&&r.mixins.length&&r.mixins.forEach(i),e.extends&&i(e.extends),e.mixins&&e.mixins.forEach(i)),!s&&!c)return o.set(e,le),le;if(ae(s))for(let e=0;e{(e=t(e,n,!0))&&(a=!0,$(l,e))},!r&&n.mixins.length&&n.mixins.forEach(i),e.extends&&i(e.extends),e.mixins&&e.mixins.forEach(i)),s||a?(ae(s)?s.forEach(e=>l[e]=null):$(l,s),o.set(e,l),l):(o.set(e,null),null)}(r,o),emit:null,emitted:null,propsDefaults:E,inheritAttrs:r.inheritAttrs,ctx:E,data:E,props:E,attrs:E,slots:E,refs:E,setupState:E,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};i.ctx=function(t){const n={};return Object.defineProperty(n,"_",{configurable:!0,enumerable:!1,get:()=>t}),Object.keys(mo).forEach(e=>{Object.defineProperty(n,e,{configurable:!0,enumerable:!1,get:()=>mo[e](t),set:te})}),n}(i),i.root=t?t.root:i,i.emit=nr.bind(null,i),e.ce&&e.ce(i);return i}(e,r,o);if(l.type.__hmrId){r=l;var a=r.type.__hmrId;let e=Bn.get(a);e||(Un(a,r.type),e=Bn.get(a)),e.instances.add(r)}an(e),ei(l,"mount"),Hr(e)&&(l.ctx.renderer=X),ei(l,"init");var[a,r=!1]=[l],{props:c,children:u}=(Wi=r,a.vnode),p=zi(a),c=(function(e,t,n,r=!1){const o={};var i={};ke(i,ki,1),e.propsDefaults=Object.create(null),No(e,t,o,i);for(const s in e.propsOptions[0])s in o||(o[s]=void 0);Mo(t||{},o,e),n?e.props=r?o:jt(o):e.type.props?e.props=o:e.props=i,e.attrs=i}(a,c,p,r),Do(a,u),p?function(t,n){var e=t.type;e.name&&Hi(e.name,t.appContext.config);if(e.components){var r=Object.keys(e.components);for(let e=0;e{Object.defineProperty(n,e,{enumerable:!0,configurable:!0,get:()=>t.props[e],set:te})})}(t);var i=e["setup"];if(i){var s=t.setupContext=1{Ki(t,e,n)}).catch(e=>{fn(e,t,0)});t.asyncDep=l,t.suspense||oe(`Component <${null!=(i=e.name)?i:"Anonymous"}>: setup function returned a promise, but no `+" boundary was found in the parent component tree. A component with async setup() must be nested in a in order to be rendered.")}else Ki(t,l,n)}else Xi(t,n)}(a,r):void 0);if(Wi=!1,ti(l,"init"),l.asyncDep)return o&&o.registerDep(l,f),void(e.el||(u=l.subTree=P(se),H(null,u,t,n)));f(l,e,t,n,o,i,s),cn(),ti(l,"mount")},ee=(e,t,n)=>{const r=t.component=e.component;!function(e,t,n){var{props:r,children:e,component:o}=e,{props:i,children:s,patchFlag:l}=t,a=o.emitsOptions;if((e||s)&&Vn)return 1;if(t.dirs||t.transition)return 1;if(!(n&&0<=l))return!(!e&&!s||s&&s.$stable)||r!==i&&(r?!i||mr(r,i,a):i);if(1024&l)return 1;if(16&l)return r?mr(r,i,a):i;if(8&l){var c=t.dynamicProps;for(let e=0;egn&&vn.splice(e,1),r.update())},f=(p,d,f,h,m,v,g)=>{const e=p.effect=new Ue(()=>{if(p.isMounted){let{next:e,bu:t,u:n,parent:r,vnode:o}=p;var s=e;let i;an(e||p.vnode),si(p,!1),e?(e.el=o.el,x(p,e,g)):e=o,t&&Ce(t),(i=e.props&&e.props.onVnodeBeforeUpdate)&&j(i,r,e,o),si(p,!0),ei(p,"render");var l=cr(p),a=(ti(p,"render"),p.subTree);p.subTree=l,ei(p,"patch"),N(a,l,y(a.el),Y(a),p,m,v),ti(p,"patch"),e.el=l.el,null===s&&vr(p,l.el),n&&F(n,m),(i=e.props&&e.props.onVnodeUpdated)&&F(()=>j(i,r,e,o),m),Yn(p),cn()}else{let e;const{el:t,props:n}=d,{bm:r,m:o,parent:i}=p;a=Ur(d);if(si(p,!1),r&&Ce(r),!a&&(e=n&&n.onVnodeBeforeMount)&&j(e,i,d),si(p,!0),t&&S){const c=()=>{ei(p,"render"),p.subTree=cr(p),ti(p,"render"),ei(p,"hydrate"),S(t,p.subTree,p,m,null),ti(p,"hydrate")};a?d.type.__asyncLoader().then(()=>!p.isUnmounted&&c()):c()}else{ei(p,"render");s=p.subTree=cr(p);ti(p,"render"),ei(p,"patch"),N(null,s,f,h,p,m,v),ti(p,"patch"),d.el=s.el}if(o&&F(o,m),!a&&(e=n&&n.onVnodeMounted)){const u=d;F(()=>j(e,i,u),m)}(256&d.shapeFlag||i&&Ur(i.vnode)&&256&i.vnode.shapeFlag)&&p.a&&F(p.a,m),p.isMounted=!0,qn(p),d=f=h=null}},()=>On(t),p.scope),t=p.update=()=>e.run();t.id=p.uid,si(p,!0),e.onTrack=p.rtc?e=>Ce(p.rtc,e):void 0,e.onTrigger=p.rtg?e=>Ce(p.rtg,e):void 0,t.ownerInstance=p,t()},x=(e,n,r)=>{var o=(n.component=e).vnode.props;e.vnode=n,e.next=null;{var i=e,s=n.props,l=o;o=r;const{props:f,attrs:h,vnode:{patchFlag:m}}=i;var a=M(f),[c]=i.propsOptions;let t=!1;if(i.type.__hmrId||i.parent&&i.parent.type.__hmrId||!(o||0{var c=e&&e.children,e=e?e.shapeFlag:0,u=t.children,{patchFlag:t,shapeFlag:p}=t;if(0w)T(d,m,v,true,false,x);else W(f,h,t,m,v,g,y,b,x)}return}}8&p?(16&e&&T(c,o,i),u!==c&&C(n,u)):16&e?16&p?k(c,u,n,r,o,i,s,l,a):T(c,o,i,!0):(8&e&&C(n,""),16&p&&W(u,n,r,o,i,s,l,a))},k=(e,i,s,l,a,c,u,p,d)=>{let f=0;var h=i.length;let m=e.length-1,v=h-1;for(;f<=m&&f<=v;){var t=e[f],n=i[f]=(d?Mi:Ii)(i[f]);if(!Si(t,n))break;N(t,n,s,null,a,c,u,p,d),f++}for(;f<=m&&f<=v;){var r=e[m],o=i[v]=(d?Mi:Ii)(i[v]);if(!Si(r,o))break;N(r,o,s,null,a,c,u,p,d),m--,v--}if(f>m){if(f<=v)for(var g=v+1,y=gv)for(;f<=m;)q(e[f],a,c,!0),f++;else{var g=f,b=f;const T=new Map;for(f=b;f<=v;f++){var _=i[f]=(d?Mi:Ii)(i[f]);null!=_.key&&(T.has(_.key)&&oe("Duplicate keys found during update:",JSON.stringify(_.key),"Make sure keys are unique."),T.set(_.key,f))}let t,n=0;var w=v-b+1;let r=!1,o=0;const E=new Array(w);for(f=0;f=w)q(x,a,c,!0);else{let e;if(null!=x.key)e=T.get(x.key);else for(t=b;t<=v;t++)if(0===E[t-b]&&Si(x,i[t])){e=t;break}void 0===e?q(x,a,c,!0):(E[e-b]=f+1,e>=o?o=e:r=!0,N(x,i[e],s,null,a,c,u,p,d),n++)}}var S=r?function(e){const t=e.slice(),n=[0];let r,o,i,s,l;var a=e.length;for(r=0;r>1,e[n[l]]{const{el:i,type:s,transition:l,children:a,shapeFlag:c}=e;if(6&c)O(e.component.subTree,t,n,r);else if(128&c)e.suspense.move(t,n,r);else if(64&c)s.move(e,t,n,X);else if(s===ie){V(i,t,n);for(let e=0;el.enter(i),o);else{const{leave:m,delayLeave:v,afterLeave:g}=l,y=()=>V(i,t,n);e=()=>{m(i,()=>{y(),g&&g()})};v?v(i,y,e):e()}else V(i,t,n)},q=(t,n,r,o=!1,i=!1)=>{var{type:s,props:l,ref:a,children:c,dynamicChildren:u,shapeFlag:p,patchFlag:d,dirs:f}=t;if(null!=a&&Go(a,null,r,t,!0),256&p)n.ctx.deactivate(t);else{const h=1&p&&f;a=!Ur(t);let e;if(a&&(e=l&&l.onVnodeBeforeUnmount)&&j(e,n,t),6&p)v(t.component,r,o);else{if(128&p)return void t.suspense.unmount(r,o);h&&ao(t,null,n,"beforeUnmount"),64&p?t.type.remove(t,n,r,i,X,o):u&&(s!==ie||0{e&&j(e,n,t),h&&ao(t,null,n,"unmounted")},r)}},m=e=>{const{type:t,el:n,anchor:r,transition:o}=e;if(t===ie)if(0{e.type===se?d(e.el):m(e)});else{var i=n;var s=r;var l;for(;i!==s;)l=U(i),d(i),i=l;d(s)}else if(t===hi)z(e);else{const c=()=>{d(n),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&e.shapeFlag&&o&&!o.persisted){const{leave:u,delayLeave:p}=o;var a=()=>u(n,c);p?p(e.el,c,a):a()}else c()}},v=(e,t,n)=>{var r;e.type.__hmrId&&(r=e,Bn.get(r.type.__hmrId).instances.delete(r));const{bum:o,scope:i,update:s,subTree:l,um:a}=e;o&&Ce(o),i.stop(),s&&(s.active=!1,q(l,e,t,n)),a&&F(a,t),F(()=>{e.isUnmounted=!0},t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve()),Xn(e)},T=(t,n,r,o=!1,i=!1,s=0)=>{for(let e=s;e6&e.shapeFlag?Y(e.component.subTree):128&e.shapeFlag?e.suspense.next():U(e.anchor||e.el);var r=(e,t,n)=>{null==e?t._vnode&&q(t._vnode,null,null,!0):N(t._vnode||null,e,t,null,null,null,n),Mn(),t._vnode=e};const X={p:N,um:q,m:O,r:m,mt:G,mc:W,pc:J,pbc:K,n:Y,o:e};let i,S;return t&&([i,S]=t(X)),{render:r,hydrate:i,createApp:Ko(r,i)}}function si({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function li(e,t,n=!1){var r=e.children;const o=t.children;if(ae(r)&&ae(o))for(let t=0;te.__isTeleport,ci=e=>e&&(e.disabled||""===e.disabled),ui=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,pi=(e,t)=>{var n=e&&e.to;return ce(n)?t?((t=t(n))||oe(`Failed to locate Teleport target with selector "${n}". `+"Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree."),t):(oe("Current renderer does not support string target for Teleports. (missing querySelector renderer option)"),null):(n||ci(e)||oe("Invalid Teleport target: "+n),n)};function di(e,t,n,{o:{insert:r},m:o},i=2){0===i&&r(e.targetAnchor,t,n);var{el:e,anchor:s,shapeFlag:l,children:a,props:c}=e,i=2===i;if(i&&r(e,t,n),(!i||ci(c))&&16&l)for(let e=0;e{16&S&&u(C,e,t,o,i,s,l,a)},x?y(n,g):b&&y(b,r)):(t.el=e.el,g=t.anchor=e.anchor,y=t.target=e.target,b=t.targetAnchor=e.targetAnchor,w=(r=ci(e.props))?n:y,_=r?g:b,s=s||ui(y),k?(d(e.dynamicChildren,k,w,o,i,s,l),li(e,t,!0)):a||p(e,t,w,_,o,i,s,l,!1),x?r||di(t,n,g,c,1):(t.props&&t.props.to)!==(e.props&&e.props.to)?(w=t.target=pi(t.props,h))?di(t,w,null,c,0):oe("Invalid Teleport target on update:",y,`(${typeof y})`):r&&di(t,y,b,c,1))},remove(e,t,n,r,{um:o,o:{remove:i}},s){var{shapeFlag:e,children:l,anchor:a,targetAnchor:c,target:u,props:p}=e;if(u&&i(c),(s||!ci(p))&&(i(a),16&e))for(let e=0;enull!=e?e:null,Ei=({ref:e,ref_key:t,ref_for:n})=>null!=e?ce(e)||q(e)||ne(e)?{i:h,r:e,k:t,f:!!n}:e:null;function Ni(e,t=null,n=null,r=0,o=null,i=e===ie?0:1,s=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ti(t),ref:t&&Ei(t),scopeId:or,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null};return l?(Fi(a,n),128&i&&e.normalize(a)):n&&(a.shapeFlag|=ce(n)?8:16),a.key!=a.key&&oe("VNode created with invalid key (NaN). VNode type:",a.type),0{var[e,n=null,t=null,r=0,o=null,i=!1]=[...Ci?Ci(e,h):e];if(e&&e!==uo||(e||oe(`Invalid vnode type when creating vnode: ${e}.`),e=se),xi(e)){const l=$i(e,n,!0);return t&&Fi(l,t),0b||h,Bi=e=>{(b=e).scope.on()},Ui=()=>{b&&b.scope.off(),b=null},Di=e("slot,component");function Hi(e,t){const n=t.isNativeTag||H;(Di(e)||n(e))&&oe("Do not use built-in or reserved HTML elements as component id: "+e)}function zi(e){return 4&e.vnode.shapeFlag}let Wi=!1;function Ki(e,t,n){if(ne(t))e.render=t;else if(re(t)){xi(t)&&oe("setup() should not return VNodes directly - return a render function instead."),e.devtoolsRawSetupState=t,e.setupState=tn(t);{var r=e;const{ctx:o,setupState:i}=r;Object.keys(M(i)).forEach(e=>{i.__isScriptSetup||(vo(e[0])?oe(`setup() return property ${JSON.stringify(e)} should not start with "$" or "_" `+"which are reserved prefixes for Vue internals."):Object.defineProperty(o,e,{enumerable:!0,configurable:!0,get:()=>i[e],set:te}))})}}else void 0!==t&&oe("setup() should return an object. Received: "+(null===t?"null":typeof t));Xi(e,n)}let Gi,Ji;function qi(e){Gi=e,Ji=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,yo))}}const Yi=()=>!Gi;function Xi(e,t){const n=e.type;var r,o,i,s,l;e.render||(t||!Gi||n.render||(r=n.template)&&(ei(e,"compile"),{isCustomElement:l,compilerOptions:o}=e.appContext.config,{delimiters:i,compilerOptions:s}=n,l=$($({isCustomElement:l,delimiters:i},o),s),n.render=Gi(r,l),ti(e,"compile")),e.render=n.render||te,Ji&&Ji(e)),Bi(e),We(),_o(e),Ke(),Ui(),n.render||e.render!==te||t||(!Gi&&n.template?oe('Component provided template option but runtime compilation is not supported in this build of Vue. Use "vue.global.js" instead.'):oe("Component is missing template or render function."))}function Zi(r){let e;return Object.freeze({get attrs(){return e=e||(n=r,new Proxy(n.attrs,{get(e,t){return ar(),f(n,"get","$attrs"),e[t]},set(){return oe("setupContext.attrs is readonly."),!1},deleteProperty(){return oe("setupContext.attrs is readonly."),!1}}));var n},get slots(){return Lt(r.slots)},get emit(){return(e,...t)=>r.emit(e,...t)},expose:e=>{r.exposed&&oe("expose() should be called only once per setup()."),r.exposed=e||{}}})}function Qi(n){if(n.exposed)return n.exposeProxy||(n.exposeProxy=new Proxy(tn(Wt(n.exposed)),{get(e,t){return t in e?e[t]:t in mo?mo[t](n):void 0}}))}const es=/(?:^|[-_])(\w)/g,ts=e=>e.replace(es,e=>e.toUpperCase()).replace(/[-_]/g,"");function ns(e){return ne(e)&&e.displayName||e.name}function rs(e,n,t=!1){let r=ns(n);var o;return!(r=!r&&n.__file&&(o=n.__file.match(/([^/\\]+)\.\w+$/))?o[1]:r)&&e&&e.parent&&(o=e=>{for(const t in e)if(e[t]===n)return t},r=o(e.components||e.parent.type.components)||o(e.appContext.components)),r?ts(r):t?"App":"Anonymous"}function os(e){return ne(e)&&"__vccOpts"in e}const is=(n,r)=>{{var[n,r,o=!1]=[n,r,Wi];let e,t;var i=ne(n);t=i?(e=n,()=>{console.warn("Write operation failed: computed value is readonly")}):(e=n.get,n.set);const s=new sn(e,t,i||!t,o);return r&&!o&&(s.effect.onTrack=r.onTrack,s.effect.onTrigger=r.onTrigger),s}},ss=e=>oe(e+"() is a compiler-hint helper that is only usable inside + + +
+ +
+ +
+
+ + + + diff --git a/electron/utils.js b/electron/utils.js index 212925936..a5f589701 100644 --- a/electron/utils.js +++ b/electron/utils.js @@ -321,8 +321,8 @@ module.exports = { */ onBeforeOpenWindow(webContents, url) { return new Promise(resolve => { - const encodeUrl = encodeURIComponent(url) - webContents.executeJavaScript(`if(typeof window.__onBeforeOpenWindow === 'function'){window.__onBeforeOpenWindow({url:decodeURIComponent("${encodeUrl}")})}`, true).then(options => { + const dataStr = JSON.stringify({url: url}) + webContents.executeJavaScript(`if(typeof window.__onBeforeOpenWindow === 'function'){window.__onBeforeOpenWindow(${dataStr})}`, true).then(options => { if (options !== true) { resolve() } @@ -332,6 +332,23 @@ module.exports = { }) }, + /** + * 分发事件 + * @param webContents + * @param data + * @returns {Promise} + */ + onDispatchEvent(webContents, data) { + return new Promise(resolve => { + const dataStr = JSON.stringify(data) + webContents.executeJavaScript(`window.__onDispatchEvent(${dataStr})`, true).then(options => { + resolve(options) + }).catch(_ => { + resolve() + }) + }) + }, + /** * 版本比较 * @param version1 diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 126eecb1c..01fcedf51 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -265,19 +265,15 @@ export default { } } window.__onBeforeOpenWindow = ({url}) => { - if ($A.getDomain(url) != $A.getDomain($A.apiUrl('../'))) { - return false; + if ($A.getDomain(url) == $A.getDomain($A.apiUrl('../'))) { + try { + // 下载文件不使用内置浏览器打开 + if (/^\/uploads\//i.test(new URL(url).pathname)) { + return false; + } + } catch (e) { } } - this.$Electron.sendMessage('windowRouter', { - name: `window-${encodeURIComponent(url)}`, - path: url, - force: false, - config: { - parent: null, - width: Math.min(window.screen.availWidth, 1440), - height: Math.min(window.screen.availHeight, 900), - }, - }); + this.$Electron.sendMessage('openWebWindow', {url}); return true; } this.$Electron.registerMsgListener('dispatch', args => {