From af14eeb79165ce40650d048e6a9102b7339714fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 26 Dec 2025 06:36:34 +0000 Subject: [PATCH] chore: update frontend build for v1.1.243 [skip ci] --- README.md | 4 +- ...js => AccountUsageRecordsView-CUkKidfm.js} | 4 +- ...w-2rnZ6KJ6.js => AccountsView-DXROeeN3.js} | 2 +- .../ActionDropdown-XGihbnCH.js | 2 +- assets/ApiKeyUsageRecordsView-2qB4i7ZK.js | 2 + assets/ApiKeyUsageRecordsView-BKxEbtcs.js | 2 - ...ew-p16y4zjX.js => ApiKeysView-P3GV4oxx.js} | 4 +- assets/ApiStatsView-7CsUPSAo.js | 6 - assets/ApiStatsView-C428m7c6.js | 6 + ...CRlzwPqI.css => ApiStatsView-D5HJh2jj.css} | 2 +- ...l-CZV4xGP-.js => ConfirmModal-BGRLg47v.js} | 2 +- .../DashboardView-L6RVGrpZ.js | 2 +- assets/LoginView-C_fN82yI.js | 1 + assets/LoginView-Cqf_qBij.js | 1 - ...itle-CwgrPCRk.js => LogoTitle-BKx-1OIz.js} | 2 +- assets/MainLayout-Bd5PtuA8.js | 1 + assets/MainLayout-DM3nuiFe.js | 1 - .../RecordDetailModal-CVWv3dXE.js | 2 +- ...CRb2BaAt.css => SettingsView-BrlNWmbu.css} | 2 +- assets/SettingsView-BuM-cxrS.js | 3 + assets/SettingsView-Ds_F7gAc.js | 3 - ...le-Dkc-_0Ud.js => ThemeToggle-Btdau4yo.js} | 2 +- assets/TutorialView-C0wjIk1C.js | 1 + assets/TutorialView-DqwFkHUw.js | 1 - assets/UserDashboardView-C3u0eacX.js | 1 - assets/UserDashboardView-DyavPA36.js | 1 + assets/UserLoginView-COfwLqzh.js | 1 + assets/UserLoginView-qdXph3b_.js | 1 - assets/UserManagementView-CFT_Esng.js | 1 + assets/UserManagementView-CUF5iwjE.js | 1 - ...F7xS2EZ.js => WindowCountdown-Cb_iHkvc.js} | 2 +- .../{chart-yFHxLHpB.js => chart-ChB167Jv.js} | 2 +- ...s-BUfCkBQO.js => element-plus-CKhypU-Q.js} | 2 +- assets/index-B2QI2w7Z.css | 5 + assets/index-B61r7_1u.css | 5 - assets/index-BAse2XU9.js | 23 +++ assets/index-Cr7hSgrN.js | 23 --- assets/vue-vendor-BVUySZOn.js | 25 +++ assets/vue-vendor-R8HMg95E.js | 25 --- index.html | 9 +- ...js => AccountUsageRecordsView-CUkKidfm.js} | 4 +- .../dist/assets/AccountsView-ChRk8WT-.css | 1 - ...w-2rnZ6KJ6.js => AccountsView-DXROeeN3.js} | 2 +- .../dist/assets/ActionDropdown-BAe-X9zd.css | 1 - .../dist/assets/ActionDropdown-XGihbnCH.js | 2 +- .../assets/ApiKeyUsageRecordsView-2qB4i7ZK.js | 2 + .../assets/ApiKeyUsageRecordsView-BKxEbtcs.js | 2 - ...ew-p16y4zjX.js => ApiKeysView-P3GV4oxx.js} | 4 +- .../dist/assets/ApiKeysView-sn4JYbr5.css | 1 - .../dist/assets/ApiStatsView-7CsUPSAo.js | 6 - .../dist/assets/ApiStatsView-C428m7c6.js | 6 + .../dist/assets/ApiStatsView-D5HJh2jj.css | 1 + ...l-CZV4xGP-.js => ConfirmModal-BGRLg47v.js} | 2 +- .../dist/assets/ConfirmModal-BvCtxUSJ.css | 1 - .../dist/assets/DashboardView-CJCkJ1Cw.css | 1 - .../dist/assets/DashboardView-L6RVGrpZ.js | 2 +- .../dist/assets/LoginView-C_fN82yI.js | 1 + .../dist/assets/LoginView-Cqf_qBij.js | 1 - .../dist/assets/LoginView-tn0RQdqM.css | 0 ...itle-CwgrPCRk.js => LogoTitle-BKx-1OIz.js} | 2 +- .../dist/assets/LogoTitle-DXipqypn.css | 1 - .../dist/assets/MainLayout-Bd5PtuA8.js | 1 + .../dist/assets/MainLayout-CCQ2LruH.css | 1 - .../dist/assets/MainLayout-DM3nuiFe.js | 1 - .../assets/RecordDetailModal-BqG3nD3p.css | 1 + .../dist/assets/RecordDetailModal-CVWv3dXE.js | 2 +- .../dist/assets/SettingsView-BrlNWmbu.css | 1 + .../dist/assets/SettingsView-BuM-cxrS.js | 3 + .../dist/assets/SettingsView-Ds_F7gAc.js | 3 - .../dist/assets/ThemeToggle-BLLHl9nT.css | 1 - ...le-Dkc-_0Ud.js => ThemeToggle-Btdau4yo.js} | 2 +- .../dist/assets/TutorialView-BjIHOtH3.css | 1 + .../dist/assets/TutorialView-C0wjIk1C.js | 1 + .../dist/assets/TutorialView-DqwFkHUw.js | 1 - .../dist/assets/UserDashboardView-C3u0eacX.js | 1 - .../dist/assets/UserDashboardView-DyavPA36.js | 1 + .../dist/assets/UserLoginView-COfwLqzh.js | 1 + .../dist/assets/UserLoginView-qdXph3b_.js | 1 - .../assets/UserManagementView-CFT_Esng.js | 1 + .../assets/UserManagementView-CUF5iwjE.js | 1 - ...F7xS2EZ.js => WindowCountdown-Cb_iHkvc.js} | 2 +- .../{chart-yFHxLHpB.js => chart-ChB167Jv.js} | 2 +- .../dist/assets/element-plus-BWHEPMNp.css | 1 - ...s-BUfCkBQO.js => element-plus-CKhypU-Q.js} | 2 +- .../dist/assets/fa-brands-400-D1LuMI3I.ttf | Bin 210792 -> 0 bytes .../dist/assets/fa-brands-400-D_cYUPeE.woff2 | Bin 118684 -> 0 bytes .../dist/assets/fa-regular-400-BjRzuEpd.woff2 | Bin 25472 -> 0 bytes .../dist/assets/fa-regular-400-DZaxPHgR.ttf | Bin 68064 -> 0 bytes .../dist/assets/fa-solid-900-CTAAxXor.woff2 | Bin 158220 -> 0 bytes .../dist/assets/fa-solid-900-D0aA9rwL.ttf | Bin 426112 -> 0 bytes .../assets/fa-v4compatibility-C9RhG_FT.woff2 | Bin 4796 -> 0 bytes .../assets/fa-v4compatibility-CCth-dXg.ttf | Bin 10836 -> 0 bytes web/admin-spa/dist/assets/index-B2QI2w7Z.css | 5 + web/admin-spa/dist/assets/index-B61r7_1u.css | 5 - web/admin-spa/dist/assets/index-BAse2XU9.js | 23 +++ web/admin-spa/dist/assets/index-Cr7hSgrN.js | 23 --- web/admin-spa/dist/assets/vendor-Dr8jvgFu.js | 171 ------------------ .../dist/assets/vue-vendor-BVUySZOn.js | 25 +++ .../dist/assets/vue-vendor-R8HMg95E.js | 25 --- web/admin-spa/dist/index.html | 34 ---- 100 files changed, 181 insertions(+), 390 deletions(-) rename assets/{AccountUsageRecordsView-DgdPiUJQ.js => AccountUsageRecordsView-CUkKidfm.js} (50%) rename assets/{AccountsView-2rnZ6KJ6.js => AccountsView-DXROeeN3.js} (99%) rename web/admin-spa/dist/assets/ActionDropdown-C3hc7yXw.js => assets/ActionDropdown-XGihbnCH.js (98%) create mode 100644 assets/ApiKeyUsageRecordsView-2qB4i7ZK.js delete mode 100644 assets/ApiKeyUsageRecordsView-BKxEbtcs.js rename assets/{ApiKeysView-p16y4zjX.js => ApiKeysView-P3GV4oxx.js} (90%) delete mode 100644 assets/ApiStatsView-7CsUPSAo.js create mode 100644 assets/ApiStatsView-C428m7c6.js rename assets/{ApiStatsView-CRlzwPqI.css => ApiStatsView-D5HJh2jj.css} (63%) rename assets/{ConfirmModal-CZV4xGP-.js => ConfirmModal-BGRLg47v.js} (92%) rename web/admin-spa/dist/assets/DashboardView-Dz8mMDNV.js => assets/DashboardView-L6RVGrpZ.js (99%) create mode 100644 assets/LoginView-C_fN82yI.js delete mode 100644 assets/LoginView-Cqf_qBij.js rename assets/{LogoTitle-CwgrPCRk.js => LogoTitle-BKx-1OIz.js} (88%) create mode 100644 assets/MainLayout-Bd5PtuA8.js delete mode 100644 assets/MainLayout-DM3nuiFe.js rename web/admin-spa/dist/assets/RecordDetailModal-lW2AGtWL.js => assets/RecordDetailModal-CVWv3dXE.js (96%) rename assets/{SettingsView-CRb2BaAt.css => SettingsView-BrlNWmbu.css} (52%) create mode 100644 assets/SettingsView-BuM-cxrS.js delete mode 100644 assets/SettingsView-Ds_F7gAc.js rename assets/{ThemeToggle-Dkc-_0Ud.js => ThemeToggle-Btdau4yo.js} (94%) create mode 100644 assets/TutorialView-C0wjIk1C.js delete mode 100644 assets/TutorialView-DqwFkHUw.js delete mode 100644 assets/UserDashboardView-C3u0eacX.js create mode 100644 assets/UserDashboardView-DyavPA36.js create mode 100644 assets/UserLoginView-COfwLqzh.js delete mode 100644 assets/UserLoginView-qdXph3b_.js create mode 100644 assets/UserManagementView-CFT_Esng.js delete mode 100644 assets/UserManagementView-CUF5iwjE.js rename assets/{WindowCountdown-DF7xS2EZ.js => WindowCountdown-Cb_iHkvc.js} (98%) rename assets/{chart-yFHxLHpB.js => chart-ChB167Jv.js} (99%) rename assets/{element-plus-BUfCkBQO.js => element-plus-CKhypU-Q.js} (99%) create mode 100644 assets/index-B2QI2w7Z.css delete mode 100644 assets/index-B61r7_1u.css create mode 100644 assets/index-BAse2XU9.js delete mode 100644 assets/index-Cr7hSgrN.js create mode 100644 assets/vue-vendor-BVUySZOn.js delete mode 100644 assets/vue-vendor-R8HMg95E.js rename web/admin-spa/dist/assets/{AccountUsageRecordsView-DgdPiUJQ.js => AccountUsageRecordsView-CUkKidfm.js} (50%) delete mode 100644 web/admin-spa/dist/assets/AccountsView-ChRk8WT-.css rename web/admin-spa/dist/assets/{AccountsView-2rnZ6KJ6.js => AccountsView-DXROeeN3.js} (99%) delete mode 100644 web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css rename assets/ActionDropdown-C3hc7yXw.js => web/admin-spa/dist/assets/ActionDropdown-XGihbnCH.js (98%) create mode 100644 web/admin-spa/dist/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js delete mode 100644 web/admin-spa/dist/assets/ApiKeyUsageRecordsView-BKxEbtcs.js rename web/admin-spa/dist/assets/{ApiKeysView-p16y4zjX.js => ApiKeysView-P3GV4oxx.js} (90%) delete mode 100644 web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css delete mode 100644 web/admin-spa/dist/assets/ApiStatsView-7CsUPSAo.js create mode 100644 web/admin-spa/dist/assets/ApiStatsView-C428m7c6.js create mode 100644 web/admin-spa/dist/assets/ApiStatsView-D5HJh2jj.css rename web/admin-spa/dist/assets/{ConfirmModal-CZV4xGP-.js => ConfirmModal-BGRLg47v.js} (92%) delete mode 100644 web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css delete mode 100644 web/admin-spa/dist/assets/DashboardView-CJCkJ1Cw.css rename assets/DashboardView-Dz8mMDNV.js => web/admin-spa/dist/assets/DashboardView-L6RVGrpZ.js (99%) create mode 100644 web/admin-spa/dist/assets/LoginView-C_fN82yI.js delete mode 100644 web/admin-spa/dist/assets/LoginView-Cqf_qBij.js delete mode 100644 web/admin-spa/dist/assets/LoginView-tn0RQdqM.css rename web/admin-spa/dist/assets/{LogoTitle-CwgrPCRk.js => LogoTitle-BKx-1OIz.js} (88%) delete mode 100644 web/admin-spa/dist/assets/LogoTitle-DXipqypn.css create mode 100644 web/admin-spa/dist/assets/MainLayout-Bd5PtuA8.js delete mode 100644 web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css delete mode 100644 web/admin-spa/dist/assets/MainLayout-DM3nuiFe.js create mode 100644 web/admin-spa/dist/assets/RecordDetailModal-BqG3nD3p.css rename assets/RecordDetailModal-lW2AGtWL.js => web/admin-spa/dist/assets/RecordDetailModal-CVWv3dXE.js (96%) create mode 100644 web/admin-spa/dist/assets/SettingsView-BrlNWmbu.css create mode 100644 web/admin-spa/dist/assets/SettingsView-BuM-cxrS.js delete mode 100644 web/admin-spa/dist/assets/SettingsView-Ds_F7gAc.js delete mode 100644 web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css rename web/admin-spa/dist/assets/{ThemeToggle-Dkc-_0Ud.js => ThemeToggle-Btdau4yo.js} (94%) create mode 100644 web/admin-spa/dist/assets/TutorialView-BjIHOtH3.css create mode 100644 web/admin-spa/dist/assets/TutorialView-C0wjIk1C.js delete mode 100644 web/admin-spa/dist/assets/TutorialView-DqwFkHUw.js delete mode 100644 web/admin-spa/dist/assets/UserDashboardView-C3u0eacX.js create mode 100644 web/admin-spa/dist/assets/UserDashboardView-DyavPA36.js create mode 100644 web/admin-spa/dist/assets/UserLoginView-COfwLqzh.js delete mode 100644 web/admin-spa/dist/assets/UserLoginView-qdXph3b_.js create mode 100644 web/admin-spa/dist/assets/UserManagementView-CFT_Esng.js delete mode 100644 web/admin-spa/dist/assets/UserManagementView-CUF5iwjE.js rename web/admin-spa/dist/assets/{WindowCountdown-DF7xS2EZ.js => WindowCountdown-Cb_iHkvc.js} (98%) rename web/admin-spa/dist/assets/{chart-yFHxLHpB.js => chart-ChB167Jv.js} (99%) delete mode 100644 web/admin-spa/dist/assets/element-plus-BWHEPMNp.css rename web/admin-spa/dist/assets/{element-plus-BUfCkBQO.js => element-plus-CKhypU-Q.js} (99%) delete mode 100644 web/admin-spa/dist/assets/fa-brands-400-D1LuMI3I.ttf delete mode 100644 web/admin-spa/dist/assets/fa-brands-400-D_cYUPeE.woff2 delete mode 100644 web/admin-spa/dist/assets/fa-regular-400-BjRzuEpd.woff2 delete mode 100644 web/admin-spa/dist/assets/fa-regular-400-DZaxPHgR.ttf delete mode 100644 web/admin-spa/dist/assets/fa-solid-900-CTAAxXor.woff2 delete mode 100644 web/admin-spa/dist/assets/fa-solid-900-D0aA9rwL.ttf delete mode 100644 web/admin-spa/dist/assets/fa-v4compatibility-C9RhG_FT.woff2 delete mode 100644 web/admin-spa/dist/assets/fa-v4compatibility-CCth-dXg.ttf create mode 100644 web/admin-spa/dist/assets/index-B2QI2w7Z.css delete mode 100644 web/admin-spa/dist/assets/index-B61r7_1u.css create mode 100644 web/admin-spa/dist/assets/index-BAse2XU9.js delete mode 100644 web/admin-spa/dist/assets/index-Cr7hSgrN.js delete mode 100644 web/admin-spa/dist/assets/vendor-Dr8jvgFu.js create mode 100644 web/admin-spa/dist/assets/vue-vendor-BVUySZOn.js delete mode 100644 web/admin-spa/dist/assets/vue-vendor-R8HMg95E.js delete mode 100644 web/admin-spa/dist/index.html diff --git a/README.md b/README.md index 2fc4648c..f97d177b 100644 --- a/README.md +++ b/README.md @@ -6,5 +6,5 @@ This branch contains the pre-built frontend assets for Claude Relay Service. These files are automatically generated by the CI/CD pipeline. -Version: 1.1.242 -Build Date: 2025-12-26 06:00:32 UTC +Version: 1.1.243 +Build Date: 2025-12-26 06:36:34 UTC diff --git a/assets/AccountUsageRecordsView-DgdPiUJQ.js b/assets/AccountUsageRecordsView-CUkKidfm.js similarity index 50% rename from assets/AccountUsageRecordsView-DgdPiUJQ.js rename to assets/AccountUsageRecordsView-CUkKidfm.js index affcd3b2..745a4178 100644 --- a/assets/AccountUsageRecordsView-DgdPiUJQ.js +++ b/assets/AccountUsageRecordsView-CUkKidfm.js @@ -1,2 +1,2 @@ -import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BUfCkBQO.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-R8HMg95E.js";import{c as W,s as j}from"./index-Cr7hSgrN.js";import{f as x,R as me}from"./RecordDetailModal-lW2AGtWL.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(` -`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default}; +import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-CKhypU-Q.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-BVUySZOn.js";import{c as W,s as j}from"./index-BAse2XU9.js";import{f as x,R as me}from"./RecordDetailModal-CVWv3dXE.js";import"./chart-ChB167Jv.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},_t={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(` +`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{_t as default}; diff --git a/assets/AccountsView-2rnZ6KJ6.js b/assets/AccountsView-DXROeeN3.js similarity index 99% rename from assets/AccountsView-2rnZ6KJ6.js rename to assets/AccountsView-DXROeeN3.js index e88a8de2..7702b7bc 100644 --- a/assets/AccountsView-2rnZ6KJ6.js +++ b/assets/AccountsView-DXROeeN3.js @@ -1,4 +1,4 @@ -import{b as Kr,e as br,f as Sr}from"./element-plus-BUfCkBQO.js";import{r as w,aP as Mr,o as we,V as Ya,x as n,y as o,z as e,L as y,K as b,al as ze,aT as Nt,O as f,aq as L,aa as Dr,P as u,aV as Ha,aY as ba,C as K,c as se,Z as jr,an as Ke,Q as Ae,q as ta,I as Je,ac as We,a5 as Mt,R as Oe,B as He,u as st,aX as Pr,aU as Lr,D as ar,_ as vr,J as nt,Y as St}from"./vue-vendor-R8HMg95E.js";import{c as B,s as j,_ as aa,a as zr,A as Ja}from"./index-Cr7hSgrN.js";import{C as kr}from"./ConfirmModal-CZV4xGP-.js";import{C as Rr}from"./chart-yFHxLHpB.js";import{C as Ba,_ as Vr}from"./ActionDropdown-C3hc7yXw.js";import"./vendor-Dr8jvgFu.js";const Qa=w(!1),gr=w({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Et=w(null);function hr(){return{showConfirmModal:Qa,confirmOptions:gr,showConfirm:(N,T,z="继续",C="取消")=>new Promise(A=>{gr.value={title:N,message:T,confirmText:z,cancelText:C},Et.value=A,Qa.value=!0}),handleConfirm:()=>{Qa.value=!1,Et.value&&(Et.value(!0),Et.value=null)},handleCancel:()=>{Qa.value=!1,Et.value&&(Et.value(!1),Et.value=null)}}}const wr=Mr("accounts",()=>{const H=w([]),De=w([]),g=w([]),N=w([]),T=w([]),z=w([]),C=w([]),A=w([]),v=w(!1),k=w(null),F=w(""),ie=w("asc"),Z=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-accounts");if(h.success)H.value=h.data||[];else throw new Error(h.message||"获取Claude账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},de=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-console-accounts");if(h.success)De.value=h.data||[];else throw new Error(h.message||"获取Claude Console账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},Q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/bedrock-accounts");if(h.success)g.value=h.data||[];else throw new Error(h.message||"获取Bedrock账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/gemini-accounts");if(h.success)N.value=h.data||[];else throw new Error(h.message||"获取Gemini账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},R=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-accounts");if(h.success)T.value=h.data||[];else throw new Error(h.message||"获取OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},c=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/azure-openai-accounts");if(h.success)z.value=h.data||[];else throw new Error(h.message||"获取Azure OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},p=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-responses-accounts");if(h.success)C.value=h.data||[];else throw new Error(h.message||"获取OpenAI-Responses账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/droid-accounts");if(h.success)A.value=h.data||[];else throw new Error(h.message||"获取Droid账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:De,bedrockAccounts:g,geminiAccounts:N,openaiAccounts:T,azureOpenaiAccounts:z,openaiResponsesAccounts:C,droidAccounts:A,loading:v,error:k,sortBy:F,sortOrder:ie,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:de,fetchBedrockAccounts:Q,fetchGeminiAccounts:q,fetchOpenAIAccounts:R,fetchAzureOpenAIAccounts:c,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),de(),Q(),q(),R(),c(),p(),D()])}catch(h){throw k.value=h.message,h}finally{v.value=!1}},createClaudeAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-accounts",h);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-console-accounts",h);if(m.success)return await de(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/bedrock-accounts",h);if(m.success)return await Q(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-accounts",h);if(m.success)return await R(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/droid-accounts",h);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/droid-accounts/${h}`,m);if(O.success)return await D(),O.data;throw new Error(O.message||"更新Droid账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},createAzureOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/azure-openai-accounts",h);if(m.success)return await c(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-responses-accounts",h);if(m.success)return await p(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-api-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-accounts/${h}`,m);if(O.success)return await Z(),O;throw new Error(O.message||"更新Claude账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateClaudeConsoleAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-console-accounts/${h}`,m);if(O.success)return await de(),O;throw new Error(O.message||"更新Claude Console账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateBedrockAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/bedrock-accounts/${h}`,m);if(O.success)return await Q(),O;throw new Error(O.message||"更新Bedrock账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-accounts/${h}`,m);if(O.success)return await R(),O;throw new Error(O.message||"更新OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateAzureOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/azure-openai-accounts/${h}`,m);if(O.success)return await c(),O;throw new Error(O.message||"更新Azure OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIResponsesAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-responses-accounts/${h}`,m);if(O.success)return await p(),O;throw new Error(O.message||"更新OpenAI-Responses账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiApiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-api-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini API账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},toggleAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}/toggle`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}/toggle`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}/toggle`:h==="gemini"?O=`/admin/gemini-accounts/${m}/toggle`:h==="openai"?O=`/admin/openai-accounts/${m}/toggle`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}/toggle`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}/toggle`:O=`/admin/openai-accounts/${m}/toggle`;const Qe=await B.put(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},deleteAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}`:h==="gemini"?O=`/admin/gemini-accounts/${m}`:h==="openai"?O=`/admin/openai-accounts/${m}`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}`:O=`/admin/openai-accounts/${m}`;const Qe=await B.delete(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"删除失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},refreshClaudeToken:async h=>{v.value=!0,k.value=null;try{const m=await B.post(`/admin/claude-accounts/${h}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-setup-token-url",h);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-setup-token-code",h);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/oauth-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/setup-token-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async h=>{try{const m=await B.post("/admin/gemini-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async h=>{try{const m=await B.post("/admin/gemini-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async h=>{try{const m=await B.post("/admin/openai-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async h=>{try{const m=await B.post("/admin/openai-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async h=>{k.value=null;try{const m=await B.post("/admin/droid-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async h=>{k.value=null;try{return await B.post("/admin/droid-accounts/exchange-code",h)}catch(m){throw k.value=m.message,m}},sortAccounts:h=>{F.value===h?ie.value=ie.value==="asc"?"desc":"asc":(F.value=h,ie.value="asc")},reset:()=>{H.value=[],De.value=[],g.value=[],N.value=[],T.value=[],z.value=[],C.value=[],A.value=[],v.value=!1,k.value=null,F.value="",ie.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Fr={class:"relative"},Wr={key:0,class:"mt-1 text-xs text-red-500"},Gr={key:1,class:"mt-1 text-xs text-green-500"},Br={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:De}){const g=H,N=De,T=w({...g.modelValue}),z=w(!!(T.value.username||T.value.password)),C=w(!1),A=w(""),v=w(""),k=w(!1);we(()=>g.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(T.value)&&(T.value={...R},z.value=!!(R.username||R.password))},{deep:!0}),we(()=>T.value.enabled,()=>{ie()}),we(()=>T.value.type,()=>{ie()}),we(()=>T.value.host,()=>{ie()}),we(()=>T.value.port,()=>{ie()}),we(()=>T.value.username,()=>{ie()}),we(()=>T.value.password,()=>{ie()}),we(z,R=>{R||(T.value.username="",T.value.password="",ie())});let F=null;function ie(){F&&clearTimeout(F),F=setTimeout(()=>{const R={...T.value};z.value||(R.username="",R.password=""),N("update:modelValue",R)},100)}function Z(){if(v.value="",k.value=!1,!!A.value)try{const R=A.value.split("#")[0].trim();if(!R)return;const c=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(c);if(!p){const Y=/^([^:]+):(\d+)$/,re=R.match(Y);if(re){T.value.type="socks5",T.value.host=re[1],T.value.port=re[2],T.value.username="",T.value.password="",z.value=!1,k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ge,G,I,U]=p;T.value.type=D.toLowerCase(),T.value.host=I,T.value.port=U,ge&&G?(T.value.username=decodeURIComponent(ge),T.value.password=decodeURIComponent(G),z.value=!0):(T.value.username="",T.value.password="",z.value=!1),k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function de(){A.value="",v.value="",k.value=!1}function Q(){setTimeout(()=>{Z()},0)}function q(){const R=A.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&Z():/^[^:]+:\d{2,5}$/.test(R)&&Z()}return Ya(()=>{F&&clearTimeout(F)}),(R,c)=>(o(),n("div",Or,[e("div",Er,[c[10]||(c[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>T.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,T.value.enabled]]),c[9]||(c[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),T.value.enabled?(o(),n("div",qr,[c[22]||(c[22]=Nt('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[c[14]||(c[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Fr,[b(e("input",{"onUpdate:modelValue":c[1]||(c[1]=p=>A.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:q,onKeyup:Dr(Z,["enter"]),onPaste:Q},null,544),[[L,A.value]]),A.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:de},c[11]||(c[11]=[e("i",{class:"fas fa-times"},null,-1)]))):y("",!0)]),v.value?(o(),n("p",Wr,[c[12]||(c[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(v.value),1)])):k.value?(o(),n("p",Gr,c[13]||(c[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):y("",!0)]),c[23]||(c[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[c[16]||(c[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":c[2]||(c[2]=p=>T.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},c[15]||(c[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ha,T.value.type]])]),e("div",Br,[e("div",null,[c[17]||(c[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":c[3]||(c[3]=p=>T.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[L,T.value.host]])]),e("div",null,[c[18]||(c[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":c[4]||(c[4]=p=>T.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[L,T.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":c[5]||(c[5]=p=>z.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,z.value]]),c[19]||(c[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),z.value?(o(),n("div",Jr,[e("div",null,[c[20]||(c[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":c[6]||(c[6]=p=>T.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[L,T.value.username]])]),e("div",null,[c[21]||(c[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":c[7]||(c[7]=p=>T.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:C.value?"text":"password"},null,8,Zr),[[ba,T.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:c[8]||(c[8]=p=>C.value=!C.value)},[e("i",{class:K(C.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):y("",!0)]),c[24]||(c[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):y("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},ps={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},gs={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Us={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Ts={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},js={class:"space-y-3"},Ps={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},zs={class:"flex items-start gap-4"},Rs={class:"flex-1"},Vs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Fs={class:"flex items-start gap-3"},Ws={class:"flex-1"},Gs=["disabled"],Bs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],pl={key:0,class:"fas fa-link mr-2"},gl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Ul={class:"flex items-start gap-3"},Il={class:"flex-1"},Tl=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},jl={class:"flex items-center gap-2"},Pl=["value"],Ll={class:"space-y-2"},zl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},Rl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Vl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:De,emit:g}){const N=H,T=g,z=wr(),C=w(!1),A=w(!1),v=w(""),k=w(""),F=w(!1),ie=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=w(""),de=w(""),Q=w(""),q=w(""),R=w(0);let c=null;const p=w("manual"),D=w(""),ge=w(!1),G=w(""),I=w(!1),U=w({current:0,total:0}),Y=se(()=>D.value.split(` +import{b as Kr,e as br,f as Sr}from"./element-plus-CKhypU-Q.js";import{r as w,aP as Mr,o as we,V as Ya,x as n,y as o,z as e,L as y,K as b,al as ze,aT as Nt,O as f,aq as L,aa as Dr,P as u,aV as Ha,aY as ba,C as K,c as se,Z as jr,an as Ke,Q as Ae,q as ta,I as Je,ac as We,a5 as Mt,R as Oe,B as He,u as st,aX as Pr,aU as Lr,D as ar,_ as vr,J as nt,Y as St}from"./vue-vendor-BVUySZOn.js";import{c as B,s as j,_ as aa,a as zr,A as Ja}from"./index-BAse2XU9.js";import{C as kr}from"./ConfirmModal-BGRLg47v.js";import{C as Rr}from"./chart-ChB167Jv.js";import{C as Ba,_ as Vr}from"./ActionDropdown-XGihbnCH.js";import"./vendor-Dr8jvgFu.js";const Qa=w(!1),gr=w({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Et=w(null);function hr(){return{showConfirmModal:Qa,confirmOptions:gr,showConfirm:(N,T,z="继续",C="取消")=>new Promise(A=>{gr.value={title:N,message:T,confirmText:z,cancelText:C},Et.value=A,Qa.value=!0}),handleConfirm:()=>{Qa.value=!1,Et.value&&(Et.value(!0),Et.value=null)},handleCancel:()=>{Qa.value=!1,Et.value&&(Et.value(!1),Et.value=null)}}}const wr=Mr("accounts",()=>{const H=w([]),De=w([]),g=w([]),N=w([]),T=w([]),z=w([]),C=w([]),A=w([]),v=w(!1),k=w(null),F=w(""),ie=w("asc"),Z=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-accounts");if(h.success)H.value=h.data||[];else throw new Error(h.message||"获取Claude账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},de=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-console-accounts");if(h.success)De.value=h.data||[];else throw new Error(h.message||"获取Claude Console账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},Q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/bedrock-accounts");if(h.success)g.value=h.data||[];else throw new Error(h.message||"获取Bedrock账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/gemini-accounts");if(h.success)N.value=h.data||[];else throw new Error(h.message||"获取Gemini账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},R=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-accounts");if(h.success)T.value=h.data||[];else throw new Error(h.message||"获取OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},c=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/azure-openai-accounts");if(h.success)z.value=h.data||[];else throw new Error(h.message||"获取Azure OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},p=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-responses-accounts");if(h.success)C.value=h.data||[];else throw new Error(h.message||"获取OpenAI-Responses账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/droid-accounts");if(h.success)A.value=h.data||[];else throw new Error(h.message||"获取Droid账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:De,bedrockAccounts:g,geminiAccounts:N,openaiAccounts:T,azureOpenaiAccounts:z,openaiResponsesAccounts:C,droidAccounts:A,loading:v,error:k,sortBy:F,sortOrder:ie,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:de,fetchBedrockAccounts:Q,fetchGeminiAccounts:q,fetchOpenAIAccounts:R,fetchAzureOpenAIAccounts:c,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),de(),Q(),q(),R(),c(),p(),D()])}catch(h){throw k.value=h.message,h}finally{v.value=!1}},createClaudeAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-accounts",h);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-console-accounts",h);if(m.success)return await de(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/bedrock-accounts",h);if(m.success)return await Q(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-accounts",h);if(m.success)return await R(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/droid-accounts",h);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/droid-accounts/${h}`,m);if(O.success)return await D(),O.data;throw new Error(O.message||"更新Droid账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},createAzureOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/azure-openai-accounts",h);if(m.success)return await c(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-responses-accounts",h);if(m.success)return await p(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-api-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-accounts/${h}`,m);if(O.success)return await Z(),O;throw new Error(O.message||"更新Claude账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateClaudeConsoleAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-console-accounts/${h}`,m);if(O.success)return await de(),O;throw new Error(O.message||"更新Claude Console账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateBedrockAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/bedrock-accounts/${h}`,m);if(O.success)return await Q(),O;throw new Error(O.message||"更新Bedrock账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-accounts/${h}`,m);if(O.success)return await R(),O;throw new Error(O.message||"更新OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateAzureOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/azure-openai-accounts/${h}`,m);if(O.success)return await c(),O;throw new Error(O.message||"更新Azure OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIResponsesAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-responses-accounts/${h}`,m);if(O.success)return await p(),O;throw new Error(O.message||"更新OpenAI-Responses账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiApiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-api-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini API账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},toggleAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}/toggle`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}/toggle`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}/toggle`:h==="gemini"?O=`/admin/gemini-accounts/${m}/toggle`:h==="openai"?O=`/admin/openai-accounts/${m}/toggle`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}/toggle`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}/toggle`:O=`/admin/openai-accounts/${m}/toggle`;const Qe=await B.put(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},deleteAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}`:h==="gemini"?O=`/admin/gemini-accounts/${m}`:h==="openai"?O=`/admin/openai-accounts/${m}`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}`:O=`/admin/openai-accounts/${m}`;const Qe=await B.delete(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"删除失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},refreshClaudeToken:async h=>{v.value=!0,k.value=null;try{const m=await B.post(`/admin/claude-accounts/${h}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-setup-token-url",h);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-setup-token-code",h);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/oauth-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/setup-token-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async h=>{try{const m=await B.post("/admin/gemini-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async h=>{try{const m=await B.post("/admin/gemini-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async h=>{try{const m=await B.post("/admin/openai-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async h=>{try{const m=await B.post("/admin/openai-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async h=>{k.value=null;try{const m=await B.post("/admin/droid-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async h=>{k.value=null;try{return await B.post("/admin/droid-accounts/exchange-code",h)}catch(m){throw k.value=m.message,m}},sortAccounts:h=>{F.value===h?ie.value=ie.value==="asc"?"desc":"asc":(F.value=h,ie.value="asc")},reset:()=>{H.value=[],De.value=[],g.value=[],N.value=[],T.value=[],z.value=[],C.value=[],A.value=[],v.value=!1,k.value=null,F.value="",ie.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Fr={class:"relative"},Wr={key:0,class:"mt-1 text-xs text-red-500"},Gr={key:1,class:"mt-1 text-xs text-green-500"},Br={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:De}){const g=H,N=De,T=w({...g.modelValue}),z=w(!!(T.value.username||T.value.password)),C=w(!1),A=w(""),v=w(""),k=w(!1);we(()=>g.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(T.value)&&(T.value={...R},z.value=!!(R.username||R.password))},{deep:!0}),we(()=>T.value.enabled,()=>{ie()}),we(()=>T.value.type,()=>{ie()}),we(()=>T.value.host,()=>{ie()}),we(()=>T.value.port,()=>{ie()}),we(()=>T.value.username,()=>{ie()}),we(()=>T.value.password,()=>{ie()}),we(z,R=>{R||(T.value.username="",T.value.password="",ie())});let F=null;function ie(){F&&clearTimeout(F),F=setTimeout(()=>{const R={...T.value};z.value||(R.username="",R.password=""),N("update:modelValue",R)},100)}function Z(){if(v.value="",k.value=!1,!!A.value)try{const R=A.value.split("#")[0].trim();if(!R)return;const c=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(c);if(!p){const Y=/^([^:]+):(\d+)$/,re=R.match(Y);if(re){T.value.type="socks5",T.value.host=re[1],T.value.port=re[2],T.value.username="",T.value.password="",z.value=!1,k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ge,G,I,U]=p;T.value.type=D.toLowerCase(),T.value.host=I,T.value.port=U,ge&&G?(T.value.username=decodeURIComponent(ge),T.value.password=decodeURIComponent(G),z.value=!0):(T.value.username="",T.value.password="",z.value=!1),k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function de(){A.value="",v.value="",k.value=!1}function Q(){setTimeout(()=>{Z()},0)}function q(){const R=A.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&Z():/^[^:]+:\d{2,5}$/.test(R)&&Z()}return Ya(()=>{F&&clearTimeout(F)}),(R,c)=>(o(),n("div",Or,[e("div",Er,[c[10]||(c[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>T.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,T.value.enabled]]),c[9]||(c[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),T.value.enabled?(o(),n("div",qr,[c[22]||(c[22]=Nt('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[c[14]||(c[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Fr,[b(e("input",{"onUpdate:modelValue":c[1]||(c[1]=p=>A.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:q,onKeyup:Dr(Z,["enter"]),onPaste:Q},null,544),[[L,A.value]]),A.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:de},c[11]||(c[11]=[e("i",{class:"fas fa-times"},null,-1)]))):y("",!0)]),v.value?(o(),n("p",Wr,[c[12]||(c[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(v.value),1)])):k.value?(o(),n("p",Gr,c[13]||(c[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):y("",!0)]),c[23]||(c[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[c[16]||(c[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":c[2]||(c[2]=p=>T.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},c[15]||(c[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ha,T.value.type]])]),e("div",Br,[e("div",null,[c[17]||(c[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":c[3]||(c[3]=p=>T.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[L,T.value.host]])]),e("div",null,[c[18]||(c[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":c[4]||(c[4]=p=>T.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[L,T.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":c[5]||(c[5]=p=>z.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,z.value]]),c[19]||(c[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),z.value?(o(),n("div",Jr,[e("div",null,[c[20]||(c[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":c[6]||(c[6]=p=>T.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[L,T.value.username]])]),e("div",null,[c[21]||(c[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":c[7]||(c[7]=p=>T.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:C.value?"text":"password"},null,8,Zr),[[ba,T.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:c[8]||(c[8]=p=>C.value=!C.value)},[e("i",{class:K(C.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):y("",!0)]),c[24]||(c[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):y("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},ps={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},gs={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Us={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Ts={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},js={class:"space-y-3"},Ps={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},zs={class:"flex items-start gap-4"},Rs={class:"flex-1"},Vs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Fs={class:"flex items-start gap-3"},Ws={class:"flex-1"},Gs=["disabled"],Bs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],pl={key:0,class:"fas fa-link mr-2"},gl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Ul={class:"flex items-start gap-3"},Il={class:"flex-1"},Tl=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},jl={class:"flex items-center gap-2"},Pl=["value"],Ll={class:"space-y-2"},zl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},Rl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Vl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:De,emit:g}){const N=H,T=g,z=wr(),C=w(!1),A=w(!1),v=w(""),k=w(""),F=w(!1),ie=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=w(""),de=w(""),Q=w(""),q=w(""),R=w(0);let c=null;const p=w("manual"),D=w(""),ge=w(!1),G=w(""),I=w(!1),U=w({current:0,total:0}),Y=se(()=>D.value.split(` `).map(me=>me.trim()).filter(me=>me.length>0).length),re=se(()=>N.platform==="droid"?!!Z.value:v.value&&k.value.trim()),be=se(()=>{if(!R.value||R.value<=0)return"00:00";const me=Math.floor(R.value/60),a=R.value%60;return`${me.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`}),Ie=me=>{if(W(),!me||me<=0){R.value=0;return}R.value=Math.floor(me),c=setInterval(()=>{R.value<=1?(R.value=0,W()):R.value-=1},1e3)},W=()=>{c&&(clearInterval(c),c=null)};we(k,me=>{if(N.platform==="droid"||!me||typeof me!="string")return;const a=me.trim();if(!a)return;if(a.startsWith("http://")||a.startsWith("https://"))if(a.startsWith("http://localhost:45462")||a.startsWith("http://localhost:1455"))try{const Be=new URL(a).searchParams.get("code");Be?(k.value=Be,j("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):j("URL 中未找到授权码参数,请检查链接是否正确","error")}catch($e){console.error("Failed to parse URL:",$e),j("链接格式错误,请检查是否为完整的 URL","error")}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"||N.platform==="openai")try{const Be=new URL(a).searchParams.get("code");Be&&(k.value=Be,j("成功提取授权码!","success"))}catch{}else j("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const S=async()=>{var me;W(),v.value="",k.value="",de.value="",Q.value="",q.value="",R.value=0,Z.value="",F.value=!1,C.value=!0;try{const a=(me=N.proxy)!=null&&me.enabled?{proxy:{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}}:{};if(N.platform==="claude"){const X=await z.generateClaudeAuthUrl(a);v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"){const X=await z.generateGeminiAuthUrl({...a,oauthProvider:ie.value});v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="openai"){const X=await z.generateOpenAIAuthUrl(a);v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="droid"){const X=await z.generateDroidAuthUrl(a);v.value=X.verificationUriComplete||X.verificationUri,Q.value=X.verificationUri,q.value=X.verificationUriComplete||X.verificationUri,de.value=X.userCode,Ie(X.expiresIn||300),Z.value=X.sessionId}}catch(a){j(a.message||"生成授权链接失败","error")}finally{C.value=!1}},Te=()=>{W(),v.value="",k.value="",de.value="",Q.value="",q.value="",R.value=0,Z.value="",S()},ne=async()=>{if(!v.value){j("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(v.value),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}catch{const a=document.createElement("input");a.value=v.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}},Ee=async()=>{if(!de.value){j("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(de.value),j("验证码已复制","success")}catch{const a=document.createElement("input");a.value=de.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),j("验证码已复制","success")}},ae=()=>{q.value?window.open(q.value,"_blank","noopener"):Q.value&&window.open(Q.value,"_blank","noopener")},_=async()=>{var me;if(re.value){A.value=!0;try{let a={};N.platform==="claude"?a={sessionId:Z.value,callbackUrl:k.value.trim()}:N.platform==="gemini"||N.platform==="gemini-antigravity"?a={code:k.value.trim(),sessionId:Z.value,oauthProvider:ie.value}:N.platform==="openai"?a={code:k.value.trim(),sessionId:Z.value}:N.platform==="droid"&&(a={sessionId:Z.value}),(me=N.proxy)!=null&&me.enabled&&(a.proxy={type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null});let X;if(N.platform==="claude")X=await z.exchangeClaudeCode(a);else if(N.platform==="gemini"||N.platform==="gemini-antigravity")X=await z.exchangeGeminiCode(a),X&&(X.oauthProvider=ie.value);else if(N.platform==="openai")X=await z.exchangeOpenAICode(a);else if(N.platform==="droid"){const $e=await z.exchangeDroidCode(a);if(!$e.success){if($e.pending){const Be=$e.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";j(Be,"info"),typeof $e.expiresIn=="number"&&$e.expiresIn>=0&&Ie($e.expiresIn);return}throw new Error($e.message||"授权失败,请重试")}X=$e.data,W()}T("success",X)}catch(a){j(a.message||"授权失败,请检查授权码是否正确","error")}finally{A.value=!1}}};jr(()=>{W()});const E=async()=>{var Be;const me=D.value.split(` `).map(Me=>Me.trim()).filter(Me=>Me.length>0);if(me.length===0){G.value="请输入至少一个 sessionKey";return}ge.value=!0,G.value="",U.value={current:0,total:me.length};const a=(Be=N.proxy)!=null&&Be.enabled?{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}:null,X=[],$e=[];for(let Me=0;Me0?T("success",X):ge.value=!1,$e.length>0&&X.length===0?G.value="全部授权失败,请检查 sessionKey 是否有效":$e.length>0&&(G.value=`${$e.length} 个授权失败`)},ke=()=>{D.value="",G.value="",ge.value=!1,U.value={current:0,total:0}},fe=()=>{ke(),v.value="",k.value="",Z.value=""};return De({resetCookieAuth:ke}),(me,a)=>(o(),n("div",Xr,[H.platform==="claude"?(o(),n("div",es,[e("div",ts,[e("div",as,[a[29]||(a[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",rs,[a[28]||(a[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ss,[a[10]||(a[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",ls,[e("label",os,[b(e("input",{"onUpdate:modelValue":a[0]||(a[0]=X=>p.value=X),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:fe},null,544),[[Ke,p.value]]),a[8]||(a[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",ns,[b(e("input",{"onUpdate:modelValue":a[1]||(a[1]=X=>p.value=X),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:fe},null,544),[[Ke,p.value]]),a[9]||(a[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),p.value==="cookie"?(o(),n("div",is,[e("div",ds,[a[17]||(a[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",us,[e("label",ps,[a[12]||(a[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),a[13]||(a[13]=f(" sessionKey ",-1)),Y.value>1?(o(),n("span",gs,u(Y.value)+" 个 ",1)):y("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:a[2]||(a[2]=X=>I.value=!I.value)},a[11]||(a[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":a[3]||(a[3]=X=>D.value=X),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如: sk-ant-sid01-xxxxx... diff --git a/web/admin-spa/dist/assets/ActionDropdown-C3hc7yXw.js b/assets/ActionDropdown-XGihbnCH.js similarity index 98% rename from web/admin-spa/dist/assets/ActionDropdown-C3hc7yXw.js rename to assets/ActionDropdown-XGihbnCH.js index cd1da119..ca07b75c 100644 --- a/web/admin-spa/dist/assets/ActionDropdown-C3hc7yXw.js +++ b/assets/ActionDropdown-XGihbnCH.js @@ -1 +1 @@ -import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-Cr7hSgrN.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _}; +import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-BVUySZOn.js";import{_ as J}from"./index-BAse2XU9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _}; diff --git a/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js b/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js new file mode 100644 index 00000000..926d4988 --- /dev/null +++ b/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js @@ -0,0 +1,2 @@ +import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-CKhypU-Q.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as pe,r as b,_ as z,o as L,q as ue,x as i,z as e,R as u,P as r,u as g,J as h,O as I,Q as $,ac as O,aU as ge,y as d,I as A}from"./vue-vendor-BVUySZOn.js";import{c as J,s as Y}from"./index-BAse2XU9.js";import{f as x,R as xe}from"./RecordDetailModal-CVWv3dXE.js";import"./chart-ChB167Jv.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},yt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=pe(),W=ge(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(p=>{const V=[T(p.timestamp),p.accountName||"",p.accountTypeName||"",p.model||"",p.inputTokens||0,p.outputTokens||0,p.cacheCreateTokens||0,p.cacheReadTokens||0,p.totalTokens||0,p.costFormatted||C(p.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(` +`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ue(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(g(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(g(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[u(c,{label:"时间降序",value:"desc"}),u(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(g(x)(a.inputTokens)),1),e("td",Qe,r(g(x)(a.outputTokens)),1),e("td",We,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",Ze,r(g(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[u(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),u(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),u(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{yt as default}; diff --git a/assets/ApiKeyUsageRecordsView-BKxEbtcs.js b/assets/ApiKeyUsageRecordsView-BKxEbtcs.js deleted file mode 100644 index 52e53377..00000000 --- a/assets/ApiKeyUsageRecordsView-BKxEbtcs.js +++ /dev/null @@ -1,2 +0,0 @@ -import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BUfCkBQO.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as ue,r as b,_ as z,o as L,q as ge,x as i,z as e,R as g,P as r,u as p,J as h,O as I,Q as $,ac as O,aU as pe,y as d,I as A}from"./vue-vendor-R8HMg95E.js";import{c as J,s as Y}from"./index-Cr7hSgrN.js";import{f as x,R as xe}from"./RecordDetailModal-lW2AGtWL.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ue(),W=pe(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[T(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||C(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(` -`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ge(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(p(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(p(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[g(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[g(c,{label:"时间降序",value:"desc"}),g(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(p(x)(a.inputTokens)),1),e("td",Qe,r(p(x)(a.outputTokens)),1),e("td",We,r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("td",Ze,r(p(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(p(x)(a.totalTokens)),1),e("div",null,"输入:"+r(p(x)(a.inputTokens)),1),e("div",null,"输出:"+r(p(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),g(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),g(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default}; diff --git a/assets/ApiKeysView-p16y4zjX.js b/assets/ApiKeysView-P3GV4oxx.js similarity index 90% rename from assets/ApiKeysView-p16y4zjX.js rename to assets/ApiKeysView-P3GV4oxx.js index 9d4af9f6..5955e9bb 100644 --- a/assets/ApiKeysView-p16y4zjX.js +++ b/assets/ApiKeysView-P3GV4oxx.js @@ -1,4 +1,4 @@ -import{E as ua}from"./element-plus-BUfCkBQO.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as Ct,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as Ce,f as lt,u as nt,aU as ma}from"./vue-vendor-R8HMg95E.js";import{c as E,_ as Se,s as V,u as xa}from"./index-Cr7hSgrN.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-DF7xS2EZ.js";import{C as $t,_ as fa}from"./ActionDropdown-C3hc7yXw.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),$=async()=>{N.value=!0,g.value=null;try{const T=await E.get("/admin/api-keys");if(T.success)k.value=T.data||[];else throw new Error(T.message||"获取API Keys失败")}catch(T){throw g.value=T.message,T}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:$,createApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",T);if(q.success)return await $(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${T}/toggle`);if(q.success)return await $(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${T}`);if(q.success)return await $(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(T,q="all")=>{try{const K=await E.get(`/admin/api-keys/${T}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const T=await E.get("/admin/api-keys/tags");if(T.success)return T.data||[];throw new Error(T.message||"获取标签失败")}catch(T){return console.error("获取标签失败:",T),[]}},sortApiKeys:T=>{j.value===T?L.value=L.value==="asc"?"desc":"asc":(j.value=T,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},$a={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ca={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),$=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),T=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),C=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||T.value.length>0||q.value.length>0||K.value.length>0||C.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=$.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},_=()=>{var p;L.value="",(p=$.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Ct(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:$,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:_},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",$a,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",Ca,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),T.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(T.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&C.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe(C.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},$r={class:"space-y-2"},Cr={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Co={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},T=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},C=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},_=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 +import{E as ua}from"./element-plus-CKhypU-Q.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as Ct,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as Ce,f as lt,u as nt,aU as ma}from"./vue-vendor-BVUySZOn.js";import{c as E,_ as Se,s as V,u as xa}from"./index-BAse2XU9.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-Cb_iHkvc.js";import{C as $t,_ as fa}from"./ActionDropdown-XGihbnCH.js";import"./chart-ChB167Jv.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),$=async()=>{N.value=!0,g.value=null;try{const T=await E.get("/admin/api-keys");if(T.success)k.value=T.data||[];else throw new Error(T.message||"获取API Keys失败")}catch(T){throw g.value=T.message,T}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:$,createApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",T);if(q.success)return await $(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${T}/toggle`);if(q.success)return await $(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${T}`);if(q.success)return await $(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(T,q="all")=>{try{const K=await E.get(`/admin/api-keys/${T}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const T=await E.get("/admin/api-keys/tags");if(T.success)return T.data||[];throw new Error(T.message||"获取标签失败")}catch(T){return console.error("获取标签失败:",T),[]}},sortApiKeys:T=>{j.value===T?L.value=L.value==="asc"?"desc":"asc":(j.value=T,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},$a={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ca={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),$=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),T=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),C=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||T.value.length>0||q.value.length>0||K.value.length>0||C.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=$.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},_=()=>{var p;L.value="",(p=$.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Ct(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:$,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:_},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",$a,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",Ca,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),T.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(T.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&C.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe(C.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},$r={class:"space-y-2"},Cr={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Co={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},T=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},C=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},_=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续创建","返回修改"):u=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!u)return}$.value=!0;try{const u={description:a.description||void 0,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(u.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete u.claudeAccountId):(u.claudeAccountId=a.claudeAccountId,delete u.claudeConsoleAccountId)),a.geminiAccountId&&(u.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(u.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(u.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(u.droidAccountId=a.droidAccountId),a.createType==="single"){const i={...u,name:a.name},y=await E.post("/admin/api-keys",i);y.success?(V("API Key 创建成功","success"),F("success",y.data),F("close")):V(y.message||"创建失败","error")}else{const i={...u,createType:"batch",baseName:a.name,count:a.batchCount},y=await E.post("/admin/api-keys/batch",i);y.success?(V(`成功创建 ${y.data.length} 个 API Key`,"success"),F("batch-success",y.data),F("close")):V(y.message||"批量创建失败","error")}}catch{V("创建失败","error")}finally{$.value=!1}};return(u,i)=>(n(),we(Ee,{to:"body"},[e("div",er,[e("div",tr,[e("div",sr,[i[48]||(i[48]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=y=>u.$emit("close"))},i[47]||(i[47]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:_e(A,["prevent"])},[e("div",ar,[e("div",{class:O(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[i[51]||(i[51]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",rr,[e("label",or,[D(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[Ie,a.createType]]),i[49]||(i[49]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),h(" 单个创建 ")],-1))]),e("label",lr,[D(e("input",{"onUpdate:modelValue":i[2]||(i[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[Ie,a.createType]]),i[50]||(i[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),h(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(n(),d("div",nr,[e("div",ir,[e("div",dr,[i[53]||(i[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ur,[D(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[te,a.batchCount,void 0,{number:!0}]]),i[52]||(i[52]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",cr,[i[54]||(i[54]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(a.name||"MyKey")+"_1, "+c(a.name||"MyKey")+"_2 ...",1)])])):w("",!0)]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[h("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>a.name=y),class:O(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:i[5]||(i[5]=y=>Q.value.name="")},null,42,gr),[[te,a.name]])]),Q.value.name?(n(),d("p",pr,c(Q.value.name),1)):w("",!0)]),e("div",null,[i[63]||(i[63]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",mr,[a.tags.length>0?(n(),d("div",xr,[i[57]||(i[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",yr,[(n(!0),d(Z,null,oe(a.tags,(y,ie)=>(n(),d("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:me=>l(ie)},i[56]||(i[56]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,fr)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",br,[i[59]||(i[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",vr,[(n(!0),d(Z,null,oe(f.value,y=>(n(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>_(y)},[i[58]||(i[58]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(y),1)],8,kr))),128))])])):w("",!0),e("div",null,[i[61]||(i[61]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",wr,[D(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>H.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(Ke,["prevent"]),["enter"])},null,40,hr),[[te,H.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ke},i[60]||(i[60]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[62]||(i[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ar,[i[71]||(i[71]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",$r,[e("div",Cr,[e("div",null,[i[64]||(i[64]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),i[65]||(i[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[66]||(i[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":i[8]||(i[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),i[67]||(i[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[68]||(i[68]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":i[9]||(i[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),i[69]||(i[69]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[70]||(i[70]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[73]||(i[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Ir,[e("div",Kr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[12]||(i[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[14]||(i[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),i[72]||(i[72]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[75]||(i[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Lr,[e("div",Dr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[17]||(i[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=y=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[19]||(i[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),i[74]||(i[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[77]||(i[77]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",_r,[e("div",Tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[22]||(i[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[23]||(i[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[24]||(i[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),i[76]||(i[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),D(e("input",{"onUpdate:modelValue":i[25]||(i[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[i[80]||(i[80]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),D(e("textarea",{"onUpdate:modelValue":i[26]||(i[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[te,a.description]])]),e("div",null,[i[88]||(i[88]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Sr,[e("div",Ur,[e("label",Rr,[D(e("input",{"onUpdate:modelValue":i[27]||(i[27]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[Ie,a.expirationMode]]),i[81]||(i[81]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Mr,[D(e("input",{"onUpdate:modelValue":i[28]||(i[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[Ie,a.expirationMode]]),i[82]||(i[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Pr,[a.expirationMode==="fixed"?(n(),d("span",Vr,i[83]||(i[83]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(n(),d("span",Er,i[84]||(i[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(n(),d("div",Or,[D(e("select",{"onUpdate:modelValue":i[29]||(i[29]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:q},i[85]||(i[85]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[dt,a.expireDuration]]),a.expireDuration==="custom"?(n(),d("div",jr,[D(e("input",{"onUpdate:modelValue":i[30]||(i[30]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:T.value,type:"datetime-local",onChange:K},null,40,Gr),[[te,a.customExpireDate]])])):w("",!0),a.expiresAt?(n(),d("p",zr," 将于 "+c(C(a.expiresAt))+" 过期 ",1)):w("",!0)])):(n(),d("div",qr,[e("div",Fr,[D(e("input",{"onUpdate:modelValue":i[31]||(i[31]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,Wr),[[te,a.activationDays,void 0,{number:!0}]]),D(e("select",{"onUpdate:modelValue":i[32]||(i[32]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:p},i[86]||(i[86]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[dt,a.activationUnit]])]),e("div",Br,[(n(!0),d(Z,null,oe(o(),y=>(n(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ie=>a.activationDays=y.value},c(y.label),9,Nr))),128))]),e("p",Hr,[i[87]||(i[87]=e("i",{class:"fas fa-clock mr-1"},null,-1)),h(" Key 将在首次使用后激活,激活后 "+c(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+c(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Yr,[e("label",Qr,[D(e("input",{"onUpdate:modelValue":i[33]||(i[33]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[Ce,a.permissions]]),i[89]||(i[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Jr,[D(e("input",{"onUpdate:modelValue":i[34]||(i[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[Ce,a.permissions]]),i[90]||(i[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Xr,[D(e("input",{"onUpdate:modelValue":i[35]||(i[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[Ce,a.permissions]]),i[91]||(i[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Zr,[D(e("input",{"onUpdate:modelValue":i[36]||(i[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[Ce,a.permissions]]),i[92]||(i[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[94]||(i[94]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",eo,[i[95]||(i[95]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:z},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,to)]),e("div",so,[e("div",null,[i[96]||(i[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[37]||(i[37]=y=>a.claudeAccountId=y),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[97]||(i[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[38]||(i[38]=y=>a.geminiAccountId=y),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[98]||(i[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[39]||(i[39]=y=>a.openaiAccountId=y),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[99]||(i[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[40]||(i[40]=y=>a.bedrockAccountId=y),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[100]||(i[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[41]||(i[41]=y=>a.droidAccountId=y),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[101]||(i[101]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",ao,[D(e("input",{id:"enableModelRestriction","onUpdate:modelValue":i[42]||(i[42]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableModelRestriction]]),i[102]||(i[102]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",ro,[e("div",null,[i[105]||(i[105]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",oo,[(n(!0),d(Z,null,oe(a.restrictedModels,(y,ie)=>(n(),d("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[h(c(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:me=>le(ie)},i[103]||(i[103]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,lo)]))),128)),a.restrictedModels.length===0?(n(),d("span",no," 暂无限制的模型 ")):w("",!0)]),e("div",io,[e("div",uo,[(n(!0),d(Z,null,oe(fe.value,y=>(n(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ie=>pe(y)},c(y),9,co))),128)),fe.value.length===0?(n(),d("span",go," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",po,[D(e("input",{"onUpdate:modelValue":i[43]||(i[43]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(X,["prevent"]),["enter"])},null,40,mo),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:X},i[104]||(i[104]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[106]||(i[106]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",xo,[D(e("input",{id:"enableClientRestriction","onUpdate:modelValue":i[44]||(i[44]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableClientRestriction]]),i[107]||(i[107]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",yo,[e("div",null,[i[108]||(i[108]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",fo,[(n(!0),d(Z,null,oe(x.value,y=>(n(),d("div",{key:y.id,class:"flex items-start"},[D(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":i[45]||(i[45]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,bo),[[Ce,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",ko,c(y.name),1),e("span",wo,c(y.description),1)],8,vo)]))),128))])])])):w("",!0)]),e("div",ho,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[46]||(i[46]=y=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:$.value,type:"submit"},[$.value?(n(),d("div",$o)):(n(),d("i",Co)),h(" "+c($.value?"创建中...":"创建"),1)],8,Ao)])],32)])])]))}},Ko=Se(Io,[["__scopeId","data-v-b8b28d06"]]),Lo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Do={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},To=["value"],So={key:0,class:"text-gray-500"},Uo={class:"space-y-4"},Ro={key:0},Mo={class:"flex flex-wrap gap-2"},Po=["onClick"],Vo={key:1},Eo={class:"flex flex-wrap gap-2"},Oo=["onClick"],jo={class:"flex gap-2"},Go=["onKeypress"],zo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},qo={class:"space-y-2"},Fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wo={class:"space-y-3"},Bo={class:"flex gap-2"},No={class:"space-y-3"},Ho={class:"flex gap-2"},Yo={class:"space-y-3"},Qo={class:"flex gap-2"},Jo={class:"mb-3 flex items-center"},Xo={class:"flex flex-wrap gap-4"},Zo={class:"flex cursor-pointer items-center"},el={class:"flex cursor-pointer items-center"},tl={class:"flex cursor-pointer items-center"},sl={class:"flex cursor-pointer items-center"},al={class:"mb-3 flex items-center justify-between"},rl=["disabled"],ol={class:"grid grid-cols-1 gap-3"},ll={class:"mb-3 flex items-center"},nl={key:0,class:"space-y-3"},il={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},dl=["onClick"],ul={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},cl={class:"space-y-3"},gl={class:"flex flex-wrap gap-2"},pl=["onClick"],ml={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},xl={class:"flex gap-2"},yl=["onKeydown"],fl={class:"mb-3 flex items-center"},bl={key:0,class:"space-y-3"},vl={class:"space-y-2"},kl=["id","value"],wl=["for"],hl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Al={class:"block text-xs text-gray-500 dark:text-gray-400"},$l={class:"flex gap-3 pt-4"},Cl=["disabled"],Il={key:0,class:"loading-spinner mr-2"},Kl={key:1,class:"fas fa-save mr-2"},Ll={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I([]),H=I([]),B=I(""),f=I([]),x=R(()=>f.value.filter(_=>!a.tags.includes(_))),a=Ye({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),z=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},T=_=>{a.restrictedModels.splice(_,1)},q=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=R(()=>q.value.filter(_=>!a.restrictedModels.includes(_))),C=_=>{a.restrictedModels.includes(_)||a.restrictedModels.push(_)},X=()=>{if(B.value&&B.value.trim()){const _=B.value.trim();a.tags.includes(_)||a.tags.push(_),B.value=""}},le=_=>{a.tags.includes(_)||a.tags.push(_)},ue=_=>{a.tags.splice(_,1)},fe=async()=>{if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let _=!1;if(window.showConfirm?_=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 @@ -27,4 +27,4 @@ export ANTHROPIC_AUTH_TOKEN="${a}"`;await Q(z,"配置信息已复制到剪贴板 `);V(`${A} 个编辑失败: ${i}`,"warning")}}else V("所有 API Keys 编辑失败","error");F("success"),F("close")}else V(o.message||"批量编辑失败","error")}catch(l){V("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",l)}finally{L.value=!1}};return ut(async()=>{if(Q.value=await j.fetchTags(),g.accounts){const l=(g.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),o=[];g.accounts.openai&&g.accounts.openai.forEach(p=>{o.push({...p,platform:p.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(p=>{o.push({...p,platform:p.platform||"openai-responses"})}),W.value={claude:g.accounts.claude||[],gemini:l,openai:o,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}}),(l,o)=>(n(),we(Ee,{to:"body"},[e("div",Un,[e("div",Rn,[e("div",Mn,[e("div",Pn,[o[28]||(o[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vn," 批量编辑 API Keys ("+c(B.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:o[0]||(o[0]=p=>l.$emit("close"))},o[29]||(o[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(_,["prevent"])},[e("div",En,[e("div",On,[o[31]||(o[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[o[30]||(o[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",jn," 以下设置将应用到所选的 "+c(B.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",Gn,[e("div",zn,[e("label",qn,[D(e("input",{"onUpdate:modelValue":o[1]||(o[1]=p=>H.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[Ie,H.value]]),o[32]||(o[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Fn,[D(e("input",{"onUpdate:modelValue":o[2]||(o[2]=p=>H.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[Ie,H.value]]),o[33]||(o[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Wn,[D(e("input",{"onUpdate:modelValue":o[3]||(o[3]=p=>H.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[Ie,H.value]]),o[34]||(o[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bn,[D(e("input",{"onUpdate:modelValue":o[4]||(o[4]=p=>H.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[Ie,H.value]]),o[35]||(o[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),H.value!=="none"?(n(),d("div",Nn,[x.tags.length>0?(n(),d("div",Hn,[e("div",Yn,c(H.value==="replace"?"新标签列表:":H.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Qn,[(n(!0),d(Z,null,oe(x.tags,(p,A)=>(n(),d("span",{key:"selected-"+A,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[h(c(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:u=>pe(A)},o[36]||(o[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Jn)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",Xn,[o[38]||(o[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Zn,[(n(!0),d(Z,null,oe(f.value,p=>(n(),d("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:A=>fe(p)},[o[37]||(o[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(p),1)],8,ei))),128))])])):w("",!0),e("div",null,[o[40]||(o[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ti,[D(e("input",{"onUpdate:modelValue":o[5]||(o[5]=p=>S.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(ue,["prevent"]),["enter"])},null,40,si),[[te,S.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:ue},o[39]||(o[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):w("",!0)])]),e("div",ai,[o[45]||(o[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ri,[e("div",oi,[e("div",null,[o[42]||(o[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),D(e("input",{"onUpdate:modelValue":o[6]||(o[6]=p=>x.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitWindow]])]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":o[7]||(o[7]=p=>x.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitRequests]])]),e("div",null,[o[44]||(o[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":o[8]||(o[8]=p=>x.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[te,x.rateLimitCost]])])])])]),e("div",null,[o[46]||(o[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[9]||(o[9]=p=>x.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.dailyCostLimit]])]),e("div",null,[o[47]||(o[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[10]||(o[10]=p=>x.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.totalCostLimit]])]),e("div",null,[o[48]||(o[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Opus 模型周费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[11]||(o[11]=p=>x.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.weeklyOpusCostLimit]]),o[49]||(o[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户 ",-1))]),e("div",null,[o[50]||(o[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":o[12]||(o[12]=p=>x.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[te,x.concurrencyLimit]])]),e("div",null,[e("div",li,[o[54]||(o[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ni,[e("label",ii,[D(e("input",{"onUpdate:modelValue":o[13]||(o[13]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[Ie,x.isActive]]),o[51]||(o[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",di,[D(e("input",{"onUpdate:modelValue":o[14]||(o[14]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[Ie,x.isActive]]),o[52]||(o[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ui,[D(e("input",{"onUpdate:modelValue":o[15]||(o[15]=p=>x.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[Ie,x.isActive]]),o[53]||(o[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[o[61]||(o[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ci,[e("label",gi,[D(e("input",{"onUpdate:modelValue":o[16]||(o[16]=p=>x.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[Ie,x.permissions]]),o[55]||(o[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",pi,[D(e("input",{"onUpdate:modelValue":o[17]||(o[17]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[Ie,x.permissions]]),o[56]||(o[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",mi,[D(e("input",{"onUpdate:modelValue":o[18]||(o[18]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,x.permissions]]),o[57]||(o[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",xi,[D(e("input",{"onUpdate:modelValue":o[19]||(o[19]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,x.permissions]]),o[58]||(o[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",yi,[D(e("input",{"onUpdate:modelValue":o[20]||(o[20]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,x.permissions]]),o[59]||(o[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",fi,[D(e("input",{"onUpdate:modelValue":o[21]||(o[21]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,x.permissions]]),o[60]||(o[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",bi,[o[62]||(o[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:$.value,title:"刷新账号列表",type:"button",onClick:Ke},[e("i",{class:O(["fas",$.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c($.value?"刷新中...":"刷新账号"),1)],8,vi)]),e("div",ki,[e("div",null,[o[63]||(o[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:nt(T),"onUpdate:modelValue":o[22]||(o[22]=p=>lt(T)?T.value=p:null),accounts:W.value.claude,"default-option-text":"请选择Claude账号",disabled:!le("claude"),groups:W.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:nt(q),"onUpdate:modelValue":o[23]||(o[23]=p=>lt(q)?q.value=p:null),accounts:W.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!le("gemini"),groups:W.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[65]||(o[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:nt(K),"onUpdate:modelValue":o[24]||(o[24]=p=>lt(K)?K.value=p:null),accounts:W.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!le("openai"),groups:W.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:nt(C),"onUpdate:modelValue":o[25]||(o[25]=p=>lt(C)?C.value=p:null),accounts:W.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!le("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":a},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:nt(X),"onUpdate:modelValue":o[26]||(o[26]=p=>lt(X)?X.value=p:null),accounts:W.value.droid,"default-option-text":"请选择Droid账号",disabled:!le("droid"),groups:W.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":a},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",wi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[27]||(o[27]=p=>l.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:L.value,type:"submit"},[L.value?(n(),d("div",Ai)):(n(),d("i",$i)),h(" "+c(L.value?"保存中...":"批量保存"),1)],8,hi)])],32)])])]))}},Ii=Se(Ci,[["__scopeId","data-v-c0491882"]]),Ki={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Li={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Di={class:"mb-6 flex items-center justify-between"},_i={class:"flex items-center gap-3"},Ti={class:"text-sm text-gray-600 dark:text-gray-400"},Si={class:"space-y-6"},Ui={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Ri={class:"flex items-center justify-between"},Mi={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Pi={class:"ml-2 text-xs font-normal text-gray-600"},Vi={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ei={key:0,class:"mb-4"},Oi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ji={class:"mb-3 grid grid-cols-3 gap-2"},Gi=["onClick"],zi={key:1,class:"animate-fadeIn"},qi=["min"],Fi={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},Wi={class:"flex items-center justify-between"},Bi={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ni={class:"flex gap-3 pt-2"},Hi=["disabled"],Yi={key:0,class:"loading-spinner mr-2"},Qi={key:1,class:"fas fa-save mr-2"},Ji={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(k,{expose:N,emit:g}){const F=k,j=g,L=I(!1),$=Ye({expireDuration:"",customExpireDate:"",expiresAt:null}),W=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],S=R(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Te(()=>F.show,K=>{K&&Q()}),Te(()=>{var K;return(K=F.apiKey)==null?void 0:K.id},K=>{K&&F.show&&Q()});const Q=()=>{L.value=!1,F.apiKey.expiresAt?($.expireDuration="custom",$.customExpireDate=new Date(F.apiKey.expiresAt).toISOString().slice(0,16),$.expiresAt=F.apiKey.expiresAt):($.expireDuration="",$.customExpireDate="",$.expiresAt=null)},H=K=>{if($.expireDuration=K,!K){$.expiresAt=null;return}if(K==="custom")return;const C=new Date,X=K.match(/(\d+)([dhmy])/);if(X){const[,le,ue]=X,fe=parseInt(le);switch(ue){case"d":C.setDate(C.getDate()+fe);break;case"h":C.setHours(C.getHours()+fe);break;case"m":C.setMonth(C.getMonth()+fe);break;case"y":C.setFullYear(C.getFullYear()+fe);break}$.expiresAt=C.toISOString()}},B=()=>{$.customExpireDate&&($.expiresAt=new Date($.customExpireDate).toISOString())},f=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",x=K=>K?new Date(K){if(!K)return null;const C=new Date,le=new Date(K)-C,ue=Math.ceil(le/(1e3*60*60*24));return le<0?{text:"已过期",class:"text-red-600"}:ue<=7?{text:`${ue} 天后过期`,class:"text-orange-600"}:ue<=30?{text:`${ue} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(ue/30)} 个月后过期`,class:"text-green-600"}},z=()=>{L.value=!0,j("save",{keyId:F.apiKey.id,expiresAt:$.expiresAt})},T=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),K&&(L.value=!0,j("save",{keyId:F.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{L.value=!1}}),(K,C)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",Ki,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:C[0]||(C[0]=X=>K.$emit("close"))}),e("div",Li,[e("div",Di,[e("div",_i,[C[6]||(C[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[C[5]||(C[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Ti,' 为 "'+c(k.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:C[1]||(C[1]=X=>K.$emit("close"))},C[7]||(C[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Si,[e("div",Ui,[e("div",Ri,[e("div",null,[C[12]||(C[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Mi,[k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d(Z,{key:0},[C[8]||(C[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),C[9]||(C[9]=h(" 未激活 ",-1)),e("span",Pi," (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):k.apiKey.expiresAt?(n(),d(Z,{key:1},[h(c(f(k.apiKey.expiresAt))+" ",1),a(k.apiKey.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(k.apiKey.expiresAt).class])}," ("+c(a(k.apiKey.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:2},[C[10]||(C[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),C[11]||(C[11]=h(" 永不过期 ",-1))],64))])]),e("div",Vi,[e("i",{class:O(["fas fa-hourglass-half text-lg",k.apiKey.expiresAt&&x(k.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d("div",Ei,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:T},[C[13]||(C[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),h(" 立即激活 (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Oi,[C[14]||(C[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),h(" 点击立即激活此 API Key,激活后将在 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):w("",!0),e("div",null,[C[16]||(C[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ji,[(n(),d(Z,null,oe(W,X=>e("button",{key:X.value,class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",$.expireDuration===X.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:le=>H(X.value)},c(X.label),11,Gi)),64)),e("button",{class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",$.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:C[2]||(C[2]=X=>H("custom"))},C[15]||(C[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),h(" 自定义 ",-1)]),2)])]),$.expireDuration==="custom"?(n(),d("div",zi,[C[17]||(C[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),D(e("input",{"onUpdate:modelValue":C[3]||(C[3]=X=>$.customExpireDate=X),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:S.value,type:"datetime-local",onChange:B},null,40,qi),[[te,$.customExpireDate]]),C[18]||(C[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):w("",!0),$.expiresAt!==k.apiKey.expiresAt?(n(),d("div",Fi,[e("div",Wi,[e("div",null,[C[21]||(C[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),h(" 新的过期时间 ")],-1)),e("p",Bi,[$.expiresAt?(n(),d(Z,{key:0},[h(c(f($.expiresAt))+" ",1),a($.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a($.expiresAt).class])}," ("+c(a($.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:1},[C[19]||(C[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),C[20]||(C[20]=h(" 永不过期 ",-1))],64))])]),C[22]||(C[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):w("",!0),e("div",Ni,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:C[4]||(C[4]=X=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:L.value||$.expiresAt===k.apiKey.expiresAt,onClick:z},[L.value?(n(),d("div",Yi)):(n(),d("i",Qi)),h(" "+c(L.value?"保存中...":"保存更改"),1)],8,Hi)])])])])):w("",!0)]))}},Xi=Se(Ji,[["__scopeId","data-v-fb30c1d3"]]),Zi={class:"w-full"},ed={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},td={key:1,class:"space-y-1.5"},sd={class:"flex items-center justify-between text-[11px] font-medium"},ad={class:"text-gray-700 dark:text-gray-200"},rd={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},od={class:"relative z-10 flex h-full items-center justify-between px-3"},ld={class:"flex items-center gap-1.5"},nd={class:"flex items-center gap-1.5"},id={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},dd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:k=>["daily","opus","window","total"].includes(k)},variant:{type:String,default:"full",validator:k=>["full","compact"].includes(k)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(k){const N=k,g=R(()=>N.variant==="compact"),F=R(()=>{if(!N.limit||N.limit<=0)return 0;const f=N.current/N.limit*100;return Math.min(f,100)}),j=R(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),L=R(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),$=R(()=>{const f=F.value;return N.type==="daily"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),W=R(()=>{const f=F.value;if(f>=95)return"bg-rose-500 dark:bg-rose-400";if(f>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),S=R(()=>{const f=F.value;if(f>=95)return"text-rose-600 dark:text-rose-300";if(f>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=R(()=>{const f=F.value;let x="";if(f>=90)x="text-red-700 dark:text-red-400";else if(f>=70)x="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":x="text-green-700 dark:text-green-400";break;case"opus":x="text-purple-700 dark:text-purple-400";break;case"window":x="text-blue-700 dark:text-blue-400";break;default:x="text-gray-600 dark:text-gray-400"}let a="";switch(N.type){case"daily":a="fas fa-calendar-day";break;case"opus":a="fas fa-gem";break;case"window":a="fas fa-clock";break;case"total":a="fas fa-wallet";break;default:a="fas fa-infinity"}return`${a} ${x}`}),H=R(()=>{if(F.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),B=R(()=>{const f=F.value;if(f>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(f>=90)return"text-red-700 dark:text-red-300";if(f>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(f,x)=>(n(),d("div",Zi,[!k.limit||k.limit<=0?(n(),d("div",ed,x[0]||(x[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):g.value?(n(),d("div",td,[e("div",sd,[e("div",{class:O(["flex items-center gap-1.5",S.value])},[e("i",{class:O(["text-[11px]",Q.value])},null,2),e("span",null,c(k.label),1)],2),e("span",ad,"$"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),1)]),e("div",rd,[e("div",{class:O(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",W.value]),style:Ct({width:F.value+"%"})},null,6)])])):(n(),d("div",{key:2,class:O(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",j.value])},[e("div",{class:O(["absolute inset-0",L.value])},null,2),e("div",{class:O(["absolute inset-0 h-full transition-all duration-500 ease-out",$.value]),style:Ct({width:F.value+"%"})},null,6),x[1]||(x[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",od,[e("div",ld,[e("i",{class:O(["text-xs",Q.value])},null,2),e("span",{class:O(["text-xs font-semibold",H.value])},c(k.label),3)]),e("div",nd,[e("span",{class:O(["text-xs font-bold tabular-nums",B.value])}," $"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),3)])]),k.showShine&&F.value>0?(n(),d("div",id)):w("",!0)],2))]))}},Ve=Se(dd,[["__scopeId","data-v-8a01dc56"]]),ud={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},cd={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},gd={class:"mb-4 flex items-center justify-between sm:mb-6"},pd={class:"flex items-center gap-2 sm:gap-3"},md={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},xd={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},yd={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},fd={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},bd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},vd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},kd={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},wd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},hd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ad={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},$d={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Cd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Id={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},Kd={class:"space-y-1 text-sm"},Ld={class:"flex justify-between"},Dd={class:"font-semibold text-gray-900 dark:text-gray-100"},_d={class:"flex justify-between"},Td={class:"font-semibold text-gray-900 dark:text-gray-100"},Sd={class:"mb-6"},Ud={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Rd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Pd={class:"flex items-center justify-between"},Vd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Ed={key:0,class:"flex items-center justify-between"},Od={class:"text-sm font-semibold text-purple-600"},jd={key:1,class:"flex items-center justify-between"},Gd={class:"text-sm font-semibold text-purple-600"},zd={key:0,class:"mb-6"},qd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Fd={key:0,class:"space-y-1.5"},Wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Bd={key:1,class:"space-y-1.5"},Nd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Hd={key:2,class:"space-y-1.5"},Yd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Qd={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Jd={class:"font-semibold text-purple-600 dark:text-purple-300"},Xd={key:4,class:"space-y-2"},Zd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(k,{emit:N}){const g=k,F=N,j=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.requests)||0}),L=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.requests)||0}),$=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.tokens)||0}),W=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.tokens)||0}),S=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cost)||0}),Q=R(()=>g.apiKey.dailyCost||0),H=R(()=>g.apiKey.totalCostLimit||0),B=R(()=>g.apiKey.weeklyOpusCost||0),f=R(()=>g.apiKey.weeklyOpusCostLimit||0),x=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.inputTokens)||0}),a=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.outputTokens)||0}),z=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheCreateTokens)||0}),T=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheReadTokens)||0}),q=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.rpm)||0}),K=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.tpm)||0}),C=R(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.weeklyOpusCostLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),X=R(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:Q.value/g.apiKey.dailyCostLimit*100),le=R(()=>!H.value||H.value===0?0:S.value/H.value*100),ue=R(()=>!f.value||f.value===0?0:B.value/f.value*100),fe=l=>!l&&l!==0?"0":l.toLocaleString("zh-CN"),pe=l=>l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString(),Ke=()=>{F("close")},_=()=>{var l;F("open-timeline",(l=g.apiKey)==null?void 0:l.id)};return(l,o)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",ud,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:Ke}),e("div",cd,[e("div",gd,[e("div",pd,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",md," 使用统计详情 - "+c(k.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:Ke},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",xd,[e("div",yd,[e("div",fd,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",bd,c(fe(j.value)),1),e("div",vd," 今日: "+c(fe(L.value))+" 次 ",1)]),e("div",kd,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",wd,c(pe($.value)),1),e("div",hd," 今日: "+c(pe(W.value)),1)]),e("div",Ad,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",$d," $"+c(S.value.toFixed(4)),1),e("div",Cd," 今日: $"+c(Q.value.toFixed(4)),1)]),e("div",Id,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",Kd,[e("div",Ld,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",Dd,c(q.value),1)]),e("div",_d,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Td,c(K.value),1)])])])]),e("div",Sd,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" Token 使用分布 ")],-1)),e("div",Ud,[e("div",Rd,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",Md,c(pe(x.value)),1)]),e("div",Pd,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",Vd,c(pe(a.value)),1)]),z.value>0?(n(),d("div",Ed,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",Od,c(pe(z.value)),1)])):w("",!0),T.value>0?(n(),d("div",jd,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",Gd,c(pe(T.value)),1)])):w("",!0)])]),C.value?(n(),d("div",zd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),h(" 限制设置 ")],-1)),e("div",qd,[k.apiKey.dailyCostLimit>0?(n(),d("div",Fd,[ae(Ve,{current:Q.value,label:"每日费用限制",limit:k.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",Wd," 已使用 "+c(Math.min(X.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.weeklyOpusCostLimit>0?(n(),d("div",Bd,[ae(Ve,{current:B.value,label:"Opus 周费用限制",limit:k.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",Nd," 已使用 "+c(Math.min(ue.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.totalCostLimit>0?(n(),d("div",Hd,[ae(Ve,{current:S.value,label:"总费用限制",limit:k.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Yd," 已使用 "+c(Math.min(le.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.concurrencyLimit>0?(n(),d("div",Qd,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Jd,c(k.apiKey.currentConcurrency||0)+" / "+c(k.apiKey.concurrencyLimit),1)])):w("",!0),k.apiKey.rateLimitWindow>0?(n(),d("div",Xd,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),h(" 时间窗口限制 ")],-1)),ae(ya,{"cost-limit":k.apiKey.rateLimitCost,"current-cost":k.apiKey.currentWindowCost,"current-requests":k.apiKey.currentWindowRequests,"current-tokens":k.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":k.apiKey.rateLimitWindow,"request-limit":k.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":k.apiKey.tokenLimit,"window-end-time":k.apiKey.windowEndTime,"window-remaining-seconds":k.apiKey.windowRemainingSeconds,"window-start-time":k.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):w("",!0)])])):w("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:_}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:Ke}," 关闭 ")])])])):w("",!0)]))}},e0=Se(Zd,[["__scopeId","data-v-e4a6a155"]]),t0={class:"tab-content"},s0={class:"card p-4 sm:p-6"},a0={class:"mb-4 flex flex-col gap-4 sm:mb-6"},r0={class:"border-b border-gray-200 dark:border-gray-700"},o0={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},l0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},n0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},i0={key:0,class:"tab-panel"},d0={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},u0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},c0={class:"group relative min-w-[140px]"},g0={key:0,class:"flex items-center"},p0={class:"group relative min-w-[140px]"},m0={class:"relative"},x0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},y0={class:"group relative min-w-[140px]"},f0={class:"relative"},b0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},v0={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},k0={class:"sm:w-44"},w0={class:"group relative flex-1"},h0={class:"relative flex items-center"},A0=["placeholder"],$0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},C0=["disabled"],I0={class:"relative"},K0={class:"relative"},L0={key:0,class:"py-12 text-center"},D0={key:1,class:"py-12 text-center"},_0={key:2,class:"table-wrapper hidden md:block"},T0={class:"table-container"},S0={class:"w-full"},U0={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},R0={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},M0={class:"flex items-center"},P0=["indeterminate"],V0={key:1,class:"fas fa-sort ml-1 text-gray-400"},E0={key:1,class:"fas fa-sort ml-1 text-gray-400"},O0=["title"],j0={key:1,class:"fas fa-sort ml-1 text-gray-400"},G0={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},z0={key:1,class:"fas fa-sort ml-1 text-gray-400"},q0={key:1,class:"fas fa-sort ml-1 text-gray-400"},F0={key:1,class:"fas fa-sort ml-1 text-gray-400"},W0={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},B0={class:"flex items-center"},N0=["value"],H0={class:"min-w-0"},Y0=["title"],Q0={key:0,class:"mt-1 text-xs text-red-600"},J0={class:"px-3 py-3"},X0={class:"space-y-1"},Z0={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},eu={key:0,class:"flex items-center gap-1 text-xs"},tu={class:"truncate text-gray-600 dark:text-gray-400"},su={key:1,class:"flex items-center gap-1 text-xs"},au={class:"truncate text-gray-600 dark:text-gray-400"},ru={key:2,class:"flex items-center gap-1 text-xs"},ou={class:"truncate text-gray-600 dark:text-gray-400"},lu={key:3,class:"flex items-center gap-1 text-xs"},nu={class:"truncate text-gray-600 dark:text-gray-400"},iu={key:4,class:"flex items-center gap-1 text-xs"},du={class:"truncate text-gray-600 dark:text-gray-400"},uu={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},cu={class:"px-3 py-3"},gu={class:"flex flex-wrap gap-1"},pu={key:0,class:"text-xs text-gray-400"},mu={class:"whitespace-nowrap px-3 py-3"},xu={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},yu={key:0,class:"flex items-center justify-end"},fu={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},bu={key:2,class:"text-gray-400"},vu={class:"px-2 py-2",style:{"font-size":"12px"}},ku={class:"flex flex-col gap-2"},wu={key:0,class:"space-y-2"},hu={key:2,class:"space-y-1.5"},Au={class:"flex items-center justify-between text-[10px]"},$u={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Cu={class:"font-medium"},Iu={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Ku={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Lu={key:0,class:"flex items-center justify-end"},Du={key:1,class:"flex items-center justify-end gap-1"},_u={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Tu={key:2,class:"text-gray-400"},Su={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Uu={key:0,class:"flex items-center justify-end"},Ru={key:1,class:"flex items-center justify-end gap-1"},Mu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Pu={key:2,class:"text-gray-400"},Vu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Eu={class:"flex flex-col leading-tight"},Ou=["title"],ju={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Gu={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},zu=["title"],qu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Fu={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Wu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Bu={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},Nu={class:"inline-flex items-center gap-1.5"},Hu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Yu={key:1},Qu=["onClick"],Ju=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},tc={class:"hidden gap-1 2xl:flex"},sc=["onClick"],ac=["onClick"],rc=["onClick"],oc=["onClick"],lc=["title","onClick"],nc={class:"ml-1"},ic=["onClick"],dc={class:"flex items-center gap-1 2xl:hidden"},uc=["onClick"],cc=["onClick"],gc={key:0},pc={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},mc={key:0,class:"py-4 text-center"},xc={class:"space-y-4"},yc={class:"mb-4 flex items-center justify-between"},fc={class:"flex items-center gap-2"},bc={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},vc={class:"flex items-center gap-1"},kc={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},wc=["onClick"],hc={key:0,class:"py-8 text-center"},Ac={class:"mb-3 flex items-center justify-center gap-2"},$c=["onClick"],Cc={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Ic={class:"mb-3 flex items-start justify-between"},Kc={class:"flex-1"},Lc={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Dc={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},_c={class:"mb-3 space-y-2"},Tc={class:"flex items-center justify-between text-sm"},Sc={class:"font-semibold text-gray-900 dark:text-gray-100"},Uc={class:"flex items-center justify-between text-sm"},Rc={class:"font-semibold text-green-600"},Mc={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Pc={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Vc={class:"font-medium"},Ec={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Oc={class:"font-medium"},jc={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Gc={class:"font-medium"},zc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},qc={class:"font-medium"},Fc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Wc={class:"mt-1 text-right"},Bc={class:"text-xs font-medium text-indigo-600"},Nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},Hc={class:"flex items-center justify-between text-sm"},Yc={class:"flex gap-4 text-xs"},Qc={class:"text-gray-600 dark:text-gray-400"},Jc={class:"font-semibold text-gray-800 dark:text-gray-200"},Xc={class:"text-gray-600 dark:text-gray-400"},Zc={class:"font-semibold text-gray-800 dark:text-gray-200"},eg={key:3,class:"space-y-3 md:hidden"},tg={class:"mb-3 flex items-start justify-between"},sg={class:"flex items-center gap-3"},ag=["value"],rg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},og={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},lg={class:"mb-3 space-y-1.5"},ng={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},ig={class:"text-gray-600 dark:text-gray-400"},dg={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},ug={class:"text-gray-600 dark:text-gray-400"},cg={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},gg={class:"text-gray-600 dark:text-gray-400"},pg={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},mg={class:"text-gray-600 dark:text-gray-400"},xg={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},yg={class:"text-gray-600 dark:text-gray-400"},fg={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},bg={key:6,class:"text-xs text-red-600"},vg={class:"mb-3 space-y-2"},kg={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wg={class:"mb-2 flex items-center justify-between"},hg={class:"text-xs text-gray-600 dark:text-gray-400"},Ag=["onClick"],$g={class:"grid grid-cols-2 gap-3"},Cg={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Ig={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kg={key:2,class:"text-sm font-semibold text-gray-400"},Lg={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Dg={key:1,class:"text-sm font-semibold text-green-600"},_g={key:2,class:"text-sm font-semibold text-gray-400"},Tg={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Sg={class:"flex items-center justify-between"},Ug={class:"font-medium text-gray-700 dark:text-gray-300"},Rg={class:"mt-1 flex items-center justify-between"},Mg={key:0,class:"text-gray-400 dark:text-gray-500"},Pg=["title"],Vg={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Eg={key:2,class:"text-gray-400 dark:text-gray-500"},Og={class:"space-y-2"},jg={key:0,class:"space-y-2"},Gg={key:2,class:"space-y-2"},zg={class:"flex items-center justify-between text-xs"},qg={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Fg={class:"font-medium"},Wg={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Bg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ng={class:"mb-1 flex justify-between"},Hg={class:"flex items-center justify-between"},Yg={class:"flex items-center gap-1"},Qg=["onClick"],Jg={key:0,class:"mb-3 flex flex-wrap gap-1"},Xg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},Zg=["onClick"],ep=["onClick"],tp=["onClick"],sp=["onClick"],ap=["onClick"],rp={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},op={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},lp={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},np={class:"flex items-center gap-2"},ip=["value"],dp={class:"flex items-center gap-2"},up=["disabled"],cp={class:"flex items-center gap-1"},gp={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},pp=["onClick"],mp={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},xp=["disabled"],yp={key:1,class:"tab-panel"},fp={key:0,class:"py-12 text-center"},bp={key:1,class:"py-12 text-center"},vp={key:2},kp={class:"mb-4 flex justify-end"},wp={class:"table-wrapper"},hp={class:"table-container"},Ap={class:"w-full"},$p={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Cp={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ip={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Kp={class:"name-column sticky left-0 z-10 px-3 py-3"},Lp={class:"flex items-center"},Dp={class:"min-w-0"},_p=["title"],Tp={class:"px-3 py-3"},Sp={class:"space-y-1"},Up={key:0,class:"flex items-center gap-1 text-xs"},Rp={key:1,class:"flex items-center gap-1 text-xs"},Mp={key:2,class:"flex items-center gap-1 text-xs"},Pp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vp={key:0,class:"px-3 py-3"},Ep={class:"text-xs"},Op={key:0,class:"text-blue-600"},jp={key:1,class:"text-green-600"},Gp={key:2,class:"text-gray-500 dark:text-gray-400"},zp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},qp={class:"px-3 py-3"},Fp={class:"text-xs"},Wp={key:0,class:"text-blue-600"},Bp={key:1,class:"text-green-600"},Np={key:2,class:"text-gray-500 dark:text-gray-400"},Hp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Yp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Qp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Jp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Zp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},em={class:"flex items-center justify-end gap-1"},tm={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},sm={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},am={class:"flex flex-col leading-tight"},rm=["title"],om={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lm={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},nm=["title"],im={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dm={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},um={class:"operations-column operations-cell px-3 py-3"},cm={class:"flex items-center gap-2"},gm=["onClick"],pm=["onClick"],ks=16,mm={__name:"ApiKeysView",setup(k){const N=ma(),g=zt(),F=xa(),j=I([]),L=R(()=>{var s;return((s=F.oemSettings)==null?void 0:s.ldapEnabled)||!1}),$=I([]),W=I(!1),S=I(!1),Q=I(!1),H=I(!1),B=I("today"),f=Ye({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),x=R(()=>Q.value),a=()=>{Q.value=!Q.value,Q.value||($.value=[],W.value=!1,S.value=!1)},z=R(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),T=I("active"),q=I([]),K=I(!1),C=I("createdAt"),X=I("desc"),le=I({}),ue=I({}),fe=I({page:1,pageSize:20,total:0,totalPages:0}),pe=I(new Map),Ke=I(new Set),_=I(new Map),l=I(new Set),o=I({}),p=I({}),A=I([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),u=I({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),i=I(!1),y=I(!1),ie=I(null),me=I(null),xe=I(!1),he=I(null),ce=I(""),Ae=I([]),Y=I([]),J=I([]),be=I(""),Re=I("apiKey"),Qe=R(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),re=R(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return Ae.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Me=R(()=>J.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),As=R(()=>ce.value?j.value.filter(s=>s.tags&&s.tags.includes(ce.value)).length:0),ve=I(1),Je=I((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),$s=[10,20,50,100],Xe=I(!1),ct=I(!1),gt=I(!1),It=I(!1),Kt=I(!1),pt=I(!1),Ft=I(null),Wt=I(null),Bt=I(null),Nt=I([]),mt=R(()=>j.value),ze=R(()=>fe.value.totalPages||0),Ze=R(()=>{const s=[],t=ve.value,m=ze.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),v=Math.min(m,t+2);t<=3?v=5:t>=m-2&&(r=m-4);for(let M=r;M<=v;M++)s.push(M)}return s}),Ht=R(()=>{const s=Ze.value;return s.length===0?!1:s[0]>1}),Yt=R(()=>{const s=Ze.value;return s.length===0?!1:s[s.length-1]{const s=Ze.value;return s.length===0?!1:Ht.value&&s[0]>2}),Is=R(()=>{const s=Ze.value;return s.length===0?!1:Yt.value&&s[s.length-1]j.value),xt=async(s=!1)=>{var t,m;if(!(y.value&&!s)){i.value=!0;try{const[r,v,M,P,U,se,ne,b,G]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),de=[];r.success&&((t=r.data)==null||t.forEach(ee=>{de.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),v.success&&((m=v.data)==null||m.forEach(ee=>{de.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),u.value.claude=de;const ke=[];if(M.success&&(M.data||[]).forEach(ee=>{ke.push({...ee,platform:"gemini",isDedicated:ee.accountType==="dedicated"})}),P.success&&(u.value.geminiApi=(P.data||[]).map(ee=>({...ee,platform:"gemini-api",isDedicated:ee.accountType==="dedicated"})),u.value.geminiApi.forEach(ee=>{ke.push(ee)})),u.value.gemini=ke,U.success&&(u.value.openai=(U.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),se.success&&(u.value.openaiResponses=(se.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ne.success&&(u.value.bedrock=(ne.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),b.success&&(u.value.droid=(b.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),G.success){const ee=G.data||[];u.value.claudeGroups=ee.filter(ge=>ge.platform==="claude"),u.value.geminiGroups=ee.filter(ge=>ge.platform==="gemini"),u.value.openaiGroups=ee.filter(ge=>ge.platform==="openai"),u.value.droidGroups=ee.filter(ge=>ge.platform==="droid")}y.value=!0}catch{}finally{i.value=!1}}},Ks=async()=>{try{const s=await E.get("/admin/api-keys/used-models");s.success&&(J.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},$e=async(s=!0)=>{var t,m,r;H.value=!0;try{s&&(pe.value.clear(),_.value.clear());const v=new URLSearchParams;v.set("page",ve.value.toString()),v.set("pageSize",Je.value.toString()),v.set("searchMode",Re.value),be.value&&v.set("search",be.value),ce.value&&v.set("tag",ce.value),Y.value.length>0&&v.set("models",Y.value.join(","));const P=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(C.value)?C.value:"createdAt";v.set("sortBy",P),v.set("sortOrder",X.value),P==="cost"&&(f.type==="custom"&&f.customStart&&f.customEnd?(v.set("costTimeRange","custom"),v.set("costStartDate",f.customStart),v.set("costEndDate",f.customEnd)):v.set("costTimeRange",f.preset||"7days")),f.type==="custom"&&f.customStart&&f.customEnd?(v.set("startDate",f.customStart),v.set("endDate",f.customEnd),v.set("timeRange","custom")):f.preset==="all"?v.set("timeRange","all"):v.set("timeRange",f.preset);const U=await E.get(`/admin/api-keys?${v.toString()}`);U.success&&(j.value=((t=U.data)==null?void 0:t.items)||[],(m=U.data)!=null&&m.pagination&&(fe.value=U.data.pagination,ve.value>fe.value.totalPages&&fe.value.totalPages>0&&(ve.value=fe.value.totalPages)),(r=U.data)!=null&&r.availableTags&&(Ae.value=U.data.availableTags),Ls(),Ds())}catch{V("加载 API Keys 失败","error")}finally{H.value=!1}},Ls=async()=>{const s=j.value;if(!s||s.length===0)return;let t=f.preset,m=null,r=null;f.type==="custom"&&f.customStart&&f.customEnd&&(t="custom",m=f.customStart,r=f.customEnd);const v=s.filter(P=>{const U=pe.value.get(P.id);return!U||U.timeRange!==t||t==="custom"&&(U.startDate!==m||U.endDate!==r)});if(v.length===0)return;const M=v.map(P=>P.id);M.forEach(P=>Ke.value.add(P));try{const P={keyIds:M,timeRange:t};t==="custom"&&(P.startDate=m,P.endDate=r);const U=await E.post("/admin/api-keys/batch-stats",P);if(U.success&&U.data)for(const[se,ne]of Object.entries(U.data))pe.value.set(se,{stats:ne,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(P){console.error("加载统计数据失败:",P)}finally{M.forEach(P=>Ke.value.delete(P))}},ye=s=>{const t=pe.value.get(s);return(t==null?void 0:t.stats)||null},qe=s=>Ke.value.has(s),Ds=async()=>{const s=j.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||_.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>l.value.add(r));try{const r=await E.post("/admin/api-keys/batch-last-usage",{keyIds:m});if(r.success&&r.data)for(const[v,M]of Object.entries(r.data))_.value.set(v,M)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>l.value.delete(r))}},_s=s=>_.value.get(s)||null,yt=s=>l.value.has(s),ft=async()=>{T.value="deleted",K.value=!0;try{const s=await E.get("/admin/api-keys/deleted");s.success&&(q.value=s.apiKeys||[])}catch{V("加载已删除的 API Keys 失败","error")}finally{K.value=!1}},Be=s=>{if(s==="cost"){if(!bt.value){V("费用排序索引正在更新中,请稍后重试","warning");return}f.type==="custom"&&V("正在计算费用排序,可能需要几秒钟...","info")}C.value===s?X.value=X.value==="asc"?"desc":"asc":(C.value=s,X.value=s==="cost"?"desc":"asc")},bt=R(()=>{if(f.type==="custom")return!0;const s=f.preset,t=ue.value[s];return(t==null?void 0:t.status)==="ready"}),Ts=R(()=>{if(f.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=f.preset,t=ue.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let Ne=null;const Qt=async()=>{try{const s=await E.get("/admin/api-keys/cost-sort-status");s.success&&(ue.value=s.data||{},Ss())}catch(s){console.error("Failed to fetch cost sort status:",s)}},Ss=()=>{Ne&&clearTimeout(Ne);const t=Object.values(ue.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;Ne=setTimeout(Qt,t)},Lt=s=>!s&&s!==0?"0":s.toLocaleString("zh-CN"),De=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),et=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const U=s.substring(6),se=u.value.claudeGroups.find(de=>de.id===U);if(se)return`分组-${se.name}`;const ne=u.value.geminiGroups.find(de=>de.id===U);if(ne)return`分组-${ne.name}`;const b=u.value.openaiGroups.find(de=>de.id===U);if(b)return`分组-${b.name}`;const G=u.value.droidGroups.find(de=>de.id===U);return G?`分组-${G.name}`:`分组-${U.substring(0,8)}`}const t=u.value.claude.find(U=>U.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const U=s.replace("api:",""),se=u.value.gemini.find(ne=>ne.id===U&&ne.platform==="gemini-api");return se?`${se.name}`:`${U.substring(0,8)}`}const m=u.value.gemini.find(U=>U.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const U=s.replace("responses:",""),se=u.value.openaiResponses.find(ne=>ne.id===U);return se?`${se.name}`:`${U.substring(0,8)}`}const r=u.value.openai.find(U=>U.id===s);if(r)return`${r.name}`;const v=u.value.openaiResponses.find(U=>U.id===s);if(v)return`${v.name}`;const M=u.value.bedrock.find(U=>U.id===s);if(M)return`${M.name}`;const P=u.value.droid.find(U=>U.id===s);return P?`${P.name}`:`${s.substring(0,8)}`},Us=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),Jt=s=>{if(s.claudeAccountId){const t=et(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=u.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=u.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},Xt=s=>{if(s.geminiAccountId){const t=et(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),v=u.value.gemini.find(M=>M.id===r&&M.platform==="gemini-api");return v?v.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=u.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Zt=s=>{if(s.openaiAccountId){const t=et(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=u.value.openaiResponses.find(v=>v.id===r)}else m=u.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},es=s=>{if(s.bedrockAccountId){const t=et(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=u.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ts=s=>{if(s.droidAccountId){const t=et(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=u.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},tt=s=>s?new Date(s)!s||tt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,ss=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",as=async s=>{le.value[s]?le.value[s]=!1:(le.value[s]=!0,p.value[s]||ls(s),await vt(s,!0))},vt=async(s,t=!1)=>{if(!t&&o.value[s]&&o.value[s].length>0)return;const m=Oe(s);try{let r=`/admin/api-keys/${s}/model-stats`;const v=new URLSearchParams;if(m.customStart&&m.customEnd)v.append("startDate",m.customStart),v.append("endDate",m.customEnd),v.append("period","custom");else{const P=m.preset==="today"||m.preset==="7days"?"daily":"monthly";v.append("period",P)}r+="?"+v.toString();const M=await E.get(r);M.success&&(o.value[s]=M.data||[])}catch{V("加载模型统计失败","error"),o.value[s]=[]}},rs=(s,t)=>{const m=t.reduce((r,v)=>r+(v.allTokens||0),0);return m===0?0:Math.round(s/m*100)},Rs=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",Ms=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.requests)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.requests)||0}},Ps=s=>{if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(f.preset==="today")return s.dailyCost||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},Vs=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.tokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.tokens)||0}},Es=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.inputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.inputTokens)||0}},Os=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.outputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.outputTokens)||0}},js=s=>{if(!o.value[s.id])return Ps(s);const t=o.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const v=r.formatted.total.replace("$","").replace(",",""),M=parseFloat(v);isNaN(M)||(m+=M)}}),m},Gs=s=>{if(os(s),C.value==="cost"){if(s==="custom")return;const t=ue.value[s];(!t||t.status!=="ready")&&(C.value="createdAt",X.value="desc",V("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},os=s=>{if(f.preset=s,s==="custom"){if(f.type="custom",!f.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=v=>v.getFullYear()+"-"+String(v.getMonth()+1).padStart(2,"0")+"-"+String(v.getDate()).padStart(2,"0")+" 00:00:00";f.customRange=[r(m),r(t)],f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")f.type="preset",f.customStart=null,f.customEnd=null;else{f.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}$e()},zs=s=>{s&&s.length===2?(f.type="custom",f.preset="custom",f.customRange=s,f.customStart=s[0].split(" ")[0],f.customEnd=s[1].split(" ")[0],$e()):s===null&&os("today")},ls=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),p.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},Oe=s=>(p.value[s]||ls(s),p.value[s]),ns=(s,t)=>{const m=Oe(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(v=>v.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const v=new Date,M=new Date(v);M.setDate(v.getDate()-6);const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)],m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0]}}else{const v=new Date,M=new Date(v);M.setDate(v.getDate()-(r.days-1)),m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0];const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)]}vt(t,!0)},qs=(s,t)=>{const m=Oe(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],vt(s,!0)):t===null&&ns("7days",s)},is=s=>s>new Date,Fs=s=>{const t=Oe(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,vt(s,!0),V("已重置筛选条件并刷新数据","info")},Ws=()=>{Xe.value=!0,y.value||xt()},Dt=s=>{Ft.value=s,ct.value=!0,y.value||xt()},_t=s=>{Wt.value=s,gt.value=!0},Bs=s=>{Xe.value=!1,Bt.value=s,It.value=!0,$e()},Ns=s=>{Xe.value=!1,Nt.value=s,Kt.value=!0,$e()},Hs=()=>{if($.value.length===0){V("请先选择要编辑的 API Keys","warning");return}pt.value=!0,y.value||xt()},Ys=()=>{pt.value=!1,$.value=[],Ue(),$e()},Qs=()=>{ct.value=!1,V("API Key 更新成功","success"),$e()},Js=()=>{gt.value=!1,V("API Key 续期成功","success"),$e()},Xs=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Dt(s)}];return s.expiresAt&&(tt(s.expiresAt)||st(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>_t(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Tt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>St(s.id)}),t},Tt=async s=>{let t=!0;if(s.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const m=await E.put(`/admin/api-keys/${s.id}`,{isActive:!s.isActive});if(m.success){V(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=j.value.find(v=>v.id===s.id);r&&(r.isActive=!s.isActive)}else V(m.message||"操作失败","error")}catch{V("操作失败","error")}},St=async s=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const m=await E.delete(`/admin/api-keys/${s}`);if(m.success){V("API Key 已删除","success");const r=$.value.indexOf(s);r>-1&&$.value.splice(r,1),Ue(),$e()}else V(m.message||"删除失败","error")}catch{V("删除失败","error")}},Zs=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const v=await E.post(`/admin/api-keys/${s}/restore`);v.success?(V("API Key 已成功恢复","success"),await ft(),await $e()):V(v.error||"恢复失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ea=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const v=await E.delete(`/admin/api-keys/${s}/permanent`);v.success?(V("API Key 已彻底删除","success"),ft()):V(v.error||"彻底删除失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},ta=async()=>{var m,r;const s=q.value.length;if(s===0){V("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const v=await E.delete("/admin/api-keys/deleted/clear-all");v.success?(V(v.message||"已清空所有已删除的 API Keys","success"),v.details&&v.details.failedCount>0&&V(`${v.details.failedCount} 个清空失败`,"warning"),ft()):V(v.error||"清空失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},sa=async()=>{const s=$.value.length;if(s===0){V("请先选择要删除的 API Keys","warning");return}let t=!1;const m=`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",m,"确定删除","取消"):t=confirm(m),!t)return;const r=[...$.value];try{const v=await E.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(v.success){const{successCount:M,failedCount:P,errors:U}=v.data;if(M>0){if(V(`成功删除 ${M} 个 API Keys`,"success"),P>0){const se=U.map(ne=>`${ne.keyId}: ${ne.error}`).join(` `);V(`${P} 个删除失败: -${se}`,"warning")}}else V("所有 API Keys 删除失败","error");$.value=[],Ue(),$e()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{$.value.includes(s.id)||$.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));$.value=$.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>$.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,$.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,$e(!1)},300)}),Te(Re,()=>{ve.value=1,$e(!1)}),Te(ce,()=>{ve.value=1,$e(!1)}),Te(Y,()=>{ve.value=1,$e(!1)}),Te([C,X],()=>{$e(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&$e(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));$.value=$.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),$e(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>T.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),T.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae($t,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae($t,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae($t,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae($t,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",$0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>$e())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,C0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),$.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c($.value.length)+")",1)])):w("",!0),$.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c($.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[Ce,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),C.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),C.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),C.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),C.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),C.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),C.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>$.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[Ce,$.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",$u,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Cu,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,$c)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Cc,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Ct({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>$.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[Ce,$.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",$g,[e("div",null,[qe(r.id)?(n(),d("div",Cg)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe($s,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),Cs.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):T.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",$p,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",Cp," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":$.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},hm=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{hm as default}; +${se}`,"warning")}}else V("所有 API Keys 删除失败","error");$.value=[],Ue(),$e()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{$.value.includes(s.id)||$.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));$.value=$.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>$.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,$.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,$e(!1)},300)}),Te(Re,()=>{ve.value=1,$e(!1)}),Te(ce,()=>{ve.value=1,$e(!1)}),Te(Y,()=>{ve.value=1,$e(!1)}),Te([C,X],()=>{$e(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&$e(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));$.value=$.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),$e(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>T.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),T.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae($t,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae($t,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae($t,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae($t,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",$0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>$e())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,C0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),$.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c($.value.length)+")",1)])):w("",!0),$.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c($.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[Ce,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),C.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),C.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),C.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),C.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),C.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),C.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>$.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[Ce,$.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",$u,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Cu,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,$c)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Cc,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Ct({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>$.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[Ce,$.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",$g,[e("div",null,[qe(r.id)?(n(),d("div",Cg)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe($s,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),Cs.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):T.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",$p,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",Cp," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":$.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},Am=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{Am as default}; diff --git a/assets/ApiStatsView-7CsUPSAo.js b/assets/ApiStatsView-7CsUPSAo.js deleted file mode 100644 index 31887612..00000000 --- a/assets/ApiStatsView-7CsUPSAo.js +++ /dev/null @@ -1,6 +0,0 @@ -import{aP as pt,r as M,c as j,aX as et,x as n,y as l,z as t,O as b,L as K,P as r,u as e,C as P,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as tt,B as lt,R as X,o as ft,V as yt,I as ot,a5 as bt,q as kt,aW as ht,J as xt,av as _t}from"./vue-vendor-R8HMg95E.js";import{_ as st,A as wt,a as $t}from"./index-Cr7hSgrN.js";import{L as St}from"./LogoTitle-CwgrPCRk.js";import{T as Ct}from"./ThemeToggle-Dkc-_0Ud.js";import{b as Tt}from"./vendor-Dr8jvgFu.js";import{_ as Kt}from"./WindowCountdown-DF7xS2EZ.js";import At from"./TutorialView-DqwFkHUw.js";import"./element-plus-BUfCkBQO.js";class Lt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(v,s={}){try{this.isDev&&v.startsWith("/admin")&&(v="/webapi"+v);const p=await fetch(`${this.baseURL}${v}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),d=await p.json();if(!p.ok)throw new Error(d.message||`请求失败: ${p.status}`);return d}catch(p){throw console.error("API Stats request error:",p),p}}async getKeyId(v){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:v})})}async getUserStats(v){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:v})})}async getUserModelStats(v,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:v,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(v){return console.error("Failed to load OEM settings:",v),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(v){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:v})})}async getBatchModelStats(v,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:v,period:s})})}}const Q=new Lt,at=pt("apistats",()=>{const N=M(""),v=M(null),s=M(!1),p=M(!1),d=M(!0),x=M(""),m=M("daily"),y=M(null),_=M([]),A=M(null),f=M(null),T=M({siteName:"",siteIcon:"",siteIconData:""}),O=M(!1),w=M([]),h=M([]),u=M(null),i=M([]),I=M([]),E=j(()=>{const c={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return O.value&&u.value?m.value==="daily"?u.value.dailyUsage||c:u.value.monthlyUsage||c:m.value==="daily"?A.value||c:f.value||c}),H=j(()=>{if(!y.value||!E.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const c=E.value,k=y.value.limits;return{tokenUsage:k.tokenLimit>0?Math.min(c.allTokens/k.tokenLimit*100,100):0,costUsage:k.dailyCostLimit>0?Math.min(c.cost/k.dailyCostLimit*100,100):0,requestUsage:k.rateLimitRequests>0?Math.min(c.requests/k.rateLimitRequests*100,100):0}});async function V(){if(O.value)return Y();const c=N.value.trim();if(!c){x.value="请输入 API Key";return}if(c.length<10||c.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",y.value=null,_.value=[],v.value=null;try{const k=await Q.getKeyId(c);if(k.success){v.value=k.data.id;const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,await W(),x.value="",z();else throw new Error(L.message||"查询失败")}else throw new Error(k.message||"获取 API Key ID 失败")}catch(k){console.error("Query stats error:",k),x.value=k.message||"查询统计数据失败,请检查您的 API Key 是否正确",y.value=null,_.value=[],v.value=null}finally{s.value=!1}}async function W(){v.value&&(await Promise.all([B("daily"),B("monthly")]),await D(m.value))}async function B(c){try{const k=await Q.getUserModelStats(v.value,c);if(k.success){const L=k.data||[],F={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};L.forEach(q=>{var J;F.requests+=q.requests||0,F.inputTokens+=q.inputTokens||0,F.outputTokens+=q.outputTokens||0,F.cacheCreateTokens+=q.cacheCreateTokens||0,F.cacheReadTokens+=q.cacheReadTokens||0,F.allTokens+=q.allTokens||0,F.cost+=((J=q.costs)==null?void 0:J.total)||0}),F.formattedCost=G(F.cost),c==="daily"?A.value=F:f.value=F}else console.warn(`Failed to load ${c} stats:`,k.message)}catch(k){console.error(`Load ${c} stats error:`,k)}}async function D(c="daily"){if(v.value){p.value=!0;try{const k=await Q.getUserModelStats(v.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载模型统计失败")}catch(k){console.error("Load model stats error:",k),_.value=[]}finally{p.value=!1}}}async function $(c){if(!(m.value===c||p.value)){if(m.value=c,O.value&&h.value.length>0){await rt(c);return}(c==="daily"&&!A.value||c==="monthly"&&!f.value)&&await B(c),await D(c)}}async function U(){var c,k;if(v.value){s.value=!0,x.value="",y.value=null,_.value=[];try{const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,console.log("API Stats - Full response:",L.data),console.log("API Stats - limits data:",L.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(c=L.data.limits)==null?void 0:c.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(k=L.data.limits)==null?void 0:k.weeklyOpusCost),await W(),x.value="";else throw new Error(L.message||"查询失败")}catch(L){console.error("Load stats with apiId error:",L),x.value=L.message||"查询统计数据失败",y.value=null,_.value=[]}finally{s.value=!1}}}async function S(){d.value=!0;try{const c=await Q.getOemSettings();c&&c.success&&c.data&&(T.value={...T.value,...c.data})}catch(c){console.error("Error loading OEM settings:",c),T.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{d.value=!1}}function G(c){return typeof c!="number"||c===0?"$0.000000":c>=1?"$"+c.toFixed(2):c>=.01?"$"+c.toFixed(4):"$"+c.toFixed(6)}function z(){if(v.value){const c=new URL(window.location);c.searchParams.set("apiId",v.value),window.history.pushState({},"",c)}}async function Y(){const c=o();if(c.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",u.value=null,i.value=[],I.value=[],_.value=[],w.value=c,h.value=[];try{const k=await Promise.allSettled(c.map(J=>Q.getKeyId(J))),L=[],F=[];if(k.forEach((J,it)=>{J.status==="fulfilled"&&J.value.success?(L.push(J.value.data.id),F.push(c[it])):I.value.push(c[it])}),L.length===0)throw new Error("所有 API Key 都无效");h.value=L,w.value=F;const q=await Q.getBatchStats(L);if(q.success)u.value=q.data.aggregated,i.value=q.data.individual,y.value=q.data.aggregated,A.value=q.data.aggregated.dailyUsage||null,f.value=q.data.aggregated.monthlyUsage||null,await rt(m.value),a();else throw new Error(q.message||"批量查询失败")}catch(k){console.error("Batch query error:",k),x.value=k.message||"批量查询统计数据失败",u.value=null,i.value=[]}finally{s.value=!1}}async function rt(c="daily"){if(h.value.length!==0){p.value=!0;try{const k=await Q.getBatchModelStats(h.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载批量模型统计失败")}catch(k){console.error("Load batch model stats error:",k),_.value=[]}finally{p.value=!1}}}function o(){if(!N.value)return[];const c=N.value.split(/[,\n]+/).map(L=>L.trim()).filter(L=>L.length>=10&&L.length<=512);return[...new Set(c)].slice(0,30)}function a(){if(h.value.length>0){const c=new URL(window.location);c.searchParams.set("apiIds",h.value.join(",")),c.searchParams.set("batch","true"),window.history.pushState({},"",c)}}function g(){N.value=""}function C(){y.value=null,_.value=[],A.value=null,f.value=null,x.value="",m.value="daily",v.value=null,w.value=[],h.value=[],u.value=null,i.value=[],I.value=[]}function R(){N.value="",O.value=!1,C()}return{apiKey:N,apiId:v,loading:s,modelStatsLoading:p,oemLoading:d,error:x,statsPeriod:m,statsData:y,modelStats:_,dailyStats:A,monthlyStats:f,oemSettings:T,multiKeyMode:O,apiKeys:w,apiIds:h,aggregatedStats:u,individualStats:i,invalidKeys:I,currentPeriodData:E,usagePercentages:H,queryStats:V,queryBatchStats:Y,loadAllPeriodStats:W,loadPeriodStats:B,loadModelStats:D,loadBatchModelStats:rt,switchPeriod:$,loadStatsWithApiId:U,loadOemSettings:S,clearData:C,clearInput:g,reset:R}}),Pt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},It={class:"mx-auto max-w-4xl"},Mt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Dt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},qt={class:"button-group flex items-center gap-2"},jt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Ut={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Rt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Nt={class:"lg:col-span-3"},Ot=["disabled"],Et={key:1,class:"relative"},Ft=["disabled"],Wt={class:"lg:col-span-1"},Bt=["disabled"],Vt={key:0,class:"fas fa-spinner loading-spinner"},zt={key:1,class:"fas fa-search"},Jt={class:"security-notice mt-4"},Yt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},Ht={__name:"ApiKeyInput",setup(N){const v=at(),{apiKey:s,loading:p,multiKeyMode:d}=et(v),{queryStats:x,clearInput:m}=v,y=j(()=>{if(!d.value||!s.value)return[];const A=s.value.split(/[,\n]+/).map(T=>T.trim()).filter(T=>T.length>0);return[...new Set(A)].slice(0,30)}),_=j(()=>d.value?y.value.length>0:s.value&&s.value.trim().length>0);return(A,f)=>(l(),n("div",Pt,[f[15]||(f[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),b(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",It,[t("div",Mt,[t("label",Dt,[f[8]||(f[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),b(" "+r(e(d)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",qt,[t("div",jt,[t("button",{class:P(["mode-switch-btn",{active:!e(d)}]),title:"单一模式",onClick:f[0]||(f[0]=T=>d.value=!1)},f[9]||(f[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:P(["mode-switch-btn",{active:e(d)}]),title:"聚合模式",onClick:f[1]||(f[1]=T=>d.value=!0)},[f[10]||(f[10]=t("i",{class:"fas fa-layer-group"},null,-1)),f[11]||(f[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(d)&&y.value.length>0?(l(),n("span",Ut,r(y.value.length),1)):K("",!0)],2)])])]),t("div",Rt,[t("div",Nt,[e(d)?(l(),n("div",Et,[ut(t("textarea",{"onUpdate:modelValue":f[4]||(f[4]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full resize-y",disabled:e(p),placeholder:`请输入您的 API Keys,支持以下格式: -cr_xxx -cr_yyy -或 -cr_xxx, cr_yyy`,rows:"4",onKeyup:f[5]||(f[5]=mt(vt((...T)=>e(x)&&e(x)(...T),["ctrl"]),["enter"]))},null,40,Ft),[[ct,e(s)]]),e(s)&&!e(p)?(l(),n("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:f[6]||(f[6]=(...T)=>e(m)&&e(m)(...T))},f[12]||(f[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):K("",!0)])):ut((l(),n("input",{key:0,"onUpdate:modelValue":f[2]||(f[2]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full",disabled:e(p),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:f[3]||(f[3]=mt((...T)=>e(x)&&e(x)(...T),["enter"]))},null,40,Ot)),[[ct,e(s)]])]),t("div",Wt,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(p)||!_.value,onClick:f[7]||(f[7]=(...T)=>e(x)&&e(x)(...T))},[e(p)?(l(),n("i",Vt)):(l(),n("i",zt)),b(" "+r(e(p)?"查询中...":"查询统计"),1)],8,Bt)])]),t("div",Jt,[f[13]||(f[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),b(" "+r(e(d)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(d)?(l(),n("div",Yt,f[14]||(f[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):K("",!0)])]))}},Gt=st(Ht,[["__scopeId","data-v-11e74200"]]),Qt={class:"space-y-6 md:space-y-8"},Xt={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Zt={class:"card-section"},te={class:"section-header"},ee={class:"header-title"},se={key:0,class:"info-grid"},ae={class:"info-item"},re={class:"info-value"},le={class:"info-item"},ie={class:"info-value text-green-600 dark:text-emerald-400"},oe={key:0,class:"info-item"},ne={class:"info-value text-red-500 dark:text-red-400"},de={class:"info-item"},ue={class:"info-value"},ce={class:"info-item"},me={class:"info-value"},ge={class:"info-item"},xe={class:"info-value text-indigo-600 dark:text-indigo-300"},fe={key:1,class:"info-item xl:col-span-2"},ye={class:"space-y-2"},pe={class:"truncate"},ve={class:"font-semibold"},be={key:1,class:"info-grid"},ke={class:"info-item"},he={class:"info-value break-all"},_e={class:"info-item"},we={class:"info-item"},$e={class:"info-value"},Se={class:"info-item"},Ce={class:"info-value break-all"},Te={class:"info-item xl:col-span-2"},Ke={class:"info-value"},Ae={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},Le={key:0,class:"text-red-500 dark:text-red-400"},Pe={key:1,class:"text-orange-500 dark:text-orange-400"},Ie={key:2},Me={key:2,class:"text-gray-400 dark:text-gray-500"},De={class:"card-section"},qe={class:"section-header"},je={class:"header-tag"},Ue={class:"metric-grid"},Re={class:"metric-card"},Ne={class:"metric-value text-green-600 dark:text-emerald-300"},Oe={class:"metric-label"},Ee={class:"metric-card"},Fe={class:"metric-value text-blue-600 dark:text-sky-300"},We={class:"metric-label"},Be={class:"metric-card"},Ve={class:"metric-value text-purple-600 dark:text-violet-300"},ze={class:"metric-label"},Je={class:"metric-card"},Ye={class:"metric-value text-amber-500 dark:text-amber-300"},He={class:"metric-label"},Ge={key:0,class:"card-section"},Qe={class:"flex items-center justify-between gap-3"},Xe={class:"flex items-center gap-3"},Ze={class:"account-name"},ts={class:"account-sub"},es={key:0,class:"mt-3 space-y-2"},ss={class:"progress-row"},as={class:"progress-track"},rs={class:"progress-value"},ls={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},is={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},os={key:1,class:"mt-3"},ns={key:0,class:"space-y-2"},ds={class:"quota-header"},us={class:"quota-percent"},cs={class:"progress-track"},ms={class:"quota-foot"},gs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},xs={__name:"StatsOverview",setup(N){const v=at(),{statsData:s,statsPeriod:p,currentPeriodData:d,multiKeyMode:x,aggregatedStats:m,individualStats:y,invalidKeys:_}=et(v),A=j(()=>!y.value||y.value.length===0?[]:[...y.value].sort((o,a)=>{var g,C;return(((g=a.usage)==null?void 0:g.allTokens)||0)-(((C=o.usage)==null?void 0:C.allTokens)||0)}).slice(0,3)),f=o=>{var g;return!m.value||!m.value.usage.allTokens?0:((((g=o.usage)==null?void 0:g.allTokens)||0)/m.value.usage.allTokens*100).toFixed(1)},T=o=>{if(!o)return"无";try{return Tt(o).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},O=o=>o?new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",w=o=>o?new Date(o){if(!o)return!1;const C=(new Date(o)-new Date)/(1e3*60*60*24);return C>0&&C<=7},u=o=>(typeof o!="number"&&(o=parseInt(o)||0),o===0?"0":o>=1e6?(o/1e6).toFixed(1)+"M":o>=1e3?(o/1e3).toFixed(1)+"K":o.toLocaleString()),i=o=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[o]||o||"未知",I=j(()=>{var g,C;const o=(C=(g=s.value)==null?void 0:g.accounts)==null?void 0:C.details;if(!o)return[];const a=[];return o.claude&&o.claude.accountType==="dedicated"&&a.push({key:"claude",...o.claude}),o.openai&&o.openai.accountType==="dedicated"&&a.push({key:"openai",...o.openai}),a}),E=j(()=>{const o=I.value.length;return o<=1?"md:grid-cols-1 lg:grid-cols-1":o===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),H=o=>o?o.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",V=o=>{if(!o||o<=0)return"";const a=Math.floor(o),g=Math.floor(a/1440),C=Math.floor(a%1440/60),R=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:`${R}分钟`},W=o=>{if(!o)return{text:"状态未知",class:"text-gray-400"};if(o.isRateLimited){const a=V(o.minutesRemaining);return{text:`限流中${a?` · 剩余约 ${a}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},B=(o,a)=>{if(!o||!a)return"暂无时间窗口信息";const g=new Date(o),C=new Date(a),R=c=>`${`${c.getHours()}`.padStart(2,"0")}:${`${c.getMinutes()}`.padStart(2,"0")}`;return`${R(g)} - ${R(C)}`},D=o=>{if(!o||o<=0)return"";const a=Math.floor(o/60),g=o%60;return a>0?`${a}小时${g}分钟`:`${g}分钟`},$=(o,a)=>{var C;if(!o)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((C=a==null?void 0:a.rateLimitStatus)!=null&&C.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const g=String(o).toLowerCase();return g==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":g==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},U=o=>{if(!o)return null;const a=typeof o.usedPercent=="number"&&!Number.isNaN(o.usedPercent)?o.usedPercent:null,g=typeof o.resetAfterSeconds=="number"&&!Number.isNaN(o.resetAfterSeconds)?o.resetAfterSeconds:null,C=typeof o.remainingSeconds=="number"?o.remainingSeconds:null,R=o.resetAt?Date.parse(o.resetAt):null;return g!==null&&(C!==null&&C<=0||R!==null&&!Number.isNaN(R)&&Date.now()>=R)?0:a===null?null:Math.max(0,Math.min(100,a))},S=o=>{const a=U(o);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},G=o=>{const a=U(o);return a===null?"0%":`${a}%`},z=o=>{const a=U(o);return a===null?"--":`${a.toFixed(1)}%`},Y=o=>{if(!o)return"--";let a=o.remainingSeconds;if(a==null&&(a=o.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const g=Math.floor(a/86400),C=Math.floor(a%86400/3600),R=Math.floor(a%3600/60),c=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:R>0?`${R}分钟`:`${c}秒`},rt=o=>o==="secondary"?"周限":"5h";return(o,a)=>(l(),n("div",Qt,[t("div",Xt,[t("div",Zt,[t("header",te,[t("i",{class:P(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",ee,r(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(m)?(l(),n("div",se,[t("div",ae,[a[0]||(a[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",re,r(e(m).totalKeys)+" 个",1)]),t("div",le,[a[2]||(a[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ie,[a[1]||(a[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),b(r(e(m).activeKeys)+" 个 ",1)])]),e(_).length>0?(l(),n("div",oe,[a[4]||(a[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",ne,[a[3]||(a[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),b(r(e(_).length)+" 个 ",1)])])):K("",!0),t("div",de,[a[5]||(a[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",ue,r(u(e(m).usage.requests)),1)]),t("div",ce,[a[6]||(a[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",me,r(u(e(m).usage.allTokens)),1)]),t("div",ge,[a[7]||(a[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",xe,r(e(m).usage.formattedCost),1)]),e(y).length>1?(l(),n("div",fe,[a[8]||(a[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",ye,[(l(!0),n(Z,null,tt(A.value,g=>(l(),n("div",{key:g.apiId,class:"contributor-item"},[t("span",pe,r(g.name),1),t("span",ve,r(f(g))+"%",1)]))),128))])])):K("",!0)])):(l(),n("div",be,[t("div",ke,[a[9]||(a[9]=t("p",{class:"info-label"},"名称",-1)),t("p",he,r(e(s).name),1)]),t("div",_e,[a[10]||(a[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:P(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:P(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),b(" "+r(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",we,[a[11]||(a[11]=t("p",{class:"info-label"},"权限",-1)),t("p",$e,r(i(e(s).permissions)),1)]),t("div",Se,[a[12]||(a[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ce,r(T(e(s).createdAt)),1)]),t("div",Te,[a[17]||(a[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ke,[e(s).expirationMode==="activation"&&!e(s).isActivated?(l(),n(Z,{key:0},[a[13]||(a[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),b("未激活 ")],-1)),t("span",Ae," 首次使用后 "+r(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+r(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(l(),n(Z,{key:1},[w(e(s).expiresAt)?(l(),n("span",Le,a[14]||(a[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),b("已过期 ",-1)]))):h(e(s).expiresAt)?(l(),n("span",Pe,[a[15]||(a[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),b(r(O(e(s).expiresAt)),1)])):(l(),n("span",Ie,r(O(e(s).expiresAt)),1))],64)):(l(),n("span",Me,a[16]||(a[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),b("永不过期 ",-1)])))])])]))]),t("div",De,[t("header",qe,[a[18]||(a[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),a[19]||(a[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",je,r(e(p)==="daily"?"今日":"本月"),1)]),t("div",Ue,[t("div",Re,[t("p",Ne,r(u(e(d).requests)),1),t("p",Oe,r(e(p)==="daily"?"今日":"本月")+"请求数",1)]),t("div",Ee,[t("p",Fe,r(u(e(d).allTokens)),1),t("p",We,r(e(p)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",Be,[t("p",Ve,r(e(d).formattedCost||"$0.000000"),1),t("p",ze,r(e(p)==="daily"?"今日":"本月")+"费用",1)]),t("div",Je,[t("p",Ye,r(u(e(d).inputTokens)),1),t("p",He,r(e(p)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&I.value.length>0?(l(),n("div",Ge,[a[21]||(a[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:P(["grid grid-cols-1 gap-4",E.value])},[(l(!0),n(Z,null,tt(I.value,g=>{var C,R,c,k,L,F;return l(),n("div",{key:g.id||g.key,class:"account-card"},[t("div",Qe,[t("div",Xe,[t("span",{class:P(["account-icon",g.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:P(g.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",Ze,r(H(g)),1),t("p",ts,r(g.platform==="claude"?"会话窗口":"额度窗口"),1)])]),W(g.rateLimitStatus)?(l(),n("div",{key:0,class:P(["rate-badge",W(g.rateLimitStatus).class])},[a[20]||(a[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),b(" "+r(W(g.rateLimitStatus).text),1)],2)):K("",!0)]),g.platform==="claude"?(l(),n("div",es,[t("div",ss,[t("div",as,[t("div",{class:P(["progress-bar",$((C=g.sessionWindow)==null?void 0:C.sessionWindowStatus,g)]),style:lt({width:`${Math.min(100,Math.max(0,((R=g.sessionWindow)==null?void 0:R.progress)||0))}%`})},null,6)]),t("span",rs,r(Math.min(100,Math.max(0,Math.round(((c=g.sessionWindow)==null?void 0:c.progress)||0))))+"% ",1)]),t("div",ls,[t("span",null,r(B((k=g.sessionWindow)==null?void 0:k.windowStart,(L=g.sessionWindow)==null?void 0:L.windowEnd)),1),((F=g.sessionWindow)==null?void 0:F.remainingTime)>0?(l(),n("span",is," 剩余 "+r(D(g.sessionWindow.remainingTime)),1)):K("",!0)])])):g.platform==="openai"?(l(),n("div",os,[g.codexUsage?(l(),n("div",ns,[(l(),n(Z,null,tt(["primary","secondary"],q=>{var J,it,nt,dt;return t("div",{key:`${g.key}-${q}`,class:"quota-row"},[t("div",ds,[t("span",{class:P(["quota-tag",q==="primary"?"tag-indigo":"tag-blue"])},r(rt(q)),3),t("span",us,r(z((J=g.codexUsage)==null?void 0:J[q])),1)]),t("div",cs,[t("div",{class:P(["progress-bar",S((it=g.codexUsage)==null?void 0:it[q])]),style:lt({width:G((nt=g.codexUsage)==null?void 0:nt[q])})},null,6)]),t("div",ms," 重置剩余 "+r(Y((dt=g.codexUsage)==null?void 0:dt[q])),1)])}),64))])):(l(),n("p",gs," 暂无额度使用数据 "))])):K("",!0)])}),128))],2)])):K("",!0)]))}},fs=st(xs,[["__scopeId","data-v-b72df2cd"]]),ys={class:"card p-4 md:p-6"},ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},vs={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},bs={class:"space-y-2 md:space-y-3"},ks={class:"flex items-center justify-between"},hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},_s={class:"flex items-center justify-between"},ws={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},$s={class:"flex items-center justify-between"},Ss={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Cs={class:"flex items-center justify-between"},Ts={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Ks={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},As={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ls={class:"text-sm md:text-base"},Ps={class:"text-lg md:text-xl"},Is={__name:"TokenDistribution",setup(N){const v=at(),{statsPeriod:s,currentPeriodData:p}=et(v),d=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,m)=>(l(),n("div",ys,[t("h3",ps,[m[0]||(m[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),b(" Token 使用分布 ")],-1)),t("span",vs,"("+r(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",bs,[t("div",ks,[m[1]||(m[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),b(" 输入 Token ")],-1)),t("span",hs,r(d(e(p).inputTokens)),1)]),t("div",_s,[m[2]||(m[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),b(" 输出 Token ")],-1)),t("span",ws,r(d(e(p).outputTokens)),1)]),t("div",$s,[m[3]||(m[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),b(" 缓存创建 Token ")],-1)),t("span",Ss,r(d(e(p).cacheCreateTokens)),1)]),t("div",Cs,[m[4]||(m[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),b(" 缓存读取 Token ")],-1)),t("span",Ts,r(d(e(p).cacheReadTokens)),1)])]),t("div",Ks,[t("div",As,[t("span",Ls,r(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Ps,r(d(e(p).allTokens)),1)])])]))}},Ms=st(Is,[["__scopeId","data-v-d9e5c1dd"]]),Ds={class:"flex h-full flex-col gap-4 md:gap-6"},qs={class:"card flex h-full flex-col p-4 md:p-6"},js={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Us={key:0,class:"space-y-4"},Rs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Ns={class:"mb-3 flex items-center justify-between"},Os={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},Es={class:"grid grid-cols-2 gap-3"},Fs={class:"text-center"},Ws={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Bs={class:"text-center"},Vs={class:"text-lg font-bold text-green-600"},zs={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Js={class:"space-y-2"},Ys={class:"flex items-center justify-between"},Hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Gs={class:"flex items-center justify-between"},Qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Xs={class:"flex items-center justify-between"},Zs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ta={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},ea={class:"text-red-700 dark:text-red-300"},sa={key:1,class:"space-y-4 md:space-y-5"},aa={class:"mb-2 flex items-center justify-between"},ra={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},la={key:0},ia={key:1,class:"flex items-center gap-1"},oa={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},na={key:1,class:"h-2 w-full rounded-full bg-gray-200"},da={class:"mb-2 flex items-center justify-between"},ua={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ca={key:0},ma={key:1,class:"flex items-center gap-1"},ga={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},xa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},fa={key:0},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},va={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ba={key:1},ka={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ha={key:0},_a={key:1},wa={key:2},$a={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},Sa={class:"flex items-center justify-between"},Ca={class:"text-sm font-medium text-gray-900 md:text-base"},Ta={key:0},Ka={key:1,class:"flex items-center gap-1"},Aa={class:"flex items-center justify-between"},La={class:"text-sm font-medium text-gray-900 md:text-base"},Pa={key:0,class:"text-orange-600"},Ia={key:1,class:"text-green-600"},Ma={class:"space-y-2"},Da={class:"flex items-center justify-between"},qa={class:"text-sm font-medium text-gray-900 md:text-base"},ja={key:0,class:"text-orange-600"},Ua={key:1,class:"text-green-600"},Ra={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Na={key:0,class:"card !overflow-visible p-4 md:p-6"},Oa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},Ea={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},Fa={class:"break-all text-gray-800 dark:text-gray-200"},Wa={__name:"LimitConfig",setup(N){const v=at(),{statsData:s,multiKeyMode:p,aggregatedStats:d,invalidKeys:x}=et(v),m=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableModelRestriction===!0&&Array.isArray(u.restrictedModels)&&u.restrictedModels.length>0:!1}),y=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableClientRestriction===!0&&Array.isArray(u.allowedClients)&&u.allowedClients.length>0:!1}),_=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const u=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(u,100)},A=()=>{const u=_();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const u=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(u,100)},T=()=>{const u=f();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-blue-500"},O=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const u=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(u,100)},w=()=>{const u=O();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-indigo-500"},h=u=>(typeof u!="number"&&(u=parseInt(u)||0),u===0?"0":u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toLocaleString());return(u,i)=>(l(),n("div",Ds,[t("div",qs,[t("h3",js,[i[0]||(i[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),b(" "+r(e(p)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(p)&&e(d)?(l(),n("div",Us,[t("div",Rs,[t("div",Ns,[i[1]||(i[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),b(" API Keys 概况 ")],-1)),t("span",Os,r(e(d).activeKeys)+"/"+r(e(d).totalKeys),1)]),t("div",Es,[t("div",Fs,[t("div",Ws,r(e(d).totalKeys),1),i[2]||(i[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",Bs,[t("div",Vs,r(e(d).activeKeys),1),i[3]||(i[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",zs,[i[7]||(i[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",Js,[t("div",Ys,[i[4]||(i[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),b(" 总请求数 ")],-1)),t("span",Hs,r(h(e(d).usage.requests)),1)]),t("div",Gs,[i[5]||(i[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),b(" 总 Tokens ")],-1)),t("span",Qs,r(h(e(d).usage.allTokens)),1)]),t("div",Xs,[i[6]||(i[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),b(" 总费用 ")],-1)),t("span",Zs,r(e(d).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(l(),n("div",ta,[i[8]||(i[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",ea,r(e(x).length)+" 个无效的 API Key ",1)])):K("",!0),i[9]||(i[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):K("",!0),e(p)?K("",!0):(l(),n("div",sa,[t("div",null,[t("div",aa,[i[11]||(i[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",ra,[e(s).limits.dailyCostLimit>0?(l(),n("span",la," $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / $"+r(e(s).limits.dailyCostLimit.toFixed(2)),1)):(l(),n("span",ia,[b(" $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),i[10]||(i[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(l(),n("div",oa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:_()+"%"})},null,6)])):(l(),n("div",na,i[12]||(i[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",da,[i[14]||(i[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",ua,[e(s).limits.totalCostLimit>0?(l(),n("span",ca," $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / $"+r(e(s).limits.totalCostLimit.toFixed(2)),1)):(l(),n("span",ma,[b(" $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),i[13]||(i[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(l(),n("div",ga,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T()]),style:lt({width:f()+"%"})},null,6)])):(l(),n("div",xa,i[15]||(i[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(l(),n("div",fa,[t("div",ya,[i[16]||(i[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Opus 模型周费用限制",-1)),t("span",pa," $"+r(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+r(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",va,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",w()]),style:lt({width:O()+"%"})},null,6)])])):K("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(l(),n("div",ba,[X(Kt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",ka,[i[17]||(i[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(l(),n("span",ha,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(l(),n("span",_a,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(l(),n("span",wa," 仅限制请求次数 "))])])):K("",!0),t("div",$a,[t("div",Sa,[i[19]||(i[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ca,[e(s).limits.concurrencyLimit>0?(l(),n("span",Ta,r(e(s).limits.concurrencyLimit),1)):(l(),n("span",Ka,i[18]||(i[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Aa,[i[22]||(i[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",La,[m.value?(l(),n("span",Pa,[i[20]||(i[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限制 "+r(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(l(),n("span",Ia,i[21]||(i[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有模型 ",-1)])))])]),t("div",Ma,[t("div",Da,[i[25]||(i[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",qa,[y.value?(l(),n("span",ja,[i[23]||(i[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限 "+r(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(l(),n("span",Ua,i[24]||(i[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有客户端 ",-1)])))])]),y.value?(l(),n("div",Ra,[(l(!0),n(Z,null,tt(e(s).restrictions.allowedClients,I=>(l(),n("span",{key:I,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[i[26]||(i[26]=t("i",{class:"fas fa-id-badge"},null,-1)),b(" "+r(I),1)]))),128))])):K("",!0)])])]))]),m.value?(l(),n("div",Na,[i[30]||(i[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),b(" 详细限制信息 ")],-1)),t("div",Oa,[i[28]||(i[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),b(" 受限模型列表 ")],-1)),t("div",Ea,[(l(!0),n(Z,null,tt(e(s).restrictions.restrictedModels,I=>(l(),n("div",{key:I,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[i[27]||(i[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Fa,r(I),1)]))),128))]),i[29]||(i[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):K("",!0)]))}},Ba=st(Wa,[["__scopeId","data-v-9bba2ba4"]]),Va={class:"card h-full p-4 md:p-6"},za={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ja={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ya={key:0,class:"space-y-2 md:space-y-3"},Ha={class:"mb-1 flex items-center justify-between text-sm"},Ga={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Qa={class:"text-xs text-gray-600 dark:text-gray-400"},Xa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Za={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},tr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},er={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},sr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},ar={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},rr={__name:"AggregatedStatsCard",setup(N){const v=at(),{aggregatedStats:s,individualStats:p,statsPeriod:d,multiKeyMode:x}=et(v),m=w=>w?d.value==="daily"?w.dailyUsage||w.usage:w.monthlyUsage||w.usage:null,y=j(()=>!p.value||p.value.length===0?[]:[...p.value].sort((w,h)=>{const u=m(w),i=m(h);return((i==null?void 0:i.cost)||0)-((u==null?void 0:u.cost)||0)}).slice(0,5)),_=j(()=>p.value?Math.max(0,p.value.length-5):0),A=j(()=>{var i,I;if(!p.value||!s.value)return 0;const w=y.value.reduce((E,H)=>{const V=m(H);return E+((V==null?void 0:V.cost)||0)},0),h=d.value==="daily"?((i=s.value.dailyUsage)==null?void 0:i.cost)||0:((I=s.value.monthlyUsage)==null?void 0:I.cost)||0;if(h===0)return 0;const u=h-w;return Math.max(0,Math.round(u/h*100))}),f=w=>{var I,E;if(!s.value)return 0;const h=d.value==="daily"?((I=s.value.dailyUsage)==null?void 0:I.cost)||0:((E=s.value.monthlyUsage)==null?void 0:E.cost)||0;if(h===0)return 0;const u=m(w),i=((u==null?void 0:u.cost)||0)/h*100;return Math.round(i)},T=w=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][w]||"bg-gray-400",O=w=>(typeof w!="number"&&(w=parseInt(w)||0),w===0?"0":w>=1e6?(w/1e6).toFixed(1)+"M":w>=1e3?(w/1e3).toFixed(1)+"K":w.toLocaleString());return(w,h)=>(l(),n("div",Va,[t("h3",za,[h[0]||(h[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),b(" 使用占比 ")],-1)),t("span",Ja,"("+r(e(d)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(p).length>0?(l(),n("div",Ya,[(l(!0),n(Z,null,tt(y.value,(u,i)=>{var I,E;return l(),n("div",{key:u.apiId,class:"relative"},[t("div",Ha,[t("span",Ga,r(u.name||`Key ${i+1}`),1),t("span",Qa,r(f(u))+"% ",1)]),t("div",Xa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T(i)]),style:lt({width:f(u)+"%"})},null,6)]),t("div",Za,[t("span",null,r(O(((I=m(u))==null?void 0:I.requests)||0))+"次",1),t("span",null,r(((E=m(u))==null?void 0:E.formattedCost)||"$0.00"),1)])])}),128)),_.value>0?(l(),n("div",tr,[t("div",er,[t("span",null,"其他 "+r(_.value)+" 个Keys",1),t("span",null,r(A.value)+"%",1)])])):K("",!0)])):e(x)?(l(),n("div",ar,h[2]||(h[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),b(" 暂无数据 ",-1)]))):(l(),n("div",sr,h[1]||(h[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},lr=st(rr,[["__scopeId","data-v-39572a8e"]]),ir={class:"card p-4 md:p-6"},or={class:"mb-4 md:mb-6"},nr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},dr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},ur={key:0,class:"py-6 text-center md:py-8"},cr={key:1,class:"space-y-3 md:space-y-4"},mr={class:"mb-2 flex items-start justify-between md:mb-3"},gr={class:"min-w-0 flex-1"},xr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},fr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},yr={class:"ml-3 flex-shrink-0 text-right"},pr={class:"text-base font-bold text-green-600 md:text-lg"},vr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},br={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},kr={class:"font-medium text-gray-900 dark:text-gray-100"},hr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},_r={class:"font-medium text-gray-900 dark:text-gray-100"},wr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},$r={class:"font-medium text-gray-900 dark:text-gray-100"},Sr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Cr={class:"font-medium text-gray-900 dark:text-gray-100"},Tr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Kr={class:"text-sm md:text-base"},Ar={__name:"ModelUsageStats",setup(N){const v=at(),{statsPeriod:s,modelStats:p,modelStatsLoading:d}=et(v),x=m=>(typeof m!="number"&&(m=parseInt(m)||0),m===0?"0":m>=1e6?(m/1e6).toFixed(1)+"M":m>=1e3?(m/1e3).toFixed(1)+"K":m.toLocaleString());return(m,y)=>(l(),n("div",ir,[t("div",or,[t("h3",nr,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),b(" 模型使用统计 ")],-1)),t("span",dr,"("+r(e(s)==="daily"?"今日":"本月")+")",1)])]),e(d)?(l(),n("div",ur,y[1]||(y[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(p).length>0?(l(),n("div",cr,[(l(!0),n(Z,null,tt(e(p),(_,A)=>{var f;return l(),n("div",{key:A,class:"model-usage-item"},[t("div",mr,[t("div",gr,[t("h4",xr,r(_.model),1),t("p",fr,r(_.requests)+" 次请求 ",1)]),t("div",yr,[t("div",pr,r(((f=_.formatted)==null?void 0:f.total)||"$0.000000"),1),y[2]||(y[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",vr,[t("div",br,[y[3]||(y[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",kr,r(x(_.inputTokens)),1)]),t("div",hr,[y[4]||(y[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",_r,r(x(_.outputTokens)),1)]),t("div",wr,[y[5]||(y[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",$r,r(x(_.cacheCreateTokens)),1)]),t("div",Sr,[y[6]||(y[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Cr,r(x(_.cacheReadTokens)),1)])])])}),128))])):(l(),n("div",Tr,[y[7]||(y[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Kr," 暂无"+r(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Lr=st(Ar,[["__scopeId","data-v-b3b8dc5f"]]),Pr={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ir={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Mr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Dr={class:"flex items-center gap-3"},qr={class:"text-xs text-gray-500 dark:text-gray-400"},jr=["disabled"],Ur={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Rr={class:"mb-4"},Nr={class:"relative"},Or=["value"],Er={class:"mb-4 space-y-2"},Fr={class:"flex items-center justify-between text-sm"},Wr={class:"font-medium text-gray-700 dark:text-gray-300"},Br={class:"flex items-center gap-3"},Vr={class:"text-xs text-gray-500 dark:text-gray-400"},zr={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Jr={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Yr={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Hr={class:"max-h-40 overflow-y-auto p-3"},Gr={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Qr={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Xr={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Zr={key:2,class:"text-sm text-red-600 dark:text-red-400"},tl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},el={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},sl=["disabled"],al=["disabled"],rl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(N,{emit:v}){const s=N,p=v,d=M("idle"),x=M(""),m=M(""),y=M(0),_=M(null),A=M(null),f=M("claude-sonnet-4-5-20250929"),T=j(()=>s.apiKeyName||"当前 API Key"),O=j(()=>{const D=s.apiKeyValue;return D?D.length<=10?"****":D.substring(0,6)+"****"+D.substring(D.length-4):""}),w=j(()=>{switch(d.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),h=j(()=>{switch(d.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return m.value||"无法通过 API Key 访问服务";default:return""}}),u=j(()=>{switch(d.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),i=j(()=>{switch(d.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),I=j(()=>{switch(d.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),E=j(()=>{switch(d.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),H=j(()=>{switch(d.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function V(){if(!s.apiKeyValue)return;d.value="testing",x.value="",m.value="",y.value=0,_.value=Date.now(),A.value&&A.value.abort(),A.value=new AbortController;const D=`${wt}/apiStats/api-key/test`;try{const $=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:f.value}),signal:A.value.signal});if(!$.ok){const z=await $.json().catch(()=>({}));throw new Error(z.message||z.error||`HTTP ${$.status}`)}const U=$.body.getReader(),S=new TextDecoder;let G=!1;for(;!G;){const{done:z,value:Y}=await U.read();if(z){G=!0;continue}const o=S.decode(Y).split(` -`);for(const a of o)if(a.startsWith("data: "))try{const g=JSON.parse(a.substring(6));W(g)}catch{}}}catch($){if($.name==="AbortError")return;d.value="error",m.value=$.message||"连接失败",y.value=Date.now()-_.value}}function W(D){switch(D.type){case"test_start":break;case"content":x.value+=D.text;break;case"message_stop":break;case"test_complete":y.value=Date.now()-_.value,D.success?d.value="success":(d.value="error",m.value=D.error||"测试失败");break;case"error":d.value="error",m.value=D.error||"未知错误",y.value=Date.now()-_.value;break}}function B(){d.value!=="testing"&&(A.value&&(A.value.abort(),A.value=null),d.value="idle",x.value="",m.value="",y.value=0,p("close"))}return ft(()=>s.show,D=>{D&&(d.value="idle",x.value="",m.value="",y.value=0)}),yt(()=>{A.value&&A.value.abort()}),(D,$)=>(l(),ot(bt,{to:"body"},[N.show?(l(),n("div",Pr,[t("div",{class:"absolute inset-0",onClick:B}),t("div",Ir,[t("div",Mr,[t("div",Dr,[t("div",{class:P(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",d.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":d.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:P(["fas",d.value==="idle"?"fa-vial":d.value==="testing"?"fa-spinner fa-spin":d.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[$[0]||($[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",qr,r(T.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:d.value==="testing",onClick:B},$[1]||($[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,jr)]),t("div",Ur,[t("div",Rr,[$[3]||($[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Nr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:O.value},null,8,Or),$[2]||($[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),$[4]||($[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",Er,[$[6]||($[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),b(" /api/v1/messages ")])],-1)),t("div",Fr,[$[5]||($[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",Wr,r(f.value),1)]),$[7]||($[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:P(["mb-4 rounded-xl border p-4 transition-all duration-300",u.value])},[t("div",Br,[t("div",{class:P(["flex h-8 w-8 items-center justify-center rounded-lg",i.value])},[t("i",{class:P(["fas text-sm",I.value,E.value])},null,2)],2),t("div",null,[t("p",{class:P(["font-medium",H.value])},r(w.value),3),t("p",Vr,r(h.value),1)])])],2),d.value!=="idle"?(l(),n("div",zr,[t("div",Jr,[$[8]||($[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(l(),n("span",Yr,r(x.value.length)+" 字符 ",1)):K("",!0)]),t("div",Hr,[x.value?(l(),n("p",Gr,[b(r(x.value)+" ",1),d.value==="testing"?(l(),n("span",Qr)):K("",!0)])):d.value==="testing"?(l(),n("p",Xr,$[9]||($[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),b(" 等待响应中... ",-1)]))):d.value==="error"&&m.value?(l(),n("p",Zr,r(m.value),1)):K("",!0)])])):K("",!0),y.value>0?(l(),n("div",tl,[$[10]||($[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+r((y.value/1e3).toFixed(2))+" 秒",1)])):K("",!0)]),t("div",el,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:d.value==="testing",onClick:B}," 关闭 ",8,sl),t("button",{class:P(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",d.value==="testing"||!N.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:d.value==="testing"||!N.apiKeyValue,onClick:V},[t("i",{class:P(["fas",d.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),b(" "+r(d.value==="testing"?"测试中...":d.value==="idle"?"开始测试":"重新测试"),1)],10,al)])])])):K("",!0)]))}},ll={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},il={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},ol={class:"flex items-center gap-2 md:gap-4"},nl={class:"flex items-center"},dl={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ul={class:"mb-6 md:mb-8"},cl={class:"flex justify-center"},ml={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},gl={key:0,class:"tab-content"},xl={key:0,class:"mb-6 md:mb-8"},fl={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},yl={key:1,class:"fade-in"},pl={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},vl={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},bl={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},kl={class:"flex w-full items-center gap-2 md:w-auto"},hl=["disabled"],_l=["disabled"],wl=["disabled"],$l={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},Sl={key:1,class:"tab-content"},Cl={class:"glass-strong rounded-3xl shadow-xl"},Tl={__name:"ApiStatsView",setup(N){const v=ht(),s=at(),p=$t(),d=M("stats"),x=j(()=>p.isDarkMode),{apiKey:m,apiId:y,loading:_,modelStatsLoading:A,oemLoading:f,error:T,statsPeriod:O,statsData:w,oemSettings:h,multiKeyMode:u}=et(s),{queryStats:i,switchPeriod:I,loadStatsWithApiId:E,loadOemSettings:H,reset:V}=s,W=M(!1),B=()=>{W.value=!0},D=()=>{W.value=!1},$=U=>{(U.ctrlKey||U.metaKey)&&U.key==="Enter"&&(!_.value&&m.value.trim()&&i(),U.preventDefault()),U.key==="Escape"&&V()};return kt(()=>{p.initTheme(),H();const U=v.query.apiId,S=v.query.apiKey;U&&U.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(y.value=U,E()):S&&S.length>10&&(m.value=S),document.addEventListener("keydown",$)}),yt(()=>{document.removeEventListener("keydown",$)}),ft(m,U=>{U||s.clearData()}),(U,S)=>{var z;const G=_t("router-link");return l(),n("div",{class:P(["min-h-screen p-4 md:p-6",x.value?"gradient-bg-dark":"gradient-bg"])},[t("div",ll,[t("div",il,[X(St,{loading:e(f),"logo-src":e(h).siteIconData||e(h).siteIcon,subtitle:d.value==="stats"?"API Key 使用统计":"使用教程",title:e(h).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",ol,[t("div",nl,[X(Ct,{mode:"dropdown"})]),e(h).ldapEnabled||e(h).showAdminButton!==!1?(l(),n("div",dl)):K("",!0),e(h).ldapEnabled?(l(),ot(G,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:xt(()=>S[4]||(S[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):K("",!0),e(h).showAdminButton!==!1?(l(),ot(G,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:xt(()=>S[5]||(S[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):K("",!0)])])]),t("div",ul,[t("div",cl,[t("div",ml,[t("button",{class:P(["tab-pill-button",d.value==="stats"?"active":""]),onClick:S[0]||(S[0]=Y=>d.value="stats")},S[6]||(S[6]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:P(["tab-pill-button",d.value==="tutorial"?"active":""]),onClick:S[1]||(S[1]=Y=>d.value="tutorial")},S[7]||(S[7]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),d.value==="stats"?(l(),n("div",gl,[X(Gt),e(T)?(l(),n("div",xl,[t("div",fl,[S[8]||(S[8]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),b(" "+r(e(T)),1)])])):K("",!0),e(w)?(l(),n("div",yl,[t("div",pl,[t("div",vl,[t("div",bl,[S[12]||(S[12]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",kl,[t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="daily"}]]),disabled:e(_)||e(A),onClick:S[2]||(S[2]=Y=>e(I)("daily"))},S[9]||(S[9]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),b(" 今日 ",-1)]),10,hl),t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="monthly"}]]),disabled:e(_)||e(A),onClick:S[3]||(S[3]=Y=>e(I)("monthly"))},S[10]||(S[10]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),b(" 本月 ",-1)]),10,_l),e(u)?K("",!0):(l(),n("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(_),onClick:B},S[11]||(S[11]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),b(" 测试 ",-1)]),8,wl))])])]),X(fs),t("div",$l,[X(Ms,{class:"h-full"}),e(u)?(l(),ot(lr,{key:0,class:"h-full"})):(l(),ot(Ba,{key:1,class:"h-full"}))]),X(Lr)])])):K("",!0)])):K("",!0),d.value==="tutorial"?(l(),n("div",Sl,[t("div",Cl,[X(At)])])):K("",!0),X(rl,{"api-key-name":((z=e(w))==null?void 0:z.name)||"","api-key-value":e(m),show:W.value,onClose:D},null,8,["api-key-name","api-key-value","show"])],2)}}},jl=st(Tl,[["__scopeId","data-v-c1f23841"]]);export{jl as default}; diff --git a/assets/ApiStatsView-C428m7c6.js b/assets/ApiStatsView-C428m7c6.js new file mode 100644 index 00000000..a7de56df --- /dev/null +++ b/assets/ApiStatsView-C428m7c6.js @@ -0,0 +1,6 @@ +import{aP as bt,r as N,c as U,aX as at,x as o,y as r,z as t,O as w,L,P as i,u as e,C as O,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as et,B as lt,R as Y,o as xt,V as yt,I as ot,a5 as kt,aZ as ht,a_ as _t,q as wt,aW as $t,J as ft,av as St}from"./vue-vendor-BVUySZOn.js";import{_ as st,A as Ct,u as pt,a as Tt}from"./index-BAse2XU9.js";import{L as Kt}from"./LogoTitle-BKx-1OIz.js";import{T as At}from"./ThemeToggle-Btdau4yo.js";import{b as Pt}from"./vendor-Dr8jvgFu.js";import{_ as Lt}from"./WindowCountdown-Cb_iHkvc.js";import Mt from"./TutorialView-C0wjIk1C.js";import{C as It,a as Dt,b as Ot,P as jt,c as Rt,A as qt,p as Ut,d as Nt,e as Et,i as Ft}from"./chart-ChB167Jv.js";import"./element-plus-CKhypU-Q.js";class Wt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(f,s={}){try{this.isDev&&f.startsWith("/admin")&&(f="/webapi"+f);const k=await fetch(`${this.baseURL}${f}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),u=await k.json();if(!k.ok)throw new Error(u.message||`请求失败: ${k.status}`);return u}catch(k){throw console.error("API Stats request error:",k),k}}async getKeyId(f){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:f})})}async getUserStats(f){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:f})})}async getUserModelStats(f,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:f,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(f){return console.error("Failed to load OEM settings:",f),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(f){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:f})})}async getBatchModelStats(f,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:f,period:s})})}}const tt=new Wt,rt=bt("apistats",()=>{const W=N(""),f=N(null),s=N(!1),k=N(!1),u=N(!0),x=N(""),y=N("daily"),b=N(null),T=N([]),M=N(null),v=N(null),A=N({siteName:"",siteIcon:"",siteIconData:""}),B=N(!1),C=N([]),K=N([]),c=N(null),n=N([]),R=N([]),a=U(()=>{const g={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return B.value&&c.value?y.value==="daily"?c.value.dailyUsage||g:c.value.monthlyUsage||g:y.value==="daily"?M.value||g:v.value||g}),m=U(()=>{if(!b.value||!a.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const g=a.value,$=b.value.limits;return{tokenUsage:$.tokenLimit>0?Math.min(g.allTokens/$.tokenLimit*100,100):0,costUsage:$.dailyCostLimit>0?Math.min(g.cost/$.dailyCostLimit*100,100):0,requestUsage:$.rateLimitRequests>0?Math.min(g.requests/$.rateLimitRequests*100,100):0}});async function D(){if(B.value)return Q();const g=W.value.trim();if(!g){x.value="请输入 API Key";return}if(g.length<10||g.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",b.value=null,T.value=[],f.value=null;try{const $=await tt.getKeyId(g);if($.success){f.value=$.data.id;const q=await tt.getUserStats(f.value);if(q.success)b.value=q.data,await S(),x.value="",h();else throw new Error(q.message||"查询失败")}else throw new Error($.message||"获取 API Key ID 失败")}catch($){console.error("Query stats error:",$),x.value=$.message||"查询统计数据失败,请检查您的 API Key 是否正确",b.value=null,T.value=[],f.value=null}finally{s.value=!1}}async function S(){f.value&&(await Promise.all([j("daily"),j("monthly")]),await P(y.value))}async function j(g){try{const $=await tt.getUserModelStats(f.value,g);if($.success){const q=$.data||[],J={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};q.forEach(E=>{var G;J.requests+=E.requests||0,J.inputTokens+=E.inputTokens||0,J.outputTokens+=E.outputTokens||0,J.cacheCreateTokens+=E.cacheCreateTokens||0,J.cacheReadTokens+=E.cacheReadTokens||0,J.allTokens+=E.allTokens||0,J.cost+=((G=E.costs)==null?void 0:G.total)||0}),J.formattedCost=F(J.cost),g==="daily"?M.value=J:v.value=J}else console.warn(`Failed to load ${g} stats:`,$.message)}catch($){console.error(`Load ${g} stats error:`,$)}}async function P(g="daily"){if(f.value){k.value=!0;try{const $=await tt.getUserModelStats(f.value,g);if($.success)T.value=$.data||[];else throw new Error($.message||"加载模型统计失败")}catch($){console.error("Load model stats error:",$),T.value=[]}finally{k.value=!1}}}async function _(g){if(!(y.value===g||k.value)){if(y.value=g,B.value&&K.value.length>0){await X(g);return}(g==="daily"&&!M.value||g==="monthly"&&!v.value)&&await j(g),await P(g)}}async function z(){var g,$;if(f.value){s.value=!0,x.value="",b.value=null,T.value=[];try{const q=await tt.getUserStats(f.value);if(q.success)b.value=q.data,console.log("API Stats - Full response:",q.data),console.log("API Stats - limits data:",q.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(g=q.data.limits)==null?void 0:g.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",($=q.data.limits)==null?void 0:$.weeklyOpusCost),await S(),x.value="";else throw new Error(q.message||"查询失败")}catch(q){console.error("Load stats with apiId error:",q),x.value=q.message||"查询统计数据失败",b.value=null,T.value=[]}finally{s.value=!1}}}async function H(){u.value=!0;try{const g=await tt.getOemSettings();g&&g.success&&g.data&&(A.value={...A.value,...g.data})}catch(g){console.error("Error loading OEM settings:",g),A.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{u.value=!1}}function F(g){return typeof g!="number"||g===0?"$0.000000":g>=1?"$"+g.toFixed(2):g>=.01?"$"+g.toFixed(4):"$"+g.toFixed(6)}function h(){if(f.value){const g=new URL(window.location);g.searchParams.set("apiId",f.value),window.history.pushState({},"",g)}}async function Q(){const g=d();if(g.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",c.value=null,n.value=[],R.value=[],T.value=[],C.value=g,K.value=[];try{const $=await Promise.allSettled(g.map(G=>tt.getKeyId(G))),q=[],J=[];if($.forEach((G,it)=>{G.status==="fulfilled"&&G.value.success?(q.push(G.value.data.id),J.push(g[it])):R.value.push(g[it])}),q.length===0)throw new Error("所有 API Key 都无效");K.value=q,C.value=J;const E=await tt.getBatchStats(q);if(E.success)c.value=E.data.aggregated,n.value=E.data.individual,b.value=E.data.aggregated,M.value=E.data.aggregated.dailyUsage||null,v.value=E.data.aggregated.monthlyUsage||null,await X(y.value),l();else throw new Error(E.message||"批量查询失败")}catch($){console.error("Batch query error:",$),x.value=$.message||"批量查询统计数据失败",c.value=null,n.value=[]}finally{s.value=!1}}async function X(g="daily"){if(K.value.length!==0){k.value=!0;try{const $=await tt.getBatchModelStats(K.value,g);if($.success)T.value=$.data||[];else throw new Error($.message||"加载批量模型统计失败")}catch($){console.error("Load batch model stats error:",$),T.value=[]}finally{k.value=!1}}}function d(){if(!W.value)return[];const g=W.value.split(/[,\n]+/).map(q=>q.trim()).filter(q=>q.length>=10&&q.length<=512);return[...new Set(g)].slice(0,30)}function l(){if(K.value.length>0){const g=new URL(window.location);g.searchParams.set("apiIds",K.value.join(",")),g.searchParams.set("batch","true"),window.history.pushState({},"",g)}}function p(){W.value=""}function I(){b.value=null,T.value=[],M.value=null,v.value=null,x.value="",y.value="daily",f.value=null,C.value=[],K.value=[],c.value=null,n.value=[],R.value=[]}function V(){W.value="",B.value=!1,I()}return{apiKey:W,apiId:f,loading:s,modelStatsLoading:k,oemLoading:u,error:x,statsPeriod:y,statsData:b,modelStats:T,dailyStats:M,monthlyStats:v,oemSettings:A,multiKeyMode:B,apiKeys:C,apiIds:K,aggregatedStats:c,individualStats:n,invalidKeys:R,currentPeriodData:a,usagePercentages:m,queryStats:D,queryBatchStats:Q,loadAllPeriodStats:S,loadPeriodStats:j,loadModelStats:P,loadBatchModelStats:X,switchPeriod:_,loadStatsWithApiId:z,loadOemSettings:H,clearData:I,clearInput:p,reset:V}}),Bt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},Vt={class:"mx-auto max-w-4xl"},zt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Jt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ht={class:"button-group flex items-center gap-2"},Yt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Gt={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Zt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Qt={class:"lg:col-span-3"},Xt=["disabled"],te={key:1,class:"relative"},ee=["disabled"],se={class:"lg:col-span-1"},ae=["disabled"],re={key:0,class:"fas fa-spinner loading-spinner"},le={key:1,class:"fas fa-search"},ie={class:"security-notice mt-4"},oe={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},ne={__name:"ApiKeyInput",setup(W){const f=rt(),{apiKey:s,loading:k,multiKeyMode:u}=at(f),{queryStats:x,clearInput:y}=f,b=U(()=>{if(!u.value||!s.value)return[];const M=s.value.split(/[,\n]+/).map(A=>A.trim()).filter(A=>A.length>0);return[...new Set(M)].slice(0,30)}),T=U(()=>u.value?b.value.length>0:s.value&&s.value.trim().length>0);return(M,v)=>(r(),o("div",Bt,[v[15]||(v[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),w(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",Vt,[t("div",zt,[t("label",Jt,[v[8]||(v[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),w(" "+i(e(u)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",Ht,[t("div",Yt,[t("button",{class:O(["mode-switch-btn",{active:!e(u)}]),title:"单一模式",onClick:v[0]||(v[0]=A=>u.value=!1)},v[9]||(v[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:O(["mode-switch-btn",{active:e(u)}]),title:"聚合模式",onClick:v[1]||(v[1]=A=>u.value=!0)},[v[10]||(v[10]=t("i",{class:"fas fa-layer-group"},null,-1)),v[11]||(v[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(u)&&b.value.length>0?(r(),o("span",Gt,i(b.value.length),1)):L("",!0)],2)])])]),t("div",Zt,[t("div",Qt,[e(u)?(r(),o("div",te,[ut(t("textarea",{"onUpdate:modelValue":v[4]||(v[4]=A=>gt(s)?s.value=A:null),class:"wide-card-input w-full resize-y",disabled:e(k),placeholder:`请输入您的 API Keys,支持以下格式: +cr_xxx +cr_yyy +或 +cr_xxx, cr_yyy`,rows:"4",onKeyup:v[5]||(v[5]=mt(vt((...A)=>e(x)&&e(x)(...A),["ctrl"]),["enter"]))},null,40,ee),[[ct,e(s)]]),e(s)&&!e(k)?(r(),o("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:v[6]||(v[6]=(...A)=>e(y)&&e(y)(...A))},v[12]||(v[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):L("",!0)])):ut((r(),o("input",{key:0,"onUpdate:modelValue":v[2]||(v[2]=A=>gt(s)?s.value=A:null),class:"wide-card-input w-full",disabled:e(k),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:v[3]||(v[3]=mt((...A)=>e(x)&&e(x)(...A),["enter"]))},null,40,Xt)),[[ct,e(s)]])]),t("div",se,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(k)||!T.value,onClick:v[7]||(v[7]=(...A)=>e(x)&&e(x)(...A))},[e(k)?(r(),o("i",re)):(r(),o("i",le)),w(" "+i(e(k)?"查询中...":"查询统计"),1)],8,ae)])]),t("div",ie,[v[13]||(v[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),w(" "+i(e(u)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(u)?(r(),o("div",oe,v[14]||(v[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):L("",!0)])]))}},de=st(ne,[["__scopeId","data-v-11e74200"]]),ue={class:"space-y-6 md:space-y-8"},ce={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},me={class:"card-section"},ge={class:"section-header"},fe={class:"header-title"},xe={key:0,class:"info-grid"},ye={class:"info-item"},pe={class:"info-value"},be={class:"info-item"},ve={class:"info-value text-green-600 dark:text-emerald-400"},ke={key:0,class:"info-item"},he={class:"info-value text-red-500 dark:text-red-400"},_e={class:"info-item"},we={class:"info-value"},$e={class:"info-item"},Se={class:"info-value"},Ce={class:"info-item"},Te={class:"info-value text-indigo-600 dark:text-indigo-300"},Ke={key:1,class:"info-item xl:col-span-2"},Ae={class:"space-y-2"},Pe={class:"truncate"},Le={class:"font-semibold"},Me={key:1,class:"info-grid"},Ie={class:"info-item"},De={class:"info-value break-all"},Oe={class:"info-item"},je={class:"info-item"},Re={class:"info-value"},qe={class:"info-item"},Ue={class:"info-value break-all"},Ne={class:"info-item xl:col-span-2"},Ee={class:"info-value"},Fe={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},We={key:0,class:"text-red-500 dark:text-red-400"},Be={key:1,class:"text-orange-500 dark:text-orange-400"},Ve={key:2},ze={key:2,class:"text-gray-400 dark:text-gray-500"},Je={class:"card-section"},He={class:"section-header"},Ye={class:"header-tag"},Ge={class:"metric-grid"},Ze={class:"metric-card"},Qe={class:"metric-value text-green-600 dark:text-emerald-300"},Xe={class:"metric-label"},ts={class:"metric-card"},es={class:"metric-value text-blue-600 dark:text-sky-300"},ss={class:"metric-label"},as={class:"metric-card"},rs={class:"metric-value text-purple-600 dark:text-violet-300"},ls={class:"metric-label"},is={class:"metric-card"},os={class:"metric-value text-amber-500 dark:text-amber-300"},ns={class:"metric-label"},ds={key:0,class:"card-section"},us={class:"flex items-center justify-between gap-3"},cs={class:"flex items-center gap-3"},ms={class:"account-name"},gs={class:"account-sub"},fs={key:0,class:"mt-3 space-y-2"},xs={class:"progress-row"},ys={class:"progress-track"},ps={class:"progress-value"},bs={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},vs={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},ks={key:1,class:"mt-3"},hs={key:0,class:"space-y-2"},_s={class:"quota-header"},ws={class:"quota-percent"},$s={class:"progress-track"},Ss={class:"quota-foot"},Cs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},Ts={__name:"StatsOverview",setup(W){const f=rt(),{statsData:s,statsPeriod:k,currentPeriodData:u,multiKeyMode:x,aggregatedStats:y,individualStats:b,invalidKeys:T}=at(f),M=U(()=>!b.value||b.value.length===0?[]:[...b.value].sort((d,l)=>{var p,I;return(((p=l.usage)==null?void 0:p.allTokens)||0)-(((I=d.usage)==null?void 0:I.allTokens)||0)}).slice(0,3)),v=d=>{var p;return!y.value||!y.value.usage.allTokens?0:((((p=d.usage)==null?void 0:p.allTokens)||0)/y.value.usage.allTokens*100).toFixed(1)},A=d=>{if(!d)return"无";try{return Pt(d).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},B=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",C=d=>d?new Date(d){if(!d)return!1;const I=(new Date(d)-new Date)/(1e3*60*60*24);return I>0&&I<=7},c=d=>(typeof d!="number"&&(d=parseInt(d)||0),d===0?"0":d>=1e6?(d/1e6).toFixed(1)+"M":d>=1e3?(d/1e3).toFixed(1)+"K":d.toLocaleString()),n=d=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[d]||d||"未知",R=U(()=>{var p,I;const d=(I=(p=s.value)==null?void 0:p.accounts)==null?void 0:I.details;if(!d)return[];const l=[];return d.claude&&d.claude.accountType==="dedicated"&&l.push({key:"claude",...d.claude}),d.openai&&d.openai.accountType==="dedicated"&&l.push({key:"openai",...d.openai}),l}),a=U(()=>{const d=R.value.length;return d<=1?"md:grid-cols-1 lg:grid-cols-1":d===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),m=d=>d?d.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",D=d=>{if(!d||d<=0)return"";const l=Math.floor(d),p=Math.floor(l/1440),I=Math.floor(l%1440/60),V=l%60;return p>0?I>0?`${p}天${I}小时`:`${p}天`:I>0?V>0?`${I}小时${V}分钟`:`${I}小时`:`${V}分钟`},S=d=>{if(!d)return{text:"状态未知",class:"text-gray-400"};if(d.isRateLimited){const l=D(d.minutesRemaining);return{text:`限流中${l?` · 剩余约 ${l}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},j=(d,l)=>{if(!d||!l)return"暂无时间窗口信息";const p=new Date(d),I=new Date(l),V=g=>`${`${g.getHours()}`.padStart(2,"0")}:${`${g.getMinutes()}`.padStart(2,"0")}`;return`${V(p)} - ${V(I)}`},P=d=>{if(!d||d<=0)return"";const l=Math.floor(d/60),p=d%60;return l>0?`${l}小时${p}分钟`:`${p}分钟`},_=(d,l)=>{var I;if(!d)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((I=l==null?void 0:l.rateLimitStatus)!=null&&I.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const p=String(d).toLowerCase();return p==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":p==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},z=d=>{if(!d)return null;const l=typeof d.usedPercent=="number"&&!Number.isNaN(d.usedPercent)?d.usedPercent:null,p=typeof d.resetAfterSeconds=="number"&&!Number.isNaN(d.resetAfterSeconds)?d.resetAfterSeconds:null,I=typeof d.remainingSeconds=="number"?d.remainingSeconds:null,V=d.resetAt?Date.parse(d.resetAt):null;return p!==null&&(I!==null&&I<=0||V!==null&&!Number.isNaN(V)&&Date.now()>=V)?0:l===null?null:Math.max(0,Math.min(100,l))},H=d=>{const l=z(d);return l===null?"bg-gradient-to-r from-gray-300 to-gray-400":l>=90?"bg-gradient-to-r from-red-500 to-red-600":l>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},F=d=>{const l=z(d);return l===null?"0%":`${l}%`},h=d=>{const l=z(d);return l===null?"--":`${l.toFixed(1)}%`},Q=d=>{if(!d)return"--";let l=d.remainingSeconds;if(l==null&&(l=d.resetAfterSeconds),l==null||Number.isNaN(Number(l)))return"--";l=Math.max(0,Math.floor(Number(l)));const p=Math.floor(l/86400),I=Math.floor(l%86400/3600),V=Math.floor(l%3600/60),g=l%60;return p>0?I>0?`${p}天${I}小时`:`${p}天`:I>0?V>0?`${I}小时${V}分钟`:`${I}小时`:V>0?`${V}分钟`:`${g}秒`},X=d=>d==="secondary"?"周限":"5h";return(d,l)=>(r(),o("div",ue,[t("div",ce,[t("div",me,[t("header",ge,[t("i",{class:O(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",fe,i(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(y)?(r(),o("div",xe,[t("div",ye,[l[0]||(l[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",pe,i(e(y).totalKeys)+" 个",1)]),t("div",be,[l[2]||(l[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ve,[l[1]||(l[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),w(i(e(y).activeKeys)+" 个 ",1)])]),e(T).length>0?(r(),o("div",ke,[l[4]||(l[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",he,[l[3]||(l[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),w(i(e(T).length)+" 个 ",1)])])):L("",!0),t("div",_e,[l[5]||(l[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",we,i(c(e(y).usage.requests)),1)]),t("div",$e,[l[6]||(l[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",Se,i(c(e(y).usage.allTokens)),1)]),t("div",Ce,[l[7]||(l[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",Te,i(e(y).usage.formattedCost),1)]),e(b).length>1?(r(),o("div",Ke,[l[8]||(l[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",Ae,[(r(!0),o(Z,null,et(M.value,p=>(r(),o("div",{key:p.apiId,class:"contributor-item"},[t("span",Pe,i(p.name),1),t("span",Le,i(v(p))+"%",1)]))),128))])])):L("",!0)])):(r(),o("div",Me,[t("div",Ie,[l[9]||(l[9]=t("p",{class:"info-label"},"名称",-1)),t("p",De,i(e(s).name),1)]),t("div",Oe,[l[10]||(l[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:O(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:O(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),w(" "+i(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",je,[l[11]||(l[11]=t("p",{class:"info-label"},"权限",-1)),t("p",Re,i(n(e(s).permissions)),1)]),t("div",qe,[l[12]||(l[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ue,i(A(e(s).createdAt)),1)]),t("div",Ne,[l[17]||(l[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ee,[e(s).expirationMode==="activation"&&!e(s).isActivated?(r(),o(Z,{key:0},[l[13]||(l[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),w("未激活 ")],-1)),t("span",Fe," 首次使用后 "+i(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+i(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(r(),o(Z,{key:1},[C(e(s).expiresAt)?(r(),o("span",We,l[14]||(l[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),w("已过期 ",-1)]))):K(e(s).expiresAt)?(r(),o("span",Be,[l[15]||(l[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),w(i(B(e(s).expiresAt)),1)])):(r(),o("span",Ve,i(B(e(s).expiresAt)),1))],64)):(r(),o("span",ze,l[16]||(l[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),w("永不过期 ",-1)])))])])]))]),t("div",Je,[t("header",He,[l[18]||(l[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),l[19]||(l[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",Ye,i(e(k)==="daily"?"今日":"本月"),1)]),t("div",Ge,[t("div",Ze,[t("p",Qe,i(c(e(u).requests)),1),t("p",Xe,i(e(k)==="daily"?"今日":"本月")+"请求数",1)]),t("div",ts,[t("p",es,i(c(e(u).allTokens)),1),t("p",ss,i(e(k)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",as,[t("p",rs,i(e(u).formattedCost||"$0.000000"),1),t("p",ls,i(e(k)==="daily"?"今日":"本月")+"费用",1)]),t("div",is,[t("p",os,i(c(e(u).inputTokens)),1),t("p",ns,i(e(k)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&R.value.length>0?(r(),o("div",ds,[l[21]||(l[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:O(["grid grid-cols-1 gap-4",a.value])},[(r(!0),o(Z,null,et(R.value,p=>{var I,V,g,$,q,J;return r(),o("div",{key:p.id||p.key,class:"account-card"},[t("div",us,[t("div",cs,[t("span",{class:O(["account-icon",p.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:O(p.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",ms,i(m(p)),1),t("p",gs,i(p.platform==="claude"?"会话窗口":"额度窗口"),1)])]),S(p.rateLimitStatus)?(r(),o("div",{key:0,class:O(["rate-badge",S(p.rateLimitStatus).class])},[l[20]||(l[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),w(" "+i(S(p.rateLimitStatus).text),1)],2)):L("",!0)]),p.platform==="claude"?(r(),o("div",fs,[t("div",xs,[t("div",ys,[t("div",{class:O(["progress-bar",_((I=p.sessionWindow)==null?void 0:I.sessionWindowStatus,p)]),style:lt({width:`${Math.min(100,Math.max(0,((V=p.sessionWindow)==null?void 0:V.progress)||0))}%`})},null,6)]),t("span",ps,i(Math.min(100,Math.max(0,Math.round(((g=p.sessionWindow)==null?void 0:g.progress)||0))))+"% ",1)]),t("div",bs,[t("span",null,i(j(($=p.sessionWindow)==null?void 0:$.windowStart,(q=p.sessionWindow)==null?void 0:q.windowEnd)),1),((J=p.sessionWindow)==null?void 0:J.remainingTime)>0?(r(),o("span",vs," 剩余 "+i(P(p.sessionWindow.remainingTime)),1)):L("",!0)])])):p.platform==="openai"?(r(),o("div",ks,[p.codexUsage?(r(),o("div",hs,[(r(),o(Z,null,et(["primary","secondary"],E=>{var G,it,nt,dt;return t("div",{key:`${p.key}-${E}`,class:"quota-row"},[t("div",_s,[t("span",{class:O(["quota-tag",E==="primary"?"tag-indigo":"tag-blue"])},i(X(E)),3),t("span",ws,i(h((G=p.codexUsage)==null?void 0:G[E])),1)]),t("div",$s,[t("div",{class:O(["progress-bar",H((it=p.codexUsage)==null?void 0:it[E])]),style:lt({width:F((nt=p.codexUsage)==null?void 0:nt[E])})},null,6)]),t("div",Ss," 重置剩余 "+i(Q((dt=p.codexUsage)==null?void 0:dt[E])),1)])}),64))])):(r(),o("p",Cs," 暂无额度使用数据 "))])):L("",!0)])}),128))],2)])):L("",!0)]))}},Ks=st(Ts,[["__scopeId","data-v-b72df2cd"]]),As={class:"card p-4 md:p-6"},Ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ls={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ms={class:"space-y-2 md:space-y-3"},Is={class:"flex items-center justify-between"},Ds={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Os={class:"flex items-center justify-between"},js={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Rs={class:"flex items-center justify-between"},qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Us={class:"flex items-center justify-between"},Ns={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Es={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},Fs={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ws={class:"text-sm md:text-base"},Bs={class:"text-lg md:text-xl"},Vs={__name:"TokenDistribution",setup(W){const f=rt(),{statsPeriod:s,currentPeriodData:k}=at(f),u=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,y)=>(r(),o("div",As,[t("h3",Ps,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),w(" Token 使用分布 ")],-1)),t("span",Ls,"("+i(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",Ms,[t("div",Is,[y[1]||(y[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),w(" 输入 Token ")],-1)),t("span",Ds,i(u(e(k).inputTokens)),1)]),t("div",Os,[y[2]||(y[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),w(" 输出 Token ")],-1)),t("span",js,i(u(e(k).outputTokens)),1)]),t("div",Rs,[y[3]||(y[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),w(" 缓存创建 Token ")],-1)),t("span",qs,i(u(e(k).cacheCreateTokens)),1)]),t("div",Us,[y[4]||(y[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),w(" 缓存读取 Token ")],-1)),t("span",Ns,i(u(e(k).cacheReadTokens)),1)])]),t("div",Es,[t("div",Fs,[t("span",Ws,i(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Bs,i(u(e(k).allTokens)),1)])])]))}},zs=st(Vs,[["__scopeId","data-v-d9e5c1dd"]]),Js={class:"flex h-full flex-col gap-4 md:gap-6"},Hs={class:"card flex h-full flex-col p-4 md:p-6"},Ys={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Gs={key:0,class:"space-y-4"},Zs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Qs={class:"mb-3 flex items-center justify-between"},Xs={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},ta={class:"grid grid-cols-2 gap-3"},ea={class:"text-center"},sa={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},aa={class:"text-center"},ra={class:"text-lg font-bold text-green-600"},la={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},ia={class:"space-y-2"},oa={class:"flex items-center justify-between"},na={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},da={class:"flex items-center justify-between"},ua={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ca={class:"flex items-center justify-between"},ma={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ga={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},fa={class:"text-red-700 dark:text-red-300"},xa={key:1,class:"space-y-4 md:space-y-5"},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ba={key:0},va={key:1,class:"flex items-center gap-1"},ka={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ha={key:1,class:"h-2 w-full rounded-full bg-gray-200"},_a={class:"mb-2 flex items-center justify-between"},wa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},$a={key:0},Sa={key:1,class:"flex items-center gap-1"},Ca={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ta={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Ka={key:0},Aa={class:"mb-2 flex items-center justify-between"},Pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},La={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ma={key:1},Ia={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Da={key:0},Oa={key:1},ja={key:2},Ra={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},qa={class:"flex items-center justify-between"},Ua={class:"text-sm font-medium text-gray-900 md:text-base"},Na={key:0},Ea={key:1,class:"flex items-center gap-1"},Fa={class:"flex items-center justify-between"},Wa={class:"text-sm font-medium text-gray-900 md:text-base"},Ba={key:0,class:"text-orange-600"},Va={key:1,class:"text-green-600"},za={class:"space-y-2"},Ja={class:"flex items-center justify-between"},Ha={class:"text-sm font-medium text-gray-900 md:text-base"},Ya={key:0,class:"text-orange-600"},Ga={key:1,class:"text-green-600"},Za={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Qa={key:0,class:"card !overflow-visible p-4 md:p-6"},Xa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},tr={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},er={class:"break-all text-gray-800 dark:text-gray-200"},sr={__name:"LimitConfig",setup(W){const f=rt(),{statsData:s,multiKeyMode:k,aggregatedStats:u,invalidKeys:x}=at(f),y=U(()=>{var n;const c=(n=s.value)==null?void 0:n.restrictions;return c?c.enableModelRestriction===!0&&Array.isArray(c.restrictedModels)&&c.restrictedModels.length>0:!1}),b=U(()=>{var n;const c=(n=s.value)==null?void 0:n.restrictions;return c?c.enableClientRestriction===!0&&Array.isArray(c.allowedClients)&&c.allowedClients.length>0:!1}),T=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const c=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(c,100)},M=()=>{const c=T();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"},v=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const c=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(c,100)},A=()=>{const c=v();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-blue-500"},B=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const c=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(c,100)},C=()=>{const c=B();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-indigo-500"},K=c=>(typeof c!="number"&&(c=parseInt(c)||0),c===0?"0":c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toLocaleString());return(c,n)=>(r(),o("div",Js,[t("div",Hs,[t("h3",Ys,[n[0]||(n[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),w(" "+i(e(k)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(k)&&e(u)?(r(),o("div",Gs,[t("div",Zs,[t("div",Qs,[n[1]||(n[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),w(" API Keys 概况 ")],-1)),t("span",Xs,i(e(u).activeKeys)+"/"+i(e(u).totalKeys),1)]),t("div",ta,[t("div",ea,[t("div",sa,i(e(u).totalKeys),1),n[2]||(n[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",aa,[t("div",ra,i(e(u).activeKeys),1),n[3]||(n[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",la,[n[7]||(n[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",ia,[t("div",oa,[n[4]||(n[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),w(" 总请求数 ")],-1)),t("span",na,i(K(e(u).usage.requests)),1)]),t("div",da,[n[5]||(n[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),w(" 总 Tokens ")],-1)),t("span",ua,i(K(e(u).usage.allTokens)),1)]),t("div",ca,[n[6]||(n[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),w(" 总费用 ")],-1)),t("span",ma,i(e(u).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(r(),o("div",ga,[n[8]||(n[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",fa,i(e(x).length)+" 个无效的 API Key ",1)])):L("",!0),n[9]||(n[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),w(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):L("",!0),e(k)?L("",!0):(r(),o("div",xa,[t("div",null,[t("div",ya,[n[11]||(n[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",pa,[e(s).limits.dailyCostLimit>0?(r(),o("span",ba," $"+i(e(s).limits.currentDailyCost.toFixed(4))+" / $"+i(e(s).limits.dailyCostLimit.toFixed(2)),1)):(r(),o("span",va,[w(" $"+i(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),n[10]||(n[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(r(),o("div",ka,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",M()]),style:lt({width:T()+"%"})},null,6)])):(r(),o("div",ha,n[12]||(n[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",_a,[n[14]||(n[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",wa,[e(s).limits.totalCostLimit>0?(r(),o("span",$a," $"+i(e(s).limits.currentTotalCost.toFixed(4))+" / $"+i(e(s).limits.totalCostLimit.toFixed(2)),1)):(r(),o("span",Sa,[w(" $"+i(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),n[13]||(n[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(r(),o("div",Ca,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:v()+"%"})},null,6)])):(r(),o("div",Ta,n[15]||(n[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(r(),o("div",Ka,[t("div",Aa,[n[16]||(n[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Opus 模型周费用限制",-1)),t("span",Pa," $"+i(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+i(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",La,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",C()]),style:lt({width:B()+"%"})},null,6)])])):L("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(r(),o("div",Ma,[Y(Lt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",Ia,[n[17]||(n[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(r(),o("span",Da,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(r(),o("span",Oa,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(r(),o("span",ja," 仅限制请求次数 "))])])):L("",!0),t("div",Ra,[t("div",qa,[n[19]||(n[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ua,[e(s).limits.concurrencyLimit>0?(r(),o("span",Na,i(e(s).limits.concurrencyLimit),1)):(r(),o("span",Ea,n[18]||(n[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Fa,[n[22]||(n[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",Wa,[y.value?(r(),o("span",Ba,[n[20]||(n[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),w(" 限制 "+i(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(r(),o("span",Va,n[21]||(n[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),w(" 允许所有模型 ",-1)])))])]),t("div",za,[t("div",Ja,[n[25]||(n[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",Ha,[b.value?(r(),o("span",Ya,[n[23]||(n[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),w(" 限 "+i(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(r(),o("span",Ga,n[24]||(n[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),w(" 允许所有客户端 ",-1)])))])]),b.value?(r(),o("div",Za,[(r(!0),o(Z,null,et(e(s).restrictions.allowedClients,R=>(r(),o("span",{key:R,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[n[26]||(n[26]=t("i",{class:"fas fa-id-badge"},null,-1)),w(" "+i(R),1)]))),128))])):L("",!0)])])]))]),y.value?(r(),o("div",Qa,[n[30]||(n[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),w(" 详细限制信息 ")],-1)),t("div",Xa,[n[28]||(n[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),w(" 受限模型列表 ")],-1)),t("div",tr,[(r(!0),o(Z,null,et(e(s).restrictions.restrictedModels,R=>(r(),o("div",{key:R,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[n[27]||(n[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",er,i(R),1)]))),128))]),n[29]||(n[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),w(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):L("",!0)]))}},ar=st(sr,[["__scopeId","data-v-9bba2ba4"]]),rr={class:"card h-full p-4 md:p-6"},lr={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},ir={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},or={key:0,class:"space-y-2 md:space-y-3"},nr={class:"mb-1 flex items-center justify-between text-sm"},dr={class:"truncate font-medium text-gray-700 dark:text-gray-300"},ur={class:"text-xs text-gray-600 dark:text-gray-400"},cr={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},mr={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},gr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},fr={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},xr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},yr={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},pr={__name:"AggregatedStatsCard",setup(W){const f=rt(),{aggregatedStats:s,individualStats:k,statsPeriod:u,multiKeyMode:x}=at(f),y=C=>C?u.value==="daily"?C.dailyUsage||C.usage:C.monthlyUsage||C.usage:null,b=U(()=>!k.value||k.value.length===0?[]:[...k.value].sort((C,K)=>{const c=y(C),n=y(K);return((n==null?void 0:n.cost)||0)-((c==null?void 0:c.cost)||0)}).slice(0,5)),T=U(()=>k.value?Math.max(0,k.value.length-5):0),M=U(()=>{var n,R;if(!k.value||!s.value)return 0;const C=b.value.reduce((a,m)=>{const D=y(m);return a+((D==null?void 0:D.cost)||0)},0),K=u.value==="daily"?((n=s.value.dailyUsage)==null?void 0:n.cost)||0:((R=s.value.monthlyUsage)==null?void 0:R.cost)||0;if(K===0)return 0;const c=K-C;return Math.max(0,Math.round(c/K*100))}),v=C=>{var R,a;if(!s.value)return 0;const K=u.value==="daily"?((R=s.value.dailyUsage)==null?void 0:R.cost)||0:((a=s.value.monthlyUsage)==null?void 0:a.cost)||0;if(K===0)return 0;const c=y(C),n=((c==null?void 0:c.cost)||0)/K*100;return Math.round(n)},A=C=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][C]||"bg-gray-400",B=C=>(typeof C!="number"&&(C=parseInt(C)||0),C===0?"0":C>=1e6?(C/1e6).toFixed(1)+"M":C>=1e3?(C/1e3).toFixed(1)+"K":C.toLocaleString());return(C,K)=>(r(),o("div",rr,[t("h3",lr,[K[0]||(K[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),w(" 使用占比 ")],-1)),t("span",ir,"("+i(e(u)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(k).length>0?(r(),o("div",or,[(r(!0),o(Z,null,et(b.value,(c,n)=>{var R,a;return r(),o("div",{key:c.apiId,class:"relative"},[t("div",nr,[t("span",dr,i(c.name||`Key ${n+1}`),1),t("span",ur,i(v(c))+"% ",1)]),t("div",cr,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",A(n)]),style:lt({width:v(c)+"%"})},null,6)]),t("div",mr,[t("span",null,i(B(((R=y(c))==null?void 0:R.requests)||0))+"次",1),t("span",null,i(((a=y(c))==null?void 0:a.formattedCost)||"$0.00"),1)])])}),128)),T.value>0?(r(),o("div",gr,[t("div",fr,[t("span",null,"其他 "+i(T.value)+" 个Keys",1),t("span",null,i(M.value)+"%",1)])])):L("",!0)])):e(x)?(r(),o("div",yr,K[2]||(K[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),w(" 暂无数据 ",-1)]))):(r(),o("div",xr,K[1]||(K[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},br=st(pr,[["__scopeId","data-v-39572a8e"]]),vr={class:"card p-4 md:p-6"},kr={class:"mb-4 md:mb-6"},hr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},_r={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},wr={key:0,class:"py-6 text-center md:py-8"},$r={key:1,class:"space-y-3 md:space-y-4"},Sr={class:"mb-2 flex items-start justify-between md:mb-3"},Cr={class:"min-w-0 flex-1"},Tr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},Kr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},Ar={class:"ml-3 flex-shrink-0 text-right"},Pr={class:"text-base font-bold text-green-600 md:text-lg"},Lr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},Mr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Ir={class:"font-medium text-gray-900 dark:text-gray-100"},Dr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Or={class:"font-medium text-gray-900 dark:text-gray-100"},jr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Rr={class:"font-medium text-gray-900 dark:text-gray-100"},qr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Ur={class:"font-medium text-gray-900 dark:text-gray-100"},Nr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Er={class:"text-sm md:text-base"},Fr={__name:"ModelUsageStats",setup(W){const f=rt(),{statsPeriod:s,modelStats:k,modelStatsLoading:u}=at(f),x=y=>(typeof y!="number"&&(y=parseInt(y)||0),y===0?"0":y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toLocaleString());return(y,b)=>(r(),o("div",vr,[t("div",kr,[t("h3",hr,[b[0]||(b[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),w(" 模型使用统计 ")],-1)),t("span",_r,"("+i(e(s)==="daily"?"今日":"本月")+")",1)])]),e(u)?(r(),o("div",wr,b[1]||(b[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(k).length>0?(r(),o("div",$r,[(r(!0),o(Z,null,et(e(k),(T,M)=>{var v;return r(),o("div",{key:M,class:"model-usage-item"},[t("div",Sr,[t("div",Cr,[t("h4",Tr,i(T.model),1),t("p",Kr,i(T.requests)+" 次请求 ",1)]),t("div",Ar,[t("div",Pr,i(((v=T.formatted)==null?void 0:v.total)||"$0.000000"),1),b[2]||(b[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",Lr,[t("div",Mr,[b[3]||(b[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",Ir,i(x(T.inputTokens)),1)]),t("div",Dr,[b[4]||(b[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",Or,i(x(T.outputTokens)),1)]),t("div",jr,[b[5]||(b[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",Rr,i(x(T.cacheCreateTokens)),1)]),t("div",qr,[b[6]||(b[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Ur,i(x(T.cacheReadTokens)),1)])])])}),128))])):(r(),o("div",Nr,[b[7]||(b[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Er," 暂无"+i(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Wr=st(Fr,[["__scopeId","data-v-b3b8dc5f"]]),Br={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Vr={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},zr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Jr={class:"flex items-center gap-3"},Hr={class:"text-xs text-gray-500 dark:text-gray-400"},Yr=["disabled"],Gr={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Zr={class:"mb-4"},Qr={class:"relative"},Xr=["value"],tl={class:"mb-4 space-y-2"},el={class:"flex items-center justify-between text-sm"},sl={class:"font-medium text-gray-700 dark:text-gray-300"},al={class:"flex items-center gap-3"},rl={class:"text-xs text-gray-500 dark:text-gray-400"},ll={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},il={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},ol={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},nl={class:"max-h-40 overflow-y-auto p-3"},dl={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},ul={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},cl={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},ml={key:2,class:"text-sm text-red-600 dark:text-red-400"},gl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},fl={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},xl=["disabled"],yl=["disabled"],pl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(W,{emit:f}){const s=W,k=f,u=N("idle"),x=N(""),y=N(""),b=N(0),T=N(null),M=N(null),v=N("claude-sonnet-4-5-20250929"),A=U(()=>s.apiKeyName||"当前 API Key"),B=U(()=>{const P=s.apiKeyValue;return P?P.length<=10?"****":P.substring(0,6)+"****"+P.substring(P.length-4):""}),C=U(()=>{switch(u.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),K=U(()=>{switch(u.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return y.value||"无法通过 API Key 访问服务";default:return""}}),c=U(()=>{switch(u.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),n=U(()=>{switch(u.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),R=U(()=>{switch(u.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),a=U(()=>{switch(u.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),m=U(()=>{switch(u.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function D(){if(!s.apiKeyValue)return;u.value="testing",x.value="",y.value="",b.value=0,T.value=Date.now(),M.value&&M.value.abort(),M.value=new AbortController;const P=`${Ct}/apiStats/api-key/test`;try{const _=await fetch(P,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:v.value}),signal:M.value.signal});if(!_.ok){const h=await _.json().catch(()=>({}));throw new Error(h.message||h.error||`HTTP ${_.status}`)}const z=_.body.getReader(),H=new TextDecoder;let F=!1;for(;!F;){const{done:h,value:Q}=await z.read();if(h){F=!0;continue}const d=H.decode(Q).split(` +`);for(const l of d)if(l.startsWith("data: "))try{const p=JSON.parse(l.substring(6));S(p)}catch{}}}catch(_){if(_.name==="AbortError")return;u.value="error",y.value=_.message||"连接失败",b.value=Date.now()-T.value}}function S(P){switch(P.type){case"test_start":break;case"content":x.value+=P.text;break;case"message_stop":break;case"test_complete":b.value=Date.now()-T.value,P.success?u.value="success":(u.value="error",y.value=P.error||"测试失败");break;case"error":u.value="error",y.value=P.error||"未知错误",b.value=Date.now()-T.value;break}}function j(){u.value!=="testing"&&(M.value&&(M.value.abort(),M.value=null),u.value="idle",x.value="",y.value="",b.value=0,k("close"))}return xt(()=>s.show,P=>{P&&(u.value="idle",x.value="",y.value="",b.value=0)}),yt(()=>{M.value&&M.value.abort()}),(P,_)=>(r(),ot(kt,{to:"body"},[W.show?(r(),o("div",Br,[t("div",{class:"absolute inset-0",onClick:j}),t("div",Vr,[t("div",zr,[t("div",Jr,[t("div",{class:O(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",u.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":u.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:O(["fas",u.value==="idle"?"fa-vial":u.value==="testing"?"fa-spinner fa-spin":u.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[_[0]||(_[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",Hr,i(A.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:u.value==="testing",onClick:j},_[1]||(_[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,Yr)]),t("div",Gr,[t("div",Zr,[_[3]||(_[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Qr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:B.value},null,8,Xr),_[2]||(_[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),_[4]||(_[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",tl,[_[6]||(_[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),w(" /api/v1/messages ")])],-1)),t("div",el,[_[5]||(_[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",sl,i(v.value),1)]),_[7]||(_[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:O(["mb-4 rounded-xl border p-4 transition-all duration-300",c.value])},[t("div",al,[t("div",{class:O(["flex h-8 w-8 items-center justify-center rounded-lg",n.value])},[t("i",{class:O(["fas text-sm",R.value,a.value])},null,2)],2),t("div",null,[t("p",{class:O(["font-medium",m.value])},i(C.value),3),t("p",rl,i(K.value),1)])])],2),u.value!=="idle"?(r(),o("div",ll,[t("div",il,[_[8]||(_[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(r(),o("span",ol,i(x.value.length)+" 字符 ",1)):L("",!0)]),t("div",nl,[x.value?(r(),o("p",dl,[w(i(x.value)+" ",1),u.value==="testing"?(r(),o("span",ul)):L("",!0)])):u.value==="testing"?(r(),o("p",cl,_[9]||(_[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),w(" 等待响应中... ",-1)]))):u.value==="error"&&y.value?(r(),o("p",ml,i(y.value),1)):L("",!0)])])):L("",!0),b.value>0?(r(),o("div",gl,[_[10]||(_[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+i((b.value/1e3).toFixed(2))+" 秒",1)])):L("",!0)]),t("div",fl,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:u.value==="testing",onClick:j}," 关闭 ",8,xl),t("button",{class:O(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",u.value==="testing"||!W.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:u.value==="testing"||!W.apiKeyValue,onClick:D},[t("i",{class:O(["fas",u.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),w(" "+i(u.value==="testing"?"测试中...":u.value==="idle"?"开始测试":"重新测试"),1)],10,yl)])])])):L("",!0)]))}},bl={key:0,class:"public-stats-overview"},vl={class:"header-section"},kl={class:"flex items-center gap-2"},hl={class:"status-text"},_l={class:"text-xs text-gray-500 dark:text-gray-400"},wl={class:"flex flex-wrap justify-center gap-2 md:justify-end"},$l={class:"main-content"},Sl={class:"stats-section"},Cl={class:"stats-grid"},Tl={class:"stat-item"},Kl={class:"stat-value"},Al={class:"stat-item"},Pl={class:"stat-value"},Ll={class:"stat-item"},Ml={class:"stat-value"},Il={class:"stat-item"},Dl={class:"stat-value"},Ol={key:0,class:"model-section"},jl={class:"section-title-left"},Rl={class:"period-label"},ql={class:"model-chart-container"},Ul={key:0,class:"chart-section"},Nl={class:"chart-container"},El={class:"chart-legend"},Fl={key:0,class:"legend-item"},Wl={key:1,class:"legend-item"},Bl={key:2,class:"legend-item"},Vl={key:1,class:"empty-state"},zl={key:1,class:"public-stats-loading"},Jl={key:2,class:"public-stats-empty"},Hl={__name:"PublicStatsOverview",setup(W){It.register(Dt,Ot,jt,Rt,qt,Ut,Nt,Et,Ft);const f=pt(),s=U(()=>{var m;const a=(m=f.publicStats)==null?void 0:m.showOptions;return(a==null?void 0:a.tokenTrends)||(a==null?void 0:a.apiKeysTrends)||(a==null?void 0:a.accountTrends)}),k=U(()=>{var P,_,z;const a=f.publicStats;if(!a)return!1;const m=a.showOptions||{},D=m.tokenTrends&&((P=a.tokenTrends)==null?void 0:P.length)>0,S=m.apiKeysTrends&&((_=a.apiKeysTrends)==null?void 0:_.length)>0,j=m.accountTrends&&((z=a.accountTrends)==null?void 0:z.length)>0;return D||S||j}),u=["rgb(99, 102, 241)","rgb(59, 130, 246)","rgb(16, 185, 129)","rgb(245, 158, 11)","rgb(239, 68, 68)","rgb(139, 92, 246)","rgb(236, 72, 153)","rgb(20, 184, 166)"],x=U(()=>{var D;const a=f.publicStats;if(!((D=a==null?void 0:a.modelDistribution)!=null&&D.length))return{labels:[],datasets:[]};const m=a.modelDistribution;return{labels:m.map(S=>n(S.model)),datasets:[{data:m.map(S=>S.percentage),backgroundColor:m.map((S,j)=>u[j%u.length]),borderColor:"transparent",borderWidth:0,hoverOffset:4}]}}),y=U(()=>{const a=document.documentElement.classList.contains("dark");return{responsive:!0,maintainAspectRatio:!1,cutout:"60%",plugins:{legend:{position:"right",labels:{color:a?"rgb(156, 163, 175)":"rgb(107, 114, 128)",padding:12,usePointStyle:!0,pointStyle:"circle",font:{size:11},generateLabels:D=>{const S=D.data;return S.labels.length&&S.datasets.length?S.labels.map((j,P)=>({text:`${j} ${S.datasets[0].data[P]}%`,fillStyle:S.datasets[0].backgroundColor[P],strokeStyle:"transparent",lineWidth:0,pointStyle:"circle",hidden:!1,index:P})):[]}}},tooltip:{backgroundColor:a?"rgba(31, 41, 55, 0.95)":"rgba(255, 255, 255, 0.95)",titleColor:a?"rgb(243, 244, 246)":"rgb(17, 24, 39)",bodyColor:a?"rgb(209, 213, 219)":"rgb(75, 85, 99)",borderColor:a?"rgba(75, 85, 99, 0.3)":"rgba(209, 213, 219, 0.5)",borderWidth:1,padding:10,cornerRadius:8,callbacks:{label:D=>` ${D.label}: ${D.parsed}%`}}}}}),b=U(()=>{var j,P,_,z,H,F;const a=f.publicStats;if(!a)return{labels:[],datasets:[]};const m=a.showOptions||{},D=((j=a.tokenTrends)==null?void 0:j.map(h=>R(h.date)))||((P=a.apiKeysTrends)==null?void 0:P.map(h=>R(h.date)))||((_=a.accountTrends)==null?void 0:_.map(h=>R(h.date)))||[],S=[];return m.tokenTrends&&((z=a.tokenTrends)==null?void 0:z.length)>0&&S.push({label:"Tokens",data:a.tokenTrends.map(h=>h.tokens),borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",yAxisID:"y",tension:.3,fill:!0,pointRadius:3,pointHoverRadius:5}),m.apiKeysTrends&&((H=a.apiKeysTrends)==null?void 0:H.length)>0&&S.push({label:"活跃 Keys",data:a.apiKeysTrends.map(h=>h.activeKeys),borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",yAxisID:"y1",tension:.3,fill:!1,pointRadius:3,pointHoverRadius:5}),m.accountTrends&&((F=a.accountTrends)==null?void 0:F.length)>0&&S.push({label:"活跃账号",data:a.accountTrends.map(h=>h.activeAccounts),borderColor:"rgb(168, 85, 247)",backgroundColor:"rgba(168, 85, 247, 0.1)",yAxisID:"y1",tension:.3,fill:!1,pointRadius:3,pointHoverRadius:5}),{labels:D,datasets:S}}),T=U(()=>{const a=document.documentElement.classList.contains("dark"),m=a?"rgba(156, 163, 175, 1)":"rgba(107, 114, 128, 1)",D=a?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)";return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{backgroundColor:a?"rgba(31, 41, 55, 0.9)":"rgba(255, 255, 255, 0.9)",titleColor:a?"#e5e7eb":"#1f2937",bodyColor:a?"#d1d5db":"#4b5563",borderColor:a?"rgba(75, 85, 99, 0.5)":"rgba(229, 231, 235, 1)",borderWidth:1,padding:10,displayColors:!0,callbacks:{label:function(S){let j=S.dataset.label||"";return j&&(j+=": "),S.dataset.yAxisID==="y"?j+=A(S.parsed.y):j+=S.parsed.y,j}}}},scales:{x:{grid:{color:D,drawBorder:!1},ticks:{color:m,font:{size:10}}},y:{type:"linear",display:!0,position:"left",min:0,beginAtZero:!0,title:{display:!0,text:"Tokens",color:"rgb(59, 130, 246)",font:{size:10}},grid:{color:D,drawBorder:!1},ticks:{color:m,font:{size:10},callback:function(S){return B(S)}}},y1:{type:"linear",display:!0,position:"right",min:0,beginAtZero:!0,title:{display:!0,text:"数量",color:"rgb(34, 197, 94)",font:{size:10}},grid:{drawOnChartArea:!1},ticks:{color:m,font:{size:10},stepSize:1}}}}});function M(a){const m=Math.floor(a/86400),D=Math.floor(a%86400/3600),S=Math.floor(a%3600/60);return m>0?`${m}天 ${D}小时`:D>0?`${D}小时 ${S}分钟`:`${S}分钟`}function v(a){return a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString()}function A(a){return a>=1e9?(a/1e9).toFixed(2)+"B":a>=1e6?(a/1e6).toFixed(2)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString()}function B(a){return a>=1e9?(a/1e9).toFixed(0)+"B":a>=1e6?(a/1e6).toFixed(0)+"M":a>=1e3?(a/1e3).toFixed(0)+"K":a.toString()}function C(a){const m={today:"今天","24h":"过去24小时","7d":"过去7天","30d":"过去30天",all:"全部"};return m[a]||m.today}function K(a){return{claude:"fas fa-robot",gemini:"fas fa-gem",bedrock:"fab fa-aws",droid:"fas fa-microchip"}[a]||"fas fa-server"}function c(a){return{claude:"Claude",gemini:"Gemini",bedrock:"Bedrock",droid:"Droid"}[a]||a}function n(a){if(!a)return"Unknown";const m=a.split("-");return m.length>2?m.slice(0,2).join("-"):a}function R(a){if(!a)return"";const m=a.split("-");return m.length===3?`${m[1]}/${m[2]}`:a}return(a,m)=>{var D,S,j,P,_;return e(f).publicStats?(r(),o("div",bl,[t("div",vl,[t("div",kl,[t("div",{class:O(["status-badge",{"status-healthy":e(f).publicStats.serviceStatus==="healthy","status-degraded":e(f).publicStats.serviceStatus==="degraded"}])},[m[0]||(m[0]=t("span",{class:"status-dot"},null,-1)),t("span",hl,i(e(f).publicStats.serviceStatus==="healthy"?"服务正常":"服务降级"),1)],2),t("span",_l," 运行 "+i(M(e(f).publicStats.uptime)),1)]),t("div",wl,[(r(!0),o(Z,null,et(e(f).publicStats.platforms,(z,H)=>(r(),o("div",{key:H,class:O(["platform-badge",{available:z,unavailable:!z}])},[t("i",{class:O(["mr-1",K(H)])},null,2),t("span",null,i(c(H)),1)],2))),128))])]),t("div",$l,[t("div",Sl,[m[5]||(m[5]=t("div",{class:"section-title-left"},"今日统计",-1)),t("div",Cl,[t("div",Tl,[t("div",Kl,i(v(e(f).publicStats.todayStats.requests)),1),m[1]||(m[1]=t("div",{class:"stat-label"},"请求数",-1))]),t("div",Al,[t("div",Pl,i(A(e(f).publicStats.todayStats.tokens)),1),m[2]||(m[2]=t("div",{class:"stat-label"},"Tokens",-1))]),t("div",Ll,[t("div",Ml,i(A(e(f).publicStats.todayStats.inputTokens)),1),m[3]||(m[3]=t("div",{class:"stat-label"},"输入",-1))]),t("div",Il,[t("div",Dl,i(A(e(f).publicStats.todayStats.outputTokens)),1),m[4]||(m[4]=t("div",{class:"stat-label"},"输出",-1))])])]),(D=e(f).publicStats.showOptions)!=null&&D.modelDistribution&&((S=e(f).publicStats.modelDistribution)==null?void 0:S.length)>0?(r(),o("div",Ol,[t("div",jl,[m[6]||(m[6]=w(" 模型使用分布 ",-1)),t("span",Rl,i(C(e(f).publicStats.modelDistributionPeriod)),1)]),t("div",ql,[Y(e(ht),{data:x.value,options:y.value},null,8,["data","options"])])])):L("",!0)]),k.value?(r(),o("div",Ul,[m[10]||(m[10]=t("div",{class:"section-title-left"},"使用趋势(近7天)",-1)),t("div",Nl,[Y(e(_t),{data:b.value,options:T.value},null,8,["data","options"])]),t("div",El,[(j=e(f).publicStats.showOptions)!=null&&j.tokenTrends?(r(),o("div",Fl,m[7]||(m[7]=[t("span",{class:"legend-dot legend-tokens"},null,-1),t("span",{class:"legend-text"},"Tokens",-1)]))):L("",!0),(P=e(f).publicStats.showOptions)!=null&&P.apiKeysTrends?(r(),o("div",Wl,m[8]||(m[8]=[t("span",{class:"legend-dot legend-keys"},null,-1),t("span",{class:"legend-text"},"活跃 Keys",-1)]))):L("",!0),(_=e(f).publicStats.showOptions)!=null&&_.accountTrends?(r(),o("div",Bl,m[9]||(m[9]=[t("span",{class:"legend-dot legend-accounts"},null,-1),t("span",{class:"legend-text"},"活跃账号",-1)]))):L("",!0)])])):s.value?(r(),o("div",Vl,m[11]||(m[11]=[t("i",{class:"fas fa-chart-line empty-icon"},null,-1),t("p",{class:"empty-text"},"暂无趋势数据",-1),t("p",{class:"empty-hint"},"数据将在有请求后自动更新",-1)]))):L("",!0)])):e(f).publicStatsLoading?(r(),o("div",zl,m[12]||(m[12]=[t("div",{class:"loading-spinner"},null,-1)]))):(r(),o("div",Jl,m[13]||(m[13]=[t("i",{class:"fas fa-chart-pie empty-icon"},null,-1),t("p",{class:"empty-text"},"暂无统计数据",-1)])))}}},Yl=st(Hl,[["__scopeId","data-v-4ed7dff1"]]),Gl={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},Zl={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},Ql={class:"flex items-center gap-2 md:gap-4"},Xl={class:"flex items-center"},ti={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ei={class:"mb-6 md:mb-8"},si={class:"flex justify-center"},ai={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},ri={key:0,class:"tab-content"},li={key:1,class:"tab-content"},ii={key:0,class:"mb-6 md:mb-8"},oi={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},ni={key:1,class:"fade-in"},di={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},ui={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},ci={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},mi={class:"flex w-full items-center gap-2 md:w-auto"},gi=["disabled"],fi=["disabled"],xi=["disabled"],yi={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},pi={key:2,class:"tab-content"},bi={class:"glass-strong rounded-3xl shadow-xl"},vi={__name:"ApiStatsView",setup(W){const f=$t(),s=rt(),k=Tt(),u=pt(),x=N("overview"),y=U(()=>k.isDarkMode),{apiKey:b,apiId:T,loading:M,modelStatsLoading:v,oemLoading:A,error:B,statsPeriod:C,statsData:K,oemSettings:c,multiKeyMode:n}=at(s),{queryStats:R,switchPeriod:a,loadStatsWithApiId:m,loadOemSettings:D,reset:S}=s,j=N(!1),P=()=>{j.value=!0},_=()=>{j.value=!1},z=()=>{x.value="overview",u.loadPublicStats()},H=F=>{(F.ctrlKey||F.metaKey)&&F.key==="Enter"&&(!M.value&&b.value.trim()&&R(),F.preventDefault()),F.key==="Escape"&&S()};return wt(()=>{k.initTheme(),D(),u.loadPublicStats();const F=f.query.apiId,h=f.query.apiKey;F&&F.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(T.value=F,m()):h&&h.length>10&&(b.value=h),document.addEventListener("keydown",H)}),yt(()=>{document.removeEventListener("keydown",H)}),xt(b,F=>{F||s.clearData()}),(F,h)=>{var X;const Q=St("router-link");return r(),o("div",{class:O(["min-h-screen p-4 md:p-6",y.value?"gradient-bg-dark":"gradient-bg"])},[t("div",Gl,[t("div",Zl,[Y(Kt,{loading:e(A),"logo-src":e(c).siteIconData||e(c).siteIcon,subtitle:x.value==="stats"?"API Key 使用统计":x.value==="overview"?"服务状态概览":"使用教程",title:e(c).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",Ql,[t("div",Xl,[Y(At,{mode:"dropdown"})]),e(c).ldapEnabled||e(c).showAdminButton!==!1?(r(),o("div",ti)):L("",!0),e(c).ldapEnabled?(r(),ot(Q,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:ft(()=>h[4]||(h[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):L("",!0),e(c).showAdminButton!==!1?(r(),ot(Q,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:ft(()=>h[5]||(h[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):L("",!0)])])]),t("div",ei,[t("div",si,[t("div",ai,[t("button",{class:O(["tab-pill-button",x.value==="overview"?"active":""]),onClick:z},h[6]||(h[6]=[t("i",{class:"fas fa-tachometer-alt mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"状态概览",-1)]),2),t("button",{class:O(["tab-pill-button",x.value==="stats"?"active":""]),onClick:h[0]||(h[0]=d=>x.value="stats")},h[7]||(h[7]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:O(["tab-pill-button",x.value==="tutorial"?"active":""]),onClick:h[1]||(h[1]=d=>x.value="tutorial")},h[8]||(h[8]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),x.value==="overview"?(r(),o("div",ri,[Y(Yl)])):L("",!0),x.value==="stats"?(r(),o("div",li,[Y(de),e(B)?(r(),o("div",ii,[t("div",oi,[h[9]||(h[9]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),w(" "+i(e(B)),1)])])):L("",!0),e(K)?(r(),o("div",ni,[t("div",di,[t("div",ui,[t("div",ci,[h[13]||(h[13]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",mi,[t("button",{class:O(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(C)==="daily"}]]),disabled:e(M)||e(v),onClick:h[2]||(h[2]=d=>e(a)("daily"))},h[10]||(h[10]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),w(" 今日 ",-1)]),10,gi),t("button",{class:O(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(C)==="monthly"}]]),disabled:e(M)||e(v),onClick:h[3]||(h[3]=d=>e(a)("monthly"))},h[11]||(h[11]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),w(" 本月 ",-1)]),10,fi),e(n)?L("",!0):(r(),o("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(M),onClick:P},h[12]||(h[12]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),w(" 测试 ",-1)]),8,xi))])])]),Y(Ks),t("div",yi,[Y(zs,{class:"h-full"}),e(n)?(r(),ot(br,{key:0,class:"h-full"})):(r(),ot(ar,{key:1,class:"h-full"}))]),Y(Wr)])])):L("",!0)])):L("",!0),x.value==="tutorial"?(r(),o("div",pi,[t("div",bi,[Y(Mt)])])):L("",!0),Y(pl,{"api-key-name":((X=e(K))==null?void 0:X.name)||"","api-key-value":e(b),show:j.value,onClose:_},null,8,["api-key-name","api-key-value","show"])],2)}}},Ai=st(vi,[["__scopeId","data-v-818f3fa5"]]);export{Ai as default}; diff --git a/assets/ApiStatsView-CRlzwPqI.css b/assets/ApiStatsView-D5HJh2jj.css similarity index 63% rename from assets/ApiStatsView-CRlzwPqI.css rename to assets/ApiStatsView-D5HJh2jj.css index d2db1494..77c206e0 100644 --- a/assets/ApiStatsView-CRlzwPqI.css +++ b/assets/ApiStatsView-D5HJh2jj.css @@ -1 +1 @@ -.api-input-wide-card[data-v-11e74200]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-11e74200]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-11e74200]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-11e74200]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-11e74200]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-11e74200]{align-items:end;gap:1rem}.wide-card-input[data-v-11e74200]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-11e74200]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-11e74200]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-11e74200]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa26,0 10px 15px -3px #0006;background:#1f2937f2;color:#f3f4f6}.btn[data-v-11e74200]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-11e74200]{padding:14px 24px;font-size:16px}.btn-primary[data-v-11e74200]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary[data-v-11e74200]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-primary[data-v-11e74200]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-11e74200]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:#1f2937cc!important;border:1px solid rgba(75,85,99,.5)!important;color:#d1d5db!important}.security-notice[data-v-11e74200]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:#1f2937e6!important;border-color:#4b556399!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-11e74200]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-11e74200]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-11e74200]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-11e74200]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:#1f2937;box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-11e74200]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:#9ca3af}.mode-switch-btn[data-v-11e74200]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-11e74200]{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 4px #667eea33}.mode-switch-btn.active[data-v-11e74200]:hover{box-shadow:0 4px 6px #667eea4d}.mode-switch-btn i[data-v-11e74200]{font-size:.875rem}.fade-enter-active[data-v-11e74200],.fade-leave-active[data-v-11e74200]{transition:all .3s ease}.fade-enter-from[data-v-11e74200],.fade-leave-to[data-v-11e74200]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-11e74200]{animation:spin-11e74200 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-11e74200{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-11e74200]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-11e74200]{justify-content:center}.api-input-wide-card[data-v-11e74200]{padding:1.25rem}.wide-card-title[data-v-11e74200]{margin-bottom:1.25rem}.wide-card-title h2[data-v-11e74200]{font-size:1.5rem}.wide-card-title p[data-v-11e74200]{font-size:.875rem}.api-input-grid[data-v-11e74200]{gap:1rem}.wide-card-input[data-v-11e74200]{padding:12px 14px;font-size:15px}.btn-query[data-v-11e74200]{padding:12px 20px;font-size:15px}.security-notice[data-v-11e74200]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-11e74200]{padding:5px 8px}.toggle-icon[data-v-11e74200]{width:18px;height:18px}.hint-text[data-v-11e74200]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-11e74200]{padding:1rem}.wide-card-title h2[data-v-11e74200]{font-size:1.25rem}.wide-card-title p[data-v-11e74200]{font-size:.8rem}.wide-card-input[data-v-11e74200]{padding:10px 12px;font-size:14px}.btn-query[data-v-11e74200]{padding:10px 16px;font-size:14px}}.card-section[data-v-b72df2cd]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;border-width:1px;border-color:#e2e8f0b3;background-color:#ffffffe6;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-section[data-v-b72df2cd]:is(.dark *){border-color:#33415599;background-color:#0f172ab3}@media (min-width: 768px){.card-section[data-v-b72df2cd]{padding:1.5rem}}.dark{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.section-header[data-v-b72df2cd]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-b72df2cd]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.header-title[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.header-title[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem}}.header-tag[data-v-b72df2cd]{margin-left:auto;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.header-tag[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.info-grid[data-v-b72df2cd]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{gap:1rem}}.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem}.info-item[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.info-item[data-v-b72df2cd]{min-height:86px}.info-label[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.metric-grid[data-v-b72df2cd]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-b72df2cd]{gap:1rem}}.metric-card[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.metric-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.metric-value[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-b72df2cd]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-b72df2cd]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.metric-label[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.account-card[data-v-b72df2cd]{border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fffc;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-b72df2cd]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.account-icon[data-v-b72df2cd]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-b72df2cd]{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.account-name[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.rate-badge[data-v-b72df2cd]{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.rate-badge[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.progress-row[data-v-b72df2cd]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-b72df2cd]{height:.375rem;flex:1 1 0%;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.progress-track[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.progress-bar[data-v-b72df2cd]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.progress-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-row[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fff9;padding:.75rem}.quota-row[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a80}.quota-header[data-v-b72df2cd]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-b72df2cd]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-b72df2cd]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]{margin-top:.25rem;font-size:11px;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.card[data-v-d9e5c1dd]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-d9e5c1dd]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-d9e5c1dd]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-9bba2ba4]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-9bba2ba4]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-9bba2ba4]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-39572a8e]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-39572a8e]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-39572a8e]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-b3b8dc5f]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.model-usage-item[data-v-b3b8dc5f]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-b3b8dc5f]{padding:16px}}.model-usage-item[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-b3b8dc5f]{animation:spin-b3b8dc5f 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-b3b8dc5f{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-b3b8dc5f]{padding:10px}.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr}}.gradient-bg[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2,#f093fb);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg-dark[data-v-c1f23841]{background:linear-gradient(135deg,#1e293b,#334155,#475569);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(100,116,139,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(71,85,105,.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(30,41,59,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-c1f23841]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-c1f23841]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-c1f23841]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-c1f23841],.user-login-button span[data-v-c1f23841]{position:relative;z-index:1}.admin-button-refined[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px #667eea40,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#764ba2,#667eea);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,#764ba2,#667eea);box-shadow:0 8px 20px #764ba259,inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-c1f23841]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#9333ea66;box-shadow:0 8px 20px #667eea4d,inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-c1f23841],.admin-button-refined span[data-v-c1f23841]{position:relative;z-index:1}.period-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.period-btn[data-v-c1f23841]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-c1f23841]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-c1f23841]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-c1f23841]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-c1f23841]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-c1f23841]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-c1f23841]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-c1f23841]{background:#fff;color:#764ba2;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-c1f23841]{font-size:.875rem}.tab-content[data-v-c1f23841]{animation:tabFadeIn-c1f23841 .4s ease-out}@keyframes tabFadeIn-c1f23841{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-c1f23841]{animation:fadeIn-c1f23841 .6s ease-out}@keyframes fadeIn-c1f23841{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}} +.api-input-wide-card[data-v-11e74200]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-11e74200]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-11e74200]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-11e74200]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-11e74200]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-11e74200]{align-items:end;gap:1rem}.wide-card-input[data-v-11e74200]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-11e74200]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-11e74200]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-11e74200]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa26,0 10px 15px -3px #0006;background:#1f2937f2;color:#f3f4f6}.btn[data-v-11e74200]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-11e74200]{padding:14px 24px;font-size:16px}.btn-primary[data-v-11e74200]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary[data-v-11e74200]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-primary[data-v-11e74200]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-11e74200]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:#1f2937cc!important;border:1px solid rgba(75,85,99,.5)!important;color:#d1d5db!important}.security-notice[data-v-11e74200]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:#1f2937e6!important;border-color:#4b556399!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-11e74200]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-11e74200]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-11e74200]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-11e74200]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:#1f2937;box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-11e74200]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:#9ca3af}.mode-switch-btn[data-v-11e74200]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-11e74200]{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 4px #667eea33}.mode-switch-btn.active[data-v-11e74200]:hover{box-shadow:0 4px 6px #667eea4d}.mode-switch-btn i[data-v-11e74200]{font-size:.875rem}.fade-enter-active[data-v-11e74200],.fade-leave-active[data-v-11e74200]{transition:all .3s ease}.fade-enter-from[data-v-11e74200],.fade-leave-to[data-v-11e74200]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-11e74200]{animation:spin-11e74200 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-11e74200{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-11e74200]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-11e74200]{justify-content:center}.api-input-wide-card[data-v-11e74200]{padding:1.25rem}.wide-card-title[data-v-11e74200]{margin-bottom:1.25rem}.wide-card-title h2[data-v-11e74200]{font-size:1.5rem}.wide-card-title p[data-v-11e74200]{font-size:.875rem}.api-input-grid[data-v-11e74200]{gap:1rem}.wide-card-input[data-v-11e74200]{padding:12px 14px;font-size:15px}.btn-query[data-v-11e74200]{padding:12px 20px;font-size:15px}.security-notice[data-v-11e74200]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-11e74200]{padding:5px 8px}.toggle-icon[data-v-11e74200]{width:18px;height:18px}.hint-text[data-v-11e74200]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-11e74200]{padding:1rem}.wide-card-title h2[data-v-11e74200]{font-size:1.25rem}.wide-card-title p[data-v-11e74200]{font-size:.8rem}.wide-card-input[data-v-11e74200]{padding:10px 12px;font-size:14px}.btn-query[data-v-11e74200]{padding:10px 16px;font-size:14px}}.card-section[data-v-b72df2cd]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;border-width:1px;border-color:#e2e8f0b3;background-color:#ffffffe6;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-section[data-v-b72df2cd]:is(.dark *){border-color:#33415599;background-color:#0f172ab3}@media (min-width: 768px){.card-section[data-v-b72df2cd]{padding:1.5rem}}.dark{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.section-header[data-v-b72df2cd]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-b72df2cd]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.header-title[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.header-title[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem}}.header-tag[data-v-b72df2cd]{margin-left:auto;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.header-tag[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.info-grid[data-v-b72df2cd]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{gap:1rem}}.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem}.info-item[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.info-item[data-v-b72df2cd]{min-height:86px}.info-label[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.metric-grid[data-v-b72df2cd]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-b72df2cd]{gap:1rem}}.metric-card[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.metric-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.metric-value[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-b72df2cd]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-b72df2cd]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.metric-label[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.account-card[data-v-b72df2cd]{border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fffc;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-b72df2cd]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.account-icon[data-v-b72df2cd]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-b72df2cd]{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.account-name[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.rate-badge[data-v-b72df2cd]{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.rate-badge[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.progress-row[data-v-b72df2cd]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-b72df2cd]{height:.375rem;flex:1 1 0%;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.progress-track[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.progress-bar[data-v-b72df2cd]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.progress-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-row[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fff9;padding:.75rem}.quota-row[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a80}.quota-header[data-v-b72df2cd]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-b72df2cd]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-b72df2cd]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]{margin-top:.25rem;font-size:11px;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.card[data-v-d9e5c1dd]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-d9e5c1dd]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-d9e5c1dd]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-9bba2ba4]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-9bba2ba4]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-9bba2ba4]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-39572a8e]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-39572a8e]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-39572a8e]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-b3b8dc5f]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.model-usage-item[data-v-b3b8dc5f]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-b3b8dc5f]{padding:16px}}.model-usage-item[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-b3b8dc5f]{animation:spin-b3b8dc5f 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-b3b8dc5f{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-b3b8dc5f]{padding:10px}.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr}}.public-stats-overview[data-v-4ed7dff1]{border-radius:.75rem;border-width:1px;border-color:#e5e7eb80;background-color:#fffc;padding:1rem;--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.public-stats-overview[data-v-4ed7dff1]:is(.dark *){border-color:#37415180;background-color:#1f2937cc}@media (min-width: 768px){.public-stats-overview[data-v-4ed7dff1]{padding:1.5rem}}.public-stats-overview[data-v-4ed7dff1]{animation:fadeIn-4ed7dff1 .3s ease-out}@keyframes fadeIn-4ed7dff1{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.header-section[data-v-4ed7dff1]{margin-bottom:1rem;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));padding-bottom:1rem}.header-section[data-v-4ed7dff1]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}@media (min-width: 768px){.header-section[data-v-4ed7dff1]{margin-bottom:1.5rem;flex-direction:row;padding-bottom:1.5rem}}.main-content[data-v-4ed7dff1]{display:grid;gap:1rem}@media (min-width: 768px){.main-content[data-v-4ed7dff1]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}}.stats-section[data-v-4ed7dff1]{border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.stats-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}.model-section[data-v-4ed7dff1]{border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.model-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}.chart-section[data-v-4ed7dff1]{margin-top:1rem;border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.chart-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}@media (min-width: 768px){.chart-section[data-v-4ed7dff1]{margin-top:1.5rem}}.section-title[data-v-4ed7dff1]{margin-bottom:.5rem;text-align:center;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.section-title[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.section-title-left[data-v-4ed7dff1]{margin-bottom:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.section-title-left[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.period-label[data-v-4ed7dff1]{margin-left:.25rem;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1));padding:.125rem .375rem;font-size:10px;font-weight:400;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.period-label[data-v-4ed7dff1]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.status-badge[data-v-4ed7dff1]{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.25rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500}.status-healthy[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.status-healthy[data-v-4ed7dff1]:is(.dark *){background-color:#14532d4d;--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.status-degraded[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.status-degraded[data-v-4ed7dff1]:is(.dark *){background-color:#713f124d;--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.status-dot[data-v-4ed7dff1]{display:inline-block;height:.5rem;width:.5rem;border-radius:9999px}.status-healthy .status-dot[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1));animation:pulse-4ed7dff1 2s infinite}.status-degraded .status-dot[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1));animation:pulse-4ed7dff1 1s infinite}@keyframes pulse-4ed7dff1{0%,to{opacity:1}50%{opacity:.5}}.platform-badge[data-v-4ed7dff1]{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.platform-badge.available[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.platform-badge.available[data-v-4ed7dff1]:is(.dark *){background-color:#1e3a8a4d;--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.platform-badge.unavailable[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1));text-decoration-line:line-through}.platform-badge.unavailable[data-v-4ed7dff1]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.stats-grid[data-v-4ed7dff1]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.stat-item[data-v-4ed7dff1]{border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.75rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.stat-item[data-v-4ed7dff1]:is(.dark *){background-color:#1f293780}.stat-value[data-v-4ed7dff1]{font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.stat-value[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.stat-value[data-v-4ed7dff1]{font-size:1.25rem;line-height:1.75rem}}.stat-label[data-v-4ed7dff1]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.stat-label[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.model-chart-container[data-v-4ed7dff1]{height:160px}@media (min-width: 768px){.model-chart-container[data-v-4ed7dff1]{height:180px}}.chart-container[data-v-4ed7dff1]{border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding:.75rem}.chart-container[data-v-4ed7dff1]:is(.dark *){background-color:#37415180}.chart-container[data-v-4ed7dff1]{height:180px}.chart-legend[data-v-4ed7dff1]{margin-top:.5rem;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1rem}.legend-item[data-v-4ed7dff1]{display:flex;align-items:center;gap:.375rem}.legend-dot[data-v-4ed7dff1]{display:inline-block;height:.625rem;width:.625rem;border-radius:9999px}.legend-tokens[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.legend-keys[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.legend-accounts[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.legend-text[data-v-4ed7dff1]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.legend-text[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-state[data-v-4ed7dff1]{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding-top:1.5rem;padding-bottom:1.5rem}.empty-state[data-v-4ed7dff1]:is(.dark *){background-color:#37415180}.empty-icon[data-v-4ed7dff1]{margin-bottom:.5rem;font-size:1.5rem;line-height:2rem;--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-icon[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.empty-text[data-v-4ed7dff1]{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.empty-text[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-hint[data-v-4ed7dff1]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-hint[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.public-stats-loading[data-v-4ed7dff1]{display:flex;align-items:center;justify-content:center;padding-top:2rem;padding-bottom:2rem}.public-stats-empty[data-v-4ed7dff1]{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.75rem;border-width:1px;border-color:#e5e7eb80;background-color:#fffc;padding-top:2rem;padding-bottom:2rem;--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.public-stats-empty[data-v-4ed7dff1]:is(.dark *){border-color:#37415180;background-color:#1f2937cc}.loading-spinner[data-v-4ed7dff1]{height:1.5rem;width:1.5rem}@keyframes spin-4ed7dff1{to{transform:rotate(360deg)}}.loading-spinner[data-v-4ed7dff1]{animation:spin-4ed7dff1 1s linear infinite;border-radius:9999px;border-width:2px;--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));border-top-color:transparent}.gradient-bg[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2,#f093fb);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg-dark[data-v-818f3fa5]{background:linear-gradient(135deg,#1e293b,#334155,#475569);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-818f3fa5]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-818f3fa5]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(100,116,139,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(71,85,105,.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(30,41,59,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-818f3fa5]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-818f3fa5]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-818f3fa5]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-818f3fa5]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-818f3fa5]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-818f3fa5]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-818f3fa5],.user-login-button span[data-v-818f3fa5]{position:relative;z-index:1}.admin-button-refined[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px #667eea40,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-818f3fa5]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#764ba2,#667eea);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-818f3fa5]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,#764ba2,#667eea);box-shadow:0 8px 20px #764ba259,inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-818f3fa5]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#9333ea66;box-shadow:0 8px 20px #667eea4d,inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-818f3fa5]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-818f3fa5],.admin-button-refined span[data-v-818f3fa5]{position:relative;z-index:1}.period-btn[data-v-818f3fa5]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.period-btn[data-v-818f3fa5]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-818f3fa5]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-818f3fa5]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-818f3fa5]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-818f3fa5]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-818f3fa5]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-818f3fa5]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-818f3fa5]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-818f3fa5]{background:#fff;color:#764ba2;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-818f3fa5]{font-size:.875rem}.tab-content[data-v-818f3fa5]{animation:tabFadeIn-818f3fa5 .4s ease-out}@keyframes tabFadeIn-818f3fa5{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-818f3fa5]{animation:fadeIn-818f3fa5 .6s ease-out}@keyframes fadeIn-818f3fa5{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}} diff --git a/assets/ConfirmModal-CZV4xGP-.js b/assets/ConfirmModal-BGRLg47v.js similarity index 92% rename from assets/ConfirmModal-CZV4xGP-.js rename to assets/ConfirmModal-BGRLg47v.js index 623aeadc..e6850480 100644 --- a/assets/ConfirmModal-CZV4xGP-.js +++ b/assets/ConfirmModal-BGRLg47v.js @@ -1 +1 @@ -import{_ as n}from"./index-Cr7hSgrN.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-R8HMg95E.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C}; +import{_ as n}from"./index-BAse2XU9.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-BVUySZOn.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C}; diff --git a/web/admin-spa/dist/assets/DashboardView-Dz8mMDNV.js b/assets/DashboardView-L6RVGrpZ.js similarity index 99% rename from web/admin-spa/dist/assets/DashboardView-Dz8mMDNV.js rename to assets/DashboardView-L6RVGrpZ.js index 423a7ba7..f5147d86 100644 --- a/web/admin-spa/dist/assets/DashboardView-Dz8mMDNV.js +++ b/assets/DashboardView-L6RVGrpZ.js @@ -1 +1 @@ -import{E as Qt}from"./element-plus-BUfCkBQO.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-R8HMg95E.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-Cr7hSgrN.js";import{C as Ft}from"./chart-yFHxLHpB.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default}; +import{E as Qt}from"./element-plus-CKhypU-Q.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-BVUySZOn.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-BAse2XU9.js";import{C as Ft}from"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default}; diff --git a/assets/LoginView-C_fN82yI.js b/assets/LoginView-C_fN82yI.js new file mode 100644 index 00000000..7d612027 --- /dev/null +++ b/assets/LoginView-C_fN82yI.js @@ -0,0 +1 @@ +import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as p,O as c,y as r}from"./vue-vendor-BVUySZOn.js";import{_ as v,u as k,a as S}from"./index-BAse2XU9.js";import{T as L}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[p,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[p,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),c(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),c(m(o(e).loginError),1)])):d("",!0)])]))}},J=v(A,[["__scopeId","data-v-adc70cd7"]]);export{J as default}; diff --git a/assets/LoginView-Cqf_qBij.js b/assets/LoginView-Cqf_qBij.js deleted file mode 100644 index 38cb0152..00000000 --- a/assets/LoginView-Cqf_qBij.js +++ /dev/null @@ -1 +0,0 @@ -import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as c,O as p,y as r}from"./vue-vendor-R8HMg95E.js";import{_ as v,u as k,a as S}from"./index-Cr7hSgrN.js";import{T as L}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[c,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[c,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),p(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),p(m(o(e).loginError),1)])):d("",!0)])]))}},H=v(A,[["__scopeId","data-v-34e2cac0"]]);export{H as default}; diff --git a/assets/LogoTitle-CwgrPCRk.js b/assets/LogoTitle-BKx-1OIz.js similarity index 88% rename from assets/LogoTitle-CwgrPCRk.js rename to assets/LogoTitle-BKx-1OIz.js index c87c5a98..c569c9d1 100644 --- a/assets/LogoTitle-CwgrPCRk.js +++ b/assets/LogoTitle-BKx-1OIz.js @@ -1 +1 @@ -import{_ as d}from"./index-Cr7hSgrN.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-R8HMg95E.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L}; +import{_ as d}from"./index-BAse2XU9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-BVUySZOn.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L}; diff --git a/assets/MainLayout-Bd5PtuA8.js b/assets/MainLayout-Bd5PtuA8.js new file mode 100644 index 00000000..4f912454 --- /dev/null +++ b/assets/MainLayout-Bd5PtuA8.js @@ -0,0 +1 @@ +import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-BVUySZOn.js";import{_ as N,u as S,c as V,s as h}from"./index-BAse2XU9.js";import{L as Y}from"./LogoTitle-BKx-1OIz.js";import{T as G}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},Qe=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{Qe as default}; diff --git a/assets/MainLayout-DM3nuiFe.js b/assets/MainLayout-DM3nuiFe.js deleted file mode 100644 index 69982b8b..00000000 --- a/assets/MainLayout-DM3nuiFe.js +++ /dev/null @@ -1 +0,0 @@ -import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-R8HMg95E.js";import{_ as N,u as S,c as V,s as h}from"./index-Cr7hSgrN.js";import{L as Y}from"./LogoTitle-CwgrPCRk.js";import{T as G}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},He=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{He as default}; diff --git a/web/admin-spa/dist/assets/RecordDetailModal-lW2AGtWL.js b/assets/RecordDetailModal-CVWv3dXE.js similarity index 96% rename from web/admin-spa/dist/assets/RecordDetailModal-lW2AGtWL.js rename to assets/RecordDetailModal-CVWv3dXE.js index d3669f04..db568d64 100644 --- a/web/admin-spa/dist/assets/RecordDetailModal-lW2AGtWL.js +++ b/assets/RecordDetailModal-CVWv3dXE.js @@ -1 +1 @@ -import{b as C,e as R}from"./element-plus-BUfCkBQO.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-Cr7hSgrN.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-R8HMg95E.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f}; +import{b as C,e as R}from"./element-plus-CKhypU-Q.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-BAse2XU9.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-BVUySZOn.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f}; diff --git a/assets/SettingsView-CRb2BaAt.css b/assets/SettingsView-BrlNWmbu.css similarity index 52% rename from assets/SettingsView-CRb2BaAt.css rename to assets/SettingsView-BrlNWmbu.css index 72fd34b8..5c186196 100644 --- a/assets/SettingsView-CRb2BaAt.css +++ b/assets/SettingsView-BrlNWmbu.css @@ -1 +1 @@ -.settings-container[data-v-d2705d9a]{min-height:calc(100vh - 300px)}.card[data-v-d2705d9a]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-d2705d9a]{background:#1f2937;border:1px solid #374151;box-shadow:0 2px 12px #0000004d}.table-container[data-v-d2705d9a]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-d2705d9a]{border:1px solid #4b5563}.table-row[data-v-d2705d9a]{transition:background-color .2s ease}.table-row[data-v-d2705d9a]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-d2705d9a]:hover{background-color:#374151}.form-input[data-v-d2705d9a]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-d2705d9a]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-d2705d9a]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-d2705d9a]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-d2705d9a]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-d2705d9a]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-d2705d9a]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-d2705d9a]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-d2705d9a]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-d2705d9a]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-d2705d9a]{height:1.25rem;width:1.25rem}@keyframes spin-d2705d9a{to{transform:rotate(360deg)}}.loading-spinner[data-v-d2705d9a]{animation:spin-d2705d9a 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))} +.settings-container[data-v-f76246ee]{min-height:calc(100vh - 300px)}.card[data-v-f76246ee]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-f76246ee]{background:#1f2937;border:1px solid #374151;box-shadow:0 2px 12px #0000004d}.table-container[data-v-f76246ee]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-f76246ee]{border:1px solid #4b5563}.table-row[data-v-f76246ee]{transition:background-color .2s ease}.table-row[data-v-f76246ee]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-f76246ee]:hover{background-color:#374151}.form-input[data-v-f76246ee]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-f76246ee]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-f76246ee]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-f76246ee]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-f76246ee]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-f76246ee]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-f76246ee]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-f76246ee]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-f76246ee]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-f76246ee]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-f76246ee]{height:1.25rem;width:1.25rem}@keyframes spin-f76246ee{to{transform:rotate(360deg)}}.loading-spinner[data-v-f76246ee]{animation:spin-f76246ee 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))} diff --git a/assets/SettingsView-BuM-cxrS.js b/assets/SettingsView-BuM-cxrS.js new file mode 100644 index 00000000..7f489287 --- /dev/null +++ b/assets/SettingsView-BuM-cxrS.js @@ -0,0 +1,3 @@ +import{aP as De,r as S,aX as Ve,c as xe,o as ye,q as Qe,Z as Re,x as i,z as t,L as p,C as V,O as l,u as o,K as d,S as z,aq as x,al as I,P as y,aT as C,Q as H,ac as _,aV as X,R as qe,J as Pe,T as je,Y as Le,y as u}from"./vue-vendor-BVUySZOn.js";import{c as B,_ as Ke,s as c}from"./index-BAse2XU9.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const Oe=De("settings",()=>{const A=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,publicStatsShowModelDistribution:!0,publicStatsModelDistributionPeriod:"today",publicStatsShowTokenTrends:!1,publicStatsShowApiKeysTrends:!1,publicStatsShowAccountTrends:!1,updatedAt:null}),Q=S(!1),L=S(!1),T=async()=>{Q.value=!0;try{const b=await B.get("/admin/oem-settings");return b&&b.success&&(A.value={...A.value,...b.data},K()),b}catch(b){throw console.error("Failed to load OEM settings:",b),b}finally{Q.value=!1}},n=async b=>{L.value=!0;try{const v=await B.put("/admin/oem-settings",b);return v&&v.success&&(A.value={...A.value,...v.data},K()),v}catch(v){throw console.error("Failed to save OEM settings:",v),v}finally{L.value=!1}},J=async()=>{const b={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,updatedAt:null};return A.value={...b},await n(b)},K=()=>{if(A.value.siteName&&(document.title=`${A.value.siteName} - 管理后台`),A.value.siteIconData||A.value.siteIcon){const b=document.querySelector('link[rel="icon"]')||document.createElement("link");b.rel="icon",b.href=A.value.siteIconData||A.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(b)}};return{oemSettings:A,loading:Q,saving:L,loadOemSettings:T,saveOemSettings:n,resetOemSettings:J,applyOemSettings:K,formatDateTime:b=>b?new Date(b).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:b=>{const v=[];return b.size>350*1024&&v.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(b.type)||v.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:v.length===0,errors:v}},fileToBase64:b=>new Promise((v,E)=>{const q=new FileReader;q.onload=P=>v(P.target.result),q.onerror=E,q.readAsDataURL(b)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},We={class:"mb-6"},$e={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},He={key:1},Xe={class:"table-container hidden sm:block"},Je={class:"min-w-full"},Ye={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ge={class:"table-row"},Ze={class:"px-6 py-4"},_e={class:"table-row"},et={class:"px-6 py-4"},tt={class:"space-y-3"},rt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],st={class:"table-row"},lt={class:"px-6 py-4"},ot={class:"flex items-center"},nt={class:"inline-flex cursor-pointer items-center"},dt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},it={class:"px-6 py-6",colspan:"2"},ut={class:"flex items-center justify-between"},gt={class:"flex gap-3"},ft=["disabled"],ct={key:0,class:"loading-spinner mr-2"},bt={key:1,class:"fas fa-save mr-2"},pt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},yt={class:"space-y-4 sm:hidden"},vt={class:"glass-card p-4"},mt={class:"glass-card p-4"},kt={class:"space-y-3"},ht={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wt=["src"],St={class:"glass-card p-4"},Tt={class:"space-y-2"},Ut={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Mt={class:"glass-card p-4"},It={class:"flex flex-col gap-3"},At=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},Dt=["disabled"],Vt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Rt={class:"flex items-center justify-between"},qt={class:"relative inline-flex cursor-pointer items-center"},Pt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Lt={class:"font-medium text-gray-700 dark:text-gray-300"},Kt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Wt={class:"mb-4 flex items-center justify-between"},$t={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},Ht={class:"flex-1"},Xt={class:"flex items-center"},Jt={class:"font-semibold text-gray-800 dark:text-gray-200"},Yt={class:"text-sm text-gray-500 dark:text-gray-400"},Gt={class:"mt-3 space-y-1 text-sm"},Zt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},_t={class:"truncate"},er={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},tr={class:"truncate"},rr={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},ar={class:"truncate"},sr={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},lr={class:"truncate"},or={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},nr={class:"truncate"},dr={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},ir={class:"truncate"},ur={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},gr={class:"ml-4 flex items-center space-x-2"},fr={class:"relative inline-flex cursor-pointer items-center"},cr=["checked","onChange"],br=["onClick"],pr=["onClick"],xr=["onClick"],yr={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},vr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},mr={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},kr={key:0,class:"py-12 text-center"},hr={key:1},wr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Sr={class:"flex items-center justify-between"},Tr={class:"relative inline-flex cursor-pointer items-center"},Ur={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Cr={class:"flex items-center justify-between"},Mr={class:"relative inline-flex cursor-pointer items-center"},Ir={key:0,class:"mt-6 space-y-4"},Ar={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Br={class:"flex items-center justify-between"},Er={class:"relative inline-flex cursor-pointer items-center"},Dr={key:0,class:"mt-6 space-y-4"},Vr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qr={class:"flex items-center justify-between"},Rr={class:"relative inline-flex cursor-pointer items-center"},qr={key:0,class:"mt-6 space-y-4"},Pr={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},jr={key:0,class:"ml-2"},Lr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kr={class:"mb-6 flex items-center justify-between"},Or={class:"inline-flex cursor-pointer items-center"},Fr={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Nr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-700/50"},Wr={class:"grid gap-3 sm:grid-cols-2"},$r={class:"rounded-lg border border-gray-200 bg-white p-3 transition-colors dark:border-gray-600 dark:bg-gray-800"},zr={class:"flex cursor-pointer items-center gap-3"},Hr={key:0,class:"mt-3 pl-7"},Xr={class:"inline-flex rounded-lg bg-gray-100 p-0.5 dark:bg-gray-700/50"},Jr=["onClick"],Yr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Gr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Zr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},_r={class:"mt-6 flex items-center justify-between"},ea={class:"flex gap-3"},ta=["disabled"],ra={key:0,class:"loading-spinner mr-2"},aa={key:1,class:"fas fa-save mr-2"},sa={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},la={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},oa={class:"flex items-center justify-between"},na={class:"flex items-center space-x-3"},da={class:"text-xl font-semibold text-gray-900 dark:text-white"},ia={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},ua={class:"p-6"},ga={class:"space-y-5"},fa={class:"relative"},ca=["disabled"],ba={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},pa={key:0},xa={class:"relative"},ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},va={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},ma={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},ka={class:"text-sm text-blue-700 dark:text-blue-300"},ha={key:1,class:"space-y-5"},wa={key:2,class:"space-y-5"},Sa={key:3,class:"space-y-5"},Ta={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ua={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},Ca={class:"space-y-4"},Ma={class:"flex items-center justify-between"},Ia={class:"flex cursor-pointer items-center",for:"enableSign"},Aa={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},Ba={key:0},Ea={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},Da={class:"flex items-center justify-between"},Va={class:"flex space-x-3"},Qa=["disabled"],Ra=["disabled"],qa=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(A){const Q=Oe(),{loading:L,saving:T,oemSettings:n}=Ve(Q),J=[{value:"today",label:"今天"},{value:"24h",label:"24小时"},{value:"7d",label:"7天"},{value:"30d",label:"30天"},{value:"all",label:"全部"}],K=S(),U=S("branding"),f=S(!0),M=S(new AbortController),b=xe({get(){return!n.value.showAdminButton},set(s){n.value.showAdminButton=!s}}),v=S(!1),E=S(!1),q=S(!1),P=S(!1),Y={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...Y},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),G=S(!1),g=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),j=S(!1),D=S(null),r=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),ee=ye(U,async s=>{f.value&&(s==="webhook"?await O():s==="claude"&&await me())}),te=ye(()=>r.value.type,s=>{v.value=!1,E.value=!1,D.value||(s==="bark"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1):s==="smtp"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):s==="telegram"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):(r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""))}),ve=xe(()=>r.value.type==="bark"?!!r.value.deviceKey:r.value.type==="telegram"?!!(r.value.botToken&&r.value.chatId):r.value.type==="smtp"?!!(r.value.host&&r.value.user&&r.value.pass&&r.value.to):!!r.value.url&&!v.value);Qe(async()=>{try{await Q.loadOemSettings(),U.value==="webhook"&&await O()}catch{c("加载设置失败","error")}}),Re(()=>{f.value=!1,M.value&&M.value.abort(),ee&&ee(),te&&te(),j.value&&(j.value=!1,D.value=null)});const O=async()=>{if(f.value)try{const s=await B.get("/admin/webhook/config",{signal:M.value.signal});if(s.success&&f.value){const e=s.config||{};k.value={...e,notificationTypes:{...Y,...e.notificationTypes||{}}}}}catch(s){if(s.name==="AbortError"||!f.value)return;c("获取webhook配置失败","error"),console.error(s)}},F=async()=>{if(f.value)try{const s={...k.value,notificationTypes:{...Y,...k.value.notificationTypes||{}}};(await B.post("/admin/webhook/config",s,{signal:M.value.signal})).success&&f.value&&(k.value=s,c("配置已保存","success"))}catch(s){if(s.name==="AbortError"||!f.value)return;c("保存配置失败","error"),console.error(s)}},me=async()=>{var s,e,a,m,h,$,ie,ue,ge,fe,ce,be,pe;if(f.value){G.value=!0;try{const w=await B.get("/admin/claude-relay-config",{signal:M.value.signal});w.success&&f.value&&(g.value={claudeCodeOnlyEnabled:((s=w.config)==null?void 0:s.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((a=w.config)==null?void 0:a.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((m=w.config)==null?void 0:m.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:(($=w.config)==null?void 0:$.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ie=w.config)==null?void 0:ie.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((ue=w.config)==null?void 0:ue.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ge=w.config)==null?void 0:ge.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((fe=w.config)==null?void 0:fe.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ce=w.config)==null?void 0:ce.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((be=w.config)==null?void 0:be.updatedAt)||null,updatedBy:((pe=w.config)==null?void 0:pe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!f.value)return;c("获取 Claude 转发配置失败","error"),console.error(w)}finally{f.value&&(G.value=!1)}}},R=async()=>{var s,e;if(f.value)try{const a={claudeCodeOnlyEnabled:g.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:g.value.globalSessionBindingEnabled,sessionBindingErrorMessage:g.value.sessionBindingErrorMessage,sessionBindingTtlDays:g.value.sessionBindingTtlDays,userMessageQueueEnabled:g.value.userMessageQueueEnabled,userMessageQueueDelayMs:g.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:g.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:g.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:g.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:g.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:g.value.concurrentRequestQueueTimeoutMs},m=await B.put("/admin/claude-relay-config",a,{signal:M.value.signal});m.success&&f.value&&(g.value={...g.value,updatedAt:((s=m.config)==null?void 0:s.updatedAt)||new Date().toISOString(),updatedBy:((e=m.config)==null?void 0:e.updatedBy)||null},c("Claude 转发配置已保存","success"))}catch(a){if(a.name==="AbortError"||!f.value)return;c("保存 Claude 转发配置失败","error"),console.error(a)}},ke=()=>{if(["bark","smtp","telegram"].includes(r.value.type)){v.value=!1,E.value=!1;return}const s=r.value.url;if(!s){v.value=!1,E.value=!1;return}try{new URL(s),s.startsWith("http://")||s.startsWith("https://")?(v.value=!1,E.value=!0):(v.value=!0,E.value=!1)}catch{v.value=!0,E.value=!1}},re=()=>{if(r.value.type==="bark"){if(!r.value.deviceKey)return c("请输入Bark设备密钥","error"),!1}else if(r.value.type==="telegram"){if(!r.value.botToken)return c("请输入 Telegram 机器人 Token","error"),!1;if(!r.value.chatId)return c("请输入 Telegram Chat ID","error"),!1;if(r.value.apiBaseUrl)try{const s=new URL(r.value.apiBaseUrl);if(!["http:","https:"].includes(s.protocol))return c("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return c("请输入有效的 Telegram API 基础地址","error"),!1}if(r.value.proxyUrl)try{const s=new URL(r.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(s.protocol))return c("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return c("请输入有效的 Telegram 代理地址","error"),!1}}else if(r.value.type==="smtp"){const s=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:a}of s)if(!r.value[e])return c(`请输入${a}`,"error"),!1}else{if(!r.value.url)return c("请输入Webhook URL","error"),!1;if(v.value)return c("请输入有效的Webhook URL","error"),!1}return!0},he=async()=>{if(f.value&&re()){P.value=!0;try{let s;D.value?s=await B.put(`/admin/webhook/platforms/${D.value.id}`,r.value,{signal:M.value.signal}):s=await B.post("/admin/webhook/platforms",r.value,{signal:M.value.signal}),s.success&&f.value&&(c(D.value?"平台已更新":"平台已添加","success"),await O(),N())}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.message||"操作失败","error"),console.error(s)}finally{f.value&&(P.value=!1)}}},we=s=>{D.value=s,r.value={type:s.type||"wechat_work",name:s.name||"",url:s.url||"",enableSign:s.enableSign||!1,secret:s.secret||"",botToken:s.botToken||"",chatId:s.chatId||"",apiBaseUrl:s.apiBaseUrl||"",proxyUrl:s.proxyUrl||"",deviceKey:s.deviceKey||"",serverUrl:s.serverUrl||"",level:s.level||"",sound:s.sound||"",group:s.group||"",host:s.host||"",port:s.port??null,secure:s.secure||!1,user:s.user||"",pass:s.pass||"",from:s.from||"",to:Array.isArray(s.to)?s.to.join(", "):s.to||"",timeout:s.timeout??null,ignoreTLS:s.ignoreTLS||!1},j.value=!0},Se=async s=>{if(f.value&&confirm("确定要删除这个平台吗?"))try{(await B.delete(`/admin/webhook/platforms/${s}`,{signal:M.value.signal})).success&&f.value&&(c("平台已删除","success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("删除失败","error"),console.error(e)}},Te=async s=>{if(f.value)try{const e=await B.post(`/admin/webhook/platforms/${s}/toggle`,{},{signal:M.value.signal});e.success&&f.value&&(c(e.message,"success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("操作失败","error"),console.error(e)}},Ue=async s=>{if(f.value)try{const e={type:s.type,secret:s.secret,enableSign:s.enableSign};s.type==="bark"?(e.deviceKey=s.deviceKey,e.serverUrl=s.serverUrl,e.level=s.level,e.sound=s.sound,e.group=s.group):s.type==="smtp"?(e.host=s.host,e.port=s.port,e.secure=s.secure,e.user=s.user,e.pass=s.pass,e.from=s.from,e.to=s.to,e.ignoreTLS=s.ignoreTLS):s.type==="telegram"?(e.botToken=s.botToken,e.chatId=s.chatId,e.apiBaseUrl=s.apiBaseUrl,e.proxyUrl=s.proxyUrl):e.url=s.url,(await B.post("/admin/webhook/test",e,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(e){if(e.name==="AbortError"||!f.value)return;c(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(f.value&&re()){q.value=!0;try{(await B.post("/admin/webhook/test",r.value,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.error||s.message||"测试失败","error"),console.error(s)}finally{f.value&&(q.value=!1)}}},Me=async()=>{var s,e,a,m;if(f.value)try{(await B.post("/admin/webhook/test-notification",{},{signal:M.value.signal})).success&&f.value&&c("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!f.value)return;const $=((e=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:m.error)||(h==null?void 0:h.message)||"发送失败";c($,"error"),console.error(h)}},N=()=>{f.value&&(j.value=!1,setTimeout(()=>{f.value&&(D.value=null,r.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},v.value=!1,E.value=!1,q.value=!1,P.value=!1)},0))},ae=s=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[s]||s,Ie=s=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[s]||"fas fa-bell",se=s=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[s]||"",Ae=s=>s?s.length<=12?s:`${s.slice(0,6)}...${s.slice(-4)}`:"",Be=s=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[s]||s,Ee=s=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[s]||"",Z=async()=>{try{const s={siteName:n.value.siteName,siteIcon:n.value.siteIcon,siteIconData:n.value.siteIconData,showAdminButton:n.value.showAdminButton,publicStatsEnabled:n.value.publicStatsEnabled,publicStatsShowModelDistribution:n.value.publicStatsShowModelDistribution,publicStatsModelDistributionPeriod:n.value.publicStatsModelDistributionPeriod||"today",publicStatsShowTokenTrends:n.value.publicStatsShowTokenTrends,publicStatsShowApiKeysTrends:n.value.publicStatsShowApiKeysTrends,publicStatsShowAccountTrends:n.value.publicStatsShowAccountTrends},e=await Q.saveOemSettings(s);e&&e.success?c("OEM设置保存成功","success"):c((e==null?void 0:e.message)||"保存失败","error")}catch{c("保存OEM设置失败","error")}},le=async()=>{if(confirm(`确定要重置为默认设置吗? + +这将清除所有自定义的网站名称和图标设置。`))try{const s=await Q.resetOemSettings();s&&s.success?c("已重置为默认设置","success"):c("重置失败","error")}catch{c("重置失败","error")}},oe=async s=>{const e=s.target.files[0];if(!e)return;const a=Q.validateIconFile(e);if(!a.isValid){a.errors.forEach(m=>c(m,"error"));return}try{const m=await Q.fileToBase64(e);n.value.siteIconData=m}catch{c("文件读取失败","error")}s.target.value=""},ne=()=>{n.value.siteIcon="",n.value.siteIconData=""},de=()=>{console.warn("Icon failed to load")},W=Q.formatDateTime;return(s,e)=>(u(),i(H,null,[t("div",Fe,[t("div",Ne,[e[141]||(e[141]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",We,[t("nav",$e,[t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=a=>U.value="branding")},e[53]||(e[53]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=a=>U.value="webhook")},e[54]||(e[54]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=a=>U.value="claude")},e[55]||(e[55]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="publicStats"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[3]||(e[3]=a=>U.value="publicStats")},e[56]||(e[56]=[t("i",{class:"fas fa-chart-line mr-2"},null,-1),l(" 公开统计 ",-1)]),2)])]),o(L)?(u(),i("div",ze,e[57]||(e[57]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(u(),i("div",He,[d(t("div",null,[t("div",Xe,[t("table",Je,[t("tbody",Ye,[t("tr",Ge,[e[59]||(e[59]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ze,[d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>o(n).siteName=a),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]]),e[58]||(e[58]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",_e,[e[64]||(e[64]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",et,[t("div",tt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",rt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,at),e[61]||(e[61]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne},e[60]||(e[60]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):p("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:K,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[5]||(e[5]=a=>s.$refs.iconFileInput.click())},e[62]||(e[62]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[63]||(e[63]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",st,[e[67]||(e[67]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",lt,[t("div",ot,[t("label",nt,[d(t("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[65]||(e[65]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",dt,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[66]||(e[66]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",it,[t("div",ut,[t("div",gt,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ct)):(u(),i("i",bt)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ft),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[68]||(e[68]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,pt)]),o(n).updatedAt?(u(),i("div",xt,[e[69]||(e[69]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])])])]),t("div",yt,[t("div",vt,[e[70]||(e[70]=C('

站点名称

自定义您的站点品牌名称

',1)),d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=a=>o(n).siteName=a),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]])]),t("div",mt,[e[74]||(e[74]=C('

站点图标

上传自定义图标或输入图标URL

',1)),t("div",kt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",ht,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,wt),e[71]||(e[71]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne}," 删除 ")])):p("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[8]||(e[8]=a=>s.$refs.iconFileInputMobile.click())},e[72]||(e[72]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[73]||(e[73]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",St,[e[77]||(e[77]=C('

管理入口

控制登录按钮在首页的显示

',1)),t("div",Tt,[t("label",Ut,[d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[75]||(e[75]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[76]||(e[76]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Mt,[t("div",It,[t("button",{class:V(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",Bt)):(u(),i("i",Et)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,At),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[78]||(e[78]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,Dt),o(n).updatedAt?(u(),i("div",Vt,[e[79]||(e[79]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])],512),[[z,U.value==="branding"]]),d(t("div",null,[t("div",Qt,[t("div",Rt,[e[81]||(e[81]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",qt,[d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=a=>k.value.enabled=a),class:"peer sr-only",type:"checkbox",onChange:F},null,544),[[I,k.value.enabled]]),e[80]||(e[80]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",Pt,[e[83]||(e[83]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(u(!0),i(H,null,_(k.value.notificationTypes,(a,m)=>(u(),i("div",{key:m,class:"flex items-center justify-between"},[t("div",null,[t("span",Lt,y(Be(m)),1),t("span",Kt,y(Ee(m)),1)]),t("label",Ot,[d(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[m]=h,class:"peer sr-only",type:"checkbox",onChange:F},null,40,Ft),[[I,k.value.notificationTypes[m]]]),e[82]||(e[82]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Wt,[e[85]||(e[85]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[11]||(e[11]=a=>j.value=!0)},e[84]||(e[84]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(u(),i("div",$t,[(u(!0),i(H,null,_(k.value.platforms,a=>(u(),i("div",{key:a.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",Ht,[t("div",Xt,[t("i",{class:V(["mr-3 text-xl",Ie(a.type)])},null,2),t("div",null,[t("h3",Jt,y(a.name||ae(a.type)),1),t("p",Yt,y(ae(a.type)),1)])]),t("div",Gt,[a.type!=="smtp"&&a.type!=="telegram"?(u(),i("div",Zt,[e[86]||(e[86]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",_t,y(a.url),1)])):p("",!0),a.type==="telegram"?(u(),i("div",er,[e[87]||(e[87]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",tr,"Chat ID: "+y(a.chatId||"未配置"),1)])):p("",!0),a.type==="telegram"&&a.botToken?(u(),i("div",rr,[e[88]||(e[88]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",ar,"Token: "+y(Ae(a.botToken)),1)])):p("",!0),a.type==="telegram"&&a.apiBaseUrl?(u(),i("div",sr,[e[89]||(e[89]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",lr,"API: "+y(a.apiBaseUrl),1)])):p("",!0),a.type==="telegram"&&a.proxyUrl?(u(),i("div",or,[e[90]||(e[90]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",nr,"代理: "+y(a.proxyUrl),1)])):p("",!0),a.type==="smtp"&&a.to?(u(),i("div",dr,[e[91]||(e[91]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",ir,y(Array.isArray(a.to)?a.to.join(", "):a.to),1)])):p("",!0),a.enableSign?(u(),i("div",ur,e[92]||(e[92]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):p("",!0)])]),t("div",gr,[t("label",fr,[t("input",{checked:a.enabled,class:"peer sr-only",type:"checkbox",onChange:m=>Te(a.id)},null,40,cr),e[93]||(e[93]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:m=>Ue(a)},e[94]||(e[94]=[t("i",{class:"fas fa-vial"},null,-1)]),8,br),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:m=>we(a)},e[95]||(e[95]=[t("i",{class:"fas fa-edit"},null,-1)]),8,pr),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:m=>Se(a.id)},e[96]||(e[96]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xr)])])]))),128))])):(u(),i("div",yr,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",vr,[e[100]||(e[100]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",mr,[t("div",null,[e[97]||(e[97]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=a=>k.value.retrySettings.maxRetries=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[98]||(e[98]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=a=>k.value.retrySettings.retryDelay=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[99]||(e[99]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=a=>k.value.retrySettings.timeout=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Me},e[101]||(e[101]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[z,U.value==="webhook"]]),d(t("div",null,[G.value?(u(),i("div",kr,e[102]||(e[102]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(u(),i("div",hr,[t("div",wr,[t("div",Sr,[e[104]||(e[104]=C('

仅允许 Claude Code 客户端

启用后,所有 /api/v1/messages/claude/v1/messages 端点将强制验证 Claude Code CLI 客户端

',1)),t("label",Tr,[d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=a=>g.value.claudeCodeOnlyEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.claudeCodeOnlyEnabled]]),e[103]||(e[103]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[105]||(e[105]=C('

此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。

',1))]),t("div",Ur,[t("div",Cr,[e[107]||(e[107]=C('

强制会话绑定

启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性

',1)),t("label",Mr,[d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=a=>g.value.globalSessionBindingEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.globalSessionBindingEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),g.value.globalSessionBindingEnabled?(u(),i("div",Ir,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=a=>g.value.sessionBindingTtlDays=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:R},null,544),[[x,g.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),d(t("textarea",{"onUpdate:modelValue":e[18]||(e[18]=a=>g.value.sessionBindingErrorMessage=a),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:R},null,544),[[x,g.value.sessionBindingErrorMessage]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):p("",!0),e[112]||(e[112]=C('

工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。

新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。

',1))]),t("div",Ar,[t("div",Br,[e[114]||(e[114]=C('

用户消息串行队列

启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流

',1)),t("label",Er,[d(t("input",{"onUpdate:modelValue":e[19]||(e[19]=a=>g.value.userMessageQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.userMessageQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),g.value.userMessageQueueEnabled?(u(),i("div",Dr,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[20]||(e[20]=a=>g.value.userMessageQueueDelayMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[21]||(e[21]=a=>g.value.userMessageQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):p("",!0),e[119]||(e[119]=C('

工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。

',1))]),t("div",Vr,[t("div",Qr,[e[121]||(e[121]=C('

并发请求排队

当 API Key 并发请求超限时进入队列等待,而非直接拒绝

',1)),t("label",Rr,[d(t("input",{"onUpdate:modelValue":e[22]||(e[22]=a=>g.value.concurrentRequestQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.concurrentRequestQueueEnabled]]),e[120]||(e[120]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),g.value.concurrentRequestQueueEnabled?(u(),i("div",qr,[t("div",null,[e[122]||(e[122]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=a=>g.value.concurrentRequestQueueMaxSize=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[123]||(e[123]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[124]||(e[124]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=a=>g.value.concurrentRequestQueueMaxSizeMultiplier=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[125]||(e[125]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[126]||(e[126]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=a=>g.value.concurrentRequestQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[127]||(e[127]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):p("",!0),e[128]||(e[128]=C('

工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。

',1))]),g.value.updatedAt?(u(),i("div",Pr,[e[131]||(e[131]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+y(o(W)(g.value.updatedAt))+" ",1),g.value.updatedBy?(u(),i("span",jr,[e[129]||(e[129]=l(" 由 ",-1)),t("strong",null,y(g.value.updatedBy),1),e[130]||(e[130]=l(" 修改 ",-1))])):p("",!0)])):p("",!0)]))],512),[[z,U.value==="claude"]]),d(t("div",null,[t("div",Lr,[t("div",Kr,[e[133]||(e[133]=C('

公开统计概览

配置未登录用户可见的统计数据

',1)),t("label",Or,[d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=a=>o(n).publicStatsEnabled=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,o(n).publicStatsEnabled]]),e[132]||(e[132]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-green-800"},null,-1)),t("span",Fr,y(o(n).publicStatsEnabled?"已启用":"已禁用"),1)])]),o(n).publicStatsEnabled?(u(),i("div",Nr,[e[139]||(e[139]=t("p",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-eye mr-2 text-gray-400"}),l(" 选择要公开显示的数据: ")],-1)),t("div",Wr,[t("div",$r,[t("label",zr,[d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=a=>o(n).publicStatsShowModelDistribution=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowModelDistribution]]),e[134]||(e[134]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"模型使用分布"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示各模型的使用占比")],-1))]),o(n).publicStatsShowModelDistribution?(u(),i("div",Hr,[e[135]||(e[135]=t("div",{class:"mb-1.5 text-xs text-gray-500 dark:text-gray-400"},"时间范围",-1)),t("div",Xr,[(u(),i(H,null,_(J,a=>t("button",{key:a.value,class:V(["rounded-md px-2.5 py-1 text-xs font-medium transition-all",o(n).publicStatsModelDistributionPeriod===a.value?"bg-white text-green-600 shadow-sm dark:bg-gray-600 dark:text-green-400":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),type:"button",onClick:m=>o(n).publicStatsModelDistributionPeriod=a.value},y(a.label),11,Jr)),64))])])):p("",!0)]),t("label",Yr,[d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=a=>o(n).publicStatsShowTokenTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowTokenTrends]]),e[136]||(e[136]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"Token 使用趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的Token使用量")],-1))]),t("label",Gr,[d(t("input",{"onUpdate:modelValue":e[29]||(e[29]=a=>o(n).publicStatsShowApiKeysTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowApiKeysTrends]]),e[137]||(e[137]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"API Keys 活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 显示近7天的活跃API Key数量 ")],-1))]),t("label",Zr,[d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=a=>o(n).publicStatsShowAccountTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowAccountTrends]]),e[138]||(e[138]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"账号活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的活跃账号数量")],-1))])])])):p("",!0),t("div",_r,[t("div",ea,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ra)):(u(),i("i",aa)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ta)]),o(n).updatedAt?(u(),i("div",sa,[e[140]||(e[140]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])],512),[[z,U.value==="publicStats"]])]))])]),j.value?(u(),i("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:N},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[52]||(e[52]=Le(()=>{},["stop"]))},[t("div",la,[t("div",oa,[t("div",na,[e[142]||(e[142]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",da,y(D.value?"编辑":"添加")+"通知平台 ",1),t("p",ia," 配置"+y(D.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:N},e[143]||(e[143]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",ua,[t("div",ga,[t("div",null,[e[147]||(e[147]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",fa,[d(t("select",{"onUpdate:modelValue":e[31]||(e[31]=a=>r.value.type=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:D.value},e[144]||(e[144]=[C('',9)]),8,ca),[[X,r.value.type]]),e[145]||(e[145]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),D.value?(u(),i("p",ba,e[146]||(e[146]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):p("",!0)]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=a=>r.value.name=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[x,r.value.name]])]),r.value.type!=="bark"&&r.value.type!=="smtp"&&r.value.type!=="telegram"?(u(),i("div",pa,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",xa,[d(t("input",{"onUpdate:modelValue":e[33]||(e[33]=a=>r.value.url=a),class:V(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":v.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":E.value}]),placeholder:"https://...",required:"",type:"url",onInput:ke},null,34),[[x,r.value.url]]),E.value?(u(),i("div",ya,e[149]||(e[149]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):p("",!0),v.value?(u(),i("div",va,e[150]||(e[150]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):p("",!0)]),se(r.value.type)?(u(),i("div",ma,[e[151]||(e[151]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",ka,y(se(r.value.type)),1)])):p("",!0)])):p("",!0),r.value.type==="telegram"?(u(),i("div",ha,[t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[34]||(e[34]=a=>r.value.botToken=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[x,r.value.botToken]]),e[154]||(e[154]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=a=>r.value.chatId=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[x,r.value.chatId]]),e[156]||(e[156]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[157]||(e[157]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[36]||(e[36]=a=>r.value.apiBaseUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[x,r.value.apiBaseUrl]]),e[158]||(e[158]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[37]||(e[37]=a=>r.value.proxyUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[x,r.value.proxyUrl]]),e[160]||(e[160]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[161]||(e[161]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):p("",!0),r.value.type==="bark"?(u(),i("div",wa,[t("div",null,[e[162]||(e[162]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[38]||(e[38]=a=>r.value.deviceKey=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[x,r.value.deviceKey]]),e[163]||(e[163]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[39]||(e[39]=a=>r.value.serverUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[x,r.value.serverUrl]])]),t("div",null,[e[166]||(e[166]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),d(t("select",{"onUpdate:modelValue":e[40]||(e[40]=a=>r.value.level=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[165]||(e[165]=[C('',5)]),512),[[X,r.value.level]])]),t("div",null,[e[168]||(e[168]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),d(t("select",{"onUpdate:modelValue":e[41]||(e[41]=a=>r.value.sound=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[167]||(e[167]=[C('',9)]),512),[[X,r.value.sound]])]),t("div",null,[e[169]||(e[169]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[42]||(e[42]=a=>r.value.group=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[x,r.value.group]])]),e[170]||(e[170]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):p("",!0),r.value.type==="smtp"?(u(),i("div",Sa,[t("div",null,[e[171]||(e[171]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[43]||(e[43]=a=>r.value.host=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[x,r.value.host]])]),t("div",Ta,[t("div",null,[e[172]||(e[172]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),d(t("input",{"onUpdate:modelValue":e[44]||(e[44]=a=>r.value.port=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[x,r.value.port,void 0,{number:!0}]]),e[173]||(e[173]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[175]||(e[175]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),d(t("select",{"onUpdate:modelValue":e[45]||(e[45]=a=>r.value.secure=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[174]||(e[174]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[X,r.value.secure]])])]),t("div",null,[e[176]||(e[176]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[46]||(e[46]=a=>r.value.user=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[x,r.value.user]])]),t("div",null,[e[177]||(e[177]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[47]||(e[47]=a=>r.value.pass=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[x,r.value.pass]]),e[178]||(e[178]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[179]||(e[179]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[48]||(e[48]=a=>r.value.from=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[x,r.value.from]])]),t("div",null,[e[180]||(e[180]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[49]||(e[49]=a=>r.value.to=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[x,r.value.to]]),e[181]||(e[181]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):p("",!0),r.value.type==="dingtalk"||r.value.type==="feishu"?(u(),i("div",Ua,[t("div",Ca,[t("div",Ma,[t("label",Ia,[d(t("input",{id:"enableSign","onUpdate:modelValue":e[50]||(e[50]=a=>r.value.enableSign=a),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[I,r.value.enableSign]]),e[182]||(e[182]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),r.value.enableSign?(u(),i("span",Aa," 已启用 ")):p("",!0)]),qe(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:Pe(()=>[r.value.enableSign?(u(),i("div",Ba,[e[183]||(e[183]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),d(t("input",{"onUpdate:modelValue":e[51]||(e[51]=a=>r.value.secret=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[x,r.value.secret]])])):p("",!0)]),_:1})])])):p("",!0)])]),t("div",Ea,[t("div",Da,[e[185]||(e[185]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",Va,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:N},e[184]||(e[184]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:q.value,onClick:Ce},[t("i",{class:V(["mr-2 transition-transform",q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+y(q.value?"测试中...":"测试连接"),1)],8,Qa),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ve.value||P.value,onClick:he},[t("i",{class:V(["mr-2 transition-transform",P.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+y(P.value?"保存中...":D.value?"保存修改":"添加平台"),1)],8,Ra)])])])])])):p("",!0)],64))}}),Fa=Ke(qa,[["__scopeId","data-v-f76246ee"]]);export{Fa as default}; diff --git a/assets/SettingsView-Ds_F7gAc.js b/assets/SettingsView-Ds_F7gAc.js deleted file mode 100644 index cd0e6cc5..00000000 --- a/assets/SettingsView-Ds_F7gAc.js +++ /dev/null @@ -1,3 +0,0 @@ -import{aP as Ae,r as S,aX as De,c as be,o as xe,q as Ve,Z as Qe,x as d,z as t,L as x,C as R,O as l,u as f,K as o,S as J,aq as p,al as q,P as m,aT as U,Q as Y,ac as pe,aV as z,R as Re,J as qe,T as je,Y as Pe,y as i}from"./vue-vendor-R8HMg95E.js";import{c as I,_ as Le,s as g}from"./index-Cr7hSgrN.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const Oe=Ae("settings",()=>{const M=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null}),A=S(!1),L=S(!1),B=async()=>{A.value=!0;try{const c=await I.get("/admin/oem-settings");return c&&c.success&&(M.value={...M.value,...c.data},T()),c}catch(c){throw console.error("Failed to load OEM settings:",c),c}finally{A.value=!1}},b=async c=>{L.value=!0;try{const y=await I.put("/admin/oem-settings",c);return y&&y.success&&(M.value={...M.value,...y.data},T()),y}catch(y){throw console.error("Failed to save OEM settings:",y),y}finally{L.value=!1}},$=async()=>{const c={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null};return M.value={...c},await b(c)},T=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const c=document.querySelector('link[rel="icon"]')||document.createElement("link");c.rel="icon",c.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(c)}};return{oemSettings:M,loading:A,saving:L,loadOemSettings:B,saveOemSettings:b,resetOemSettings:$,applyOemSettings:T,formatDateTime:c=>c?new Date(c).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:c=>{const y=[];return c.size>350*1024&&y.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(c.type)||y.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:y.length===0,errors:y}},fileToBase64:c=>new Promise((y,Q)=>{const V=new FileReader;V.onload=O=>y(O.target.result),V.onerror=Q,V.readAsDataURL(c)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},Ke={class:"mb-6"},We={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},$e={key:1},He={class:"table-container hidden sm:block"},Xe={class:"min-w-full"},Je={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ye={class:"table-row"},Ge={class:"px-6 py-4"},Ze={class:"table-row"},_e={class:"px-6 py-4"},et={class:"space-y-3"},tt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],rt={class:"table-row"},st={class:"px-6 py-4"},lt={class:"flex items-center"},ot={class:"inline-flex cursor-pointer items-center"},nt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},dt={class:"px-6 py-6",colspan:"2"},it={class:"flex items-center justify-between"},ut={class:"flex gap-3"},gt=["disabled"],ct={key:0,class:"loading-spinner mr-2"},ft={key:1,class:"fas fa-save mr-2"},bt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},pt={class:"space-y-4 sm:hidden"},yt={class:"glass-card p-4"},vt={class:"glass-card p-4"},mt={class:"space-y-3"},kt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ht=["src"],wt={class:"glass-card p-4"},St={class:"space-y-2"},Tt={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ut={class:"glass-card p-4"},Mt={class:"flex flex-col gap-3"},It=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},At=["disabled"],Dt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Vt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qt={class:"flex items-center justify-between"},Rt={class:"relative inline-flex cursor-pointer items-center"},qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Pt={class:"font-medium text-gray-700 dark:text-gray-300"},Lt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kt={class:"mb-4 flex items-center justify-between"},Wt={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},$t={class:"flex-1"},Ht={class:"flex items-center"},Xt={class:"font-semibold text-gray-800 dark:text-gray-200"},Jt={class:"text-sm text-gray-500 dark:text-gray-400"},Yt={class:"mt-3 space-y-1 text-sm"},Gt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Zt={class:"truncate"},_t={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},ea={class:"truncate"},ta={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},aa={class:"truncate"},ra={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},sa={class:"truncate"},la={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},oa={class:"truncate"},na={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},da={class:"truncate"},ia={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},ua={class:"ml-4 flex items-center space-x-2"},ga={class:"relative inline-flex cursor-pointer items-center"},ca=["checked","onChange"],fa=["onClick"],ba=["onClick"],xa=["onClick"],pa={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},ya={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},va={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},ma={key:0,class:"py-12 text-center"},ka={key:1},ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},wa={class:"flex items-center justify-between"},Sa={class:"relative inline-flex cursor-pointer items-center"},Ta={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ca={class:"flex items-center justify-between"},Ua={class:"relative inline-flex cursor-pointer items-center"},Ma={key:0,class:"mt-6 space-y-4"},Ia={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ba={class:"flex items-center justify-between"},Ea={class:"relative inline-flex cursor-pointer items-center"},Aa={key:0,class:"mt-6 space-y-4"},Da={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Va={class:"flex items-center justify-between"},Qa={class:"relative inline-flex cursor-pointer items-center"},Ra={key:0,class:"mt-6 space-y-4"},qa={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},ja={key:0,class:"ml-2"},Pa={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},La={class:"flex items-center justify-between"},Oa={class:"flex items-center space-x-3"},Fa={class:"text-xl font-semibold text-gray-900 dark:text-white"},Na={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Ka={class:"p-6"},Wa={class:"space-y-5"},za={class:"relative"},$a=["disabled"],Ha={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Xa={key:0},Ja={class:"relative"},Ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Ga={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Za={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},_a={class:"text-sm text-blue-700 dark:text-blue-300"},er={key:1,class:"space-y-5"},tr={key:2,class:"space-y-5"},ar={key:3,class:"space-y-5"},rr={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sr={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},lr={class:"space-y-4"},or={class:"flex items-center justify-between"},nr={class:"flex cursor-pointer items-center",for:"enableSign"},dr={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},ir={key:0},ur={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},gr={class:"flex items-center justify-between"},cr={class:"flex space-x-3"},fr=["disabled"],br=["disabled"],xr=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const A=Oe(),{loading:L,saving:B,oemSettings:b}=De(A),$=S(),T=S("branding"),u=S(!0),C=S(new AbortController),j=be({get(){return!b.value.showAdminButton},set(r){b.value.showAdminButton=!r}}),c=S(!1),y=S(!1),Q=S(!1),V=S(!1),O={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...O},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),H=S(!1),n=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),P=S(!1),E=S(null),a=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),G=xe(T,async r=>{u.value&&(r==="webhook"?await F():r==="claude"&&await ve())}),Z=xe(()=>a.value.type,r=>{c.value=!1,y.value=!1,E.value||(r==="bark"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1):r==="smtp"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):r==="telegram"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):(a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""))}),ye=be(()=>a.value.type==="bark"?!!a.value.deviceKey:a.value.type==="telegram"?!!(a.value.botToken&&a.value.chatId):a.value.type==="smtp"?!!(a.value.host&&a.value.user&&a.value.pass&&a.value.to):!!a.value.url&&!c.value);Ve(async()=>{try{await A.loadOemSettings(),T.value==="webhook"&&await F()}catch{g("加载设置失败","error")}}),Qe(()=>{u.value=!1,C.value&&C.value.abort(),G&&G(),Z&&Z(),P.value&&(P.value=!1,E.value=null)});const F=async()=>{if(u.value)try{const r=await I.get("/admin/webhook/config",{signal:C.value.signal});if(r.success&&u.value){const e=r.config||{};k.value={...e,notificationTypes:{...O,...e.notificationTypes||{}}}}}catch(r){if(r.name==="AbortError"||!u.value)return;g("获取webhook配置失败","error"),console.error(r)}},N=async()=>{if(u.value)try{const r={...k.value,notificationTypes:{...O,...k.value.notificationTypes||{}}};(await I.post("/admin/webhook/config",r,{signal:C.value.signal})).success&&u.value&&(k.value=r,g("配置已保存","success"))}catch(r){if(r.name==="AbortError"||!u.value)return;g("保存配置失败","error"),console.error(r)}},ve=async()=>{var r,e,s,v,h,W,ne,de,ie,ue,ge,ce,fe;if(u.value){H.value=!0;try{const w=await I.get("/admin/claude-relay-config",{signal:C.value.signal});w.success&&u.value&&(n.value={claudeCodeOnlyEnabled:((r=w.config)==null?void 0:r.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((s=w.config)==null?void 0:s.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((v=w.config)==null?void 0:v.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((W=w.config)==null?void 0:W.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ne=w.config)==null?void 0:ne.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((de=w.config)==null?void 0:de.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ie=w.config)==null?void 0:ie.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ue=w.config)==null?void 0:ue.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ge=w.config)==null?void 0:ge.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((ce=w.config)==null?void 0:ce.updatedAt)||null,updatedBy:((fe=w.config)==null?void 0:fe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!u.value)return;g("获取 Claude 转发配置失败","error"),console.error(w)}finally{u.value&&(H.value=!1)}}},D=async()=>{var r,e;if(u.value)try{const s={claudeCodeOnlyEnabled:n.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:n.value.globalSessionBindingEnabled,sessionBindingErrorMessage:n.value.sessionBindingErrorMessage,sessionBindingTtlDays:n.value.sessionBindingTtlDays,userMessageQueueEnabled:n.value.userMessageQueueEnabled,userMessageQueueDelayMs:n.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:n.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:n.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:n.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:n.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:n.value.concurrentRequestQueueTimeoutMs},v=await I.put("/admin/claude-relay-config",s,{signal:C.value.signal});v.success&&u.value&&(n.value={...n.value,updatedAt:((r=v.config)==null?void 0:r.updatedAt)||new Date().toISOString(),updatedBy:((e=v.config)==null?void 0:e.updatedBy)||null},g("Claude 转发配置已保存","success"))}catch(s){if(s.name==="AbortError"||!u.value)return;g("保存 Claude 转发配置失败","error"),console.error(s)}},me=()=>{if(["bark","smtp","telegram"].includes(a.value.type)){c.value=!1,y.value=!1;return}const r=a.value.url;if(!r){c.value=!1,y.value=!1;return}try{new URL(r),r.startsWith("http://")||r.startsWith("https://")?(c.value=!1,y.value=!0):(c.value=!0,y.value=!1)}catch{c.value=!0,y.value=!1}},_=()=>{if(a.value.type==="bark"){if(!a.value.deviceKey)return g("请输入Bark设备密钥","error"),!1}else if(a.value.type==="telegram"){if(!a.value.botToken)return g("请输入 Telegram 机器人 Token","error"),!1;if(!a.value.chatId)return g("请输入 Telegram Chat ID","error"),!1;if(a.value.apiBaseUrl)try{const r=new URL(a.value.apiBaseUrl);if(!["http:","https:"].includes(r.protocol))return g("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return g("请输入有效的 Telegram API 基础地址","error"),!1}if(a.value.proxyUrl)try{const r=new URL(a.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(r.protocol))return g("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return g("请输入有效的 Telegram 代理地址","error"),!1}}else if(a.value.type==="smtp"){const r=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:s}of r)if(!a.value[e])return g(`请输入${s}`,"error"),!1}else{if(!a.value.url)return g("请输入Webhook URL","error"),!1;if(c.value)return g("请输入有效的Webhook URL","error"),!1}return!0},ke=async()=>{if(u.value&&_()){V.value=!0;try{let r;E.value?r=await I.put(`/admin/webhook/platforms/${E.value.id}`,a.value,{signal:C.value.signal}):r=await I.post("/admin/webhook/platforms",a.value,{signal:C.value.signal}),r.success&&u.value&&(g(E.value?"平台已更新":"平台已添加","success"),await F(),K())}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.message||"操作失败","error"),console.error(r)}finally{u.value&&(V.value=!1)}}},he=r=>{E.value=r,a.value={type:r.type||"wechat_work",name:r.name||"",url:r.url||"",enableSign:r.enableSign||!1,secret:r.secret||"",botToken:r.botToken||"",chatId:r.chatId||"",apiBaseUrl:r.apiBaseUrl||"",proxyUrl:r.proxyUrl||"",deviceKey:r.deviceKey||"",serverUrl:r.serverUrl||"",level:r.level||"",sound:r.sound||"",group:r.group||"",host:r.host||"",port:r.port??null,secure:r.secure||!1,user:r.user||"",pass:r.pass||"",from:r.from||"",to:Array.isArray(r.to)?r.to.join(", "):r.to||"",timeout:r.timeout??null,ignoreTLS:r.ignoreTLS||!1},P.value=!0},we=async r=>{if(u.value&&confirm("确定要删除这个平台吗?"))try{(await I.delete(`/admin/webhook/platforms/${r}`,{signal:C.value.signal})).success&&u.value&&(g("平台已删除","success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("删除失败","error"),console.error(e)}},Se=async r=>{if(u.value)try{const e=await I.post(`/admin/webhook/platforms/${r}/toggle`,{},{signal:C.value.signal});e.success&&u.value&&(g(e.message,"success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("操作失败","error"),console.error(e)}},Te=async r=>{if(u.value)try{const e={type:r.type,secret:r.secret,enableSign:r.enableSign};r.type==="bark"?(e.deviceKey=r.deviceKey,e.serverUrl=r.serverUrl,e.level=r.level,e.sound=r.sound,e.group=r.group):r.type==="smtp"?(e.host=r.host,e.port=r.port,e.secure=r.secure,e.user=r.user,e.pass=r.pass,e.from=r.from,e.to=r.to,e.ignoreTLS=r.ignoreTLS):r.type==="telegram"?(e.botToken=r.botToken,e.chatId=r.chatId,e.apiBaseUrl=r.apiBaseUrl,e.proxyUrl=r.proxyUrl):e.url=r.url,(await I.post("/admin/webhook/test",e,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(e){if(e.name==="AbortError"||!u.value)return;g(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(u.value&&_()){Q.value=!0;try{(await I.post("/admin/webhook/test",a.value,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.error||r.message||"测试失败","error"),console.error(r)}finally{u.value&&(Q.value=!1)}}},Ue=async()=>{var r,e,s,v;if(u.value)try{(await I.post("/admin/webhook/test-notification",{},{signal:C.value.signal})).success&&u.value&&g("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!u.value)return;const W=((e=(r=h==null?void 0:h.response)==null?void 0:r.data)==null?void 0:e.message)||((v=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:v.error)||(h==null?void 0:h.message)||"发送失败";g(W,"error"),console.error(h)}},K=()=>{u.value&&(P.value=!1,setTimeout(()=>{u.value&&(E.value=null,a.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},c.value=!1,y.value=!1,Q.value=!1,V.value=!1)},0))},ee=r=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[r]||r,Me=r=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[r]||"fas fa-bell",te=r=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[r]||"",Ie=r=>r?r.length<=12?r:`${r.slice(0,6)}...${r.slice(-4)}`:"",Be=r=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[r]||r,Ee=r=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[r]||"",ae=async()=>{try{const r={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton},e=await A.saveOemSettings(r);e&&e.success?g("OEM设置保存成功","success"):g((e==null?void 0:e.message)||"保存失败","error")}catch{g("保存OEM设置失败","error")}},re=async()=>{if(confirm(`确定要重置为默认设置吗? - -这将清除所有自定义的网站名称和图标设置。`))try{const r=await A.resetOemSettings();r&&r.success?g("已重置为默认设置","success"):g("重置失败","error")}catch{g("重置失败","error")}},se=async r=>{const e=r.target.files[0];if(!e)return;const s=A.validateIconFile(e);if(!s.isValid){s.errors.forEach(v=>g(v,"error"));return}try{const v=await A.fileToBase64(e);b.value.siteIconData=v}catch{g("文件读取失败","error")}r.target.value=""},le=()=>{b.value.siteIcon="",b.value.siteIconData=""},oe=()=>{console.warn("Icon failed to load")},X=A.formatDateTime;return(r,e)=>(i(),d(Y,null,[t("div",Fe,[t("div",Ne,[e[125]||(e[125]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",Ke,[t("nav",We,[t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=s=>T.value="branding")},e[47]||(e[47]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=s=>T.value="webhook")},e[48]||(e[48]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=s=>T.value="claude")},e[49]||(e[49]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2)])]),f(L)?(i(),d("div",ze,e[50]||(e[50]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(i(),d("div",$e,[o(t("div",null,[t("div",He,[t("table",Xe,[t("tbody",Je,[t("tr",Ye,[e[52]||(e[52]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ge,[o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f(b).siteName=s),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ze,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",_e,[t("div",et,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",tt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,at),e[54]||(e[54]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le},e[53]||(e[53]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:$,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[4]||(e[4]=s=>r.$refs.iconFileInput.click())},e[55]||(e[55]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[56]||(e[56]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",rt,[e[60]||(e[60]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",st,[t("div",lt,[t("label",ot,[o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[58]||(e[58]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",nt,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[59]||(e[59]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",dt,[t("div",it,[t("div",ut,[t("button",{class:R(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",ct)):(i(),d("i",ft)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,gt),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[61]||(e[61]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,bt)]),f(b).updatedAt?(i(),d("div",xt,[e[62]||(e[62]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",pt,[t("div",yt,[e[63]||(e[63]=U('

站点名称

自定义您的站点品牌名称

',1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>f(b).siteName=s),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]])]),t("div",vt,[e[67]||(e[67]=U('

站点图标

上传自定义图标或输入图标URL

',1)),t("div",mt,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",kt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,ht),e[64]||(e[64]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[7]||(e[7]=s=>r.$refs.iconFileInputMobile.click())},e[65]||(e[65]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[66]||(e[66]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",wt,[e[70]||(e[70]=U('

管理入口

控制登录按钮在首页的显示

',1)),t("div",St,[t("label",Tt,[o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[68]||(e[68]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[69]||(e[69]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Ut,[t("div",Mt,[t("button",{class:R(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",Bt)):(i(),d("i",Et)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,It),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[71]||(e[71]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,At),f(b).updatedAt?(i(),d("div",Dt,[e[72]||(e[72]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])],512),[[J,T.value==="branding"]]),o(t("div",null,[t("div",Vt,[t("div",Qt,[e[74]||(e[74]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",Rt,[o(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>k.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:N},null,544),[[q,k.value.enabled]]),e[73]||(e[73]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",qt,[e[76]||(e[76]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(i(!0),d(Y,null,pe(k.value.notificationTypes,(s,v)=>(i(),d("div",{key:v,class:"flex items-center justify-between"},[t("div",null,[t("span",Pt,m(Be(v)),1),t("span",Lt,m(Ee(v)),1)]),t("label",Ot,[o(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[v]=h,class:"peer sr-only",type:"checkbox",onChange:N},null,40,Ft),[[q,k.value.notificationTypes[v]]]),e[75]||(e[75]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[10]||(e[10]=s=>P.value=!0)},e[77]||(e[77]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(i(),d("div",Wt,[(i(!0),d(Y,null,pe(k.value.platforms,s=>(i(),d("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",$t,[t("div",Ht,[t("i",{class:R(["mr-3 text-xl",Me(s.type)])},null,2),t("div",null,[t("h3",Xt,m(s.name||ee(s.type)),1),t("p",Jt,m(ee(s.type)),1)])]),t("div",Yt,[s.type!=="smtp"&&s.type!=="telegram"?(i(),d("div",Gt,[e[79]||(e[79]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Zt,m(s.url),1)])):x("",!0),s.type==="telegram"?(i(),d("div",_t,[e[80]||(e[80]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",ea,"Chat ID: "+m(s.chatId||"未配置"),1)])):x("",!0),s.type==="telegram"&&s.botToken?(i(),d("div",ta,[e[81]||(e[81]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",aa,"Token: "+m(Ie(s.botToken)),1)])):x("",!0),s.type==="telegram"&&s.apiBaseUrl?(i(),d("div",ra,[e[82]||(e[82]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",sa,"API: "+m(s.apiBaseUrl),1)])):x("",!0),s.type==="telegram"&&s.proxyUrl?(i(),d("div",la,[e[83]||(e[83]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",oa,"代理: "+m(s.proxyUrl),1)])):x("",!0),s.type==="smtp"&&s.to?(i(),d("div",na,[e[84]||(e[84]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",da,m(Array.isArray(s.to)?s.to.join(", "):s.to),1)])):x("",!0),s.enableSign?(i(),d("div",ia,e[85]||(e[85]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",ua,[t("label",ga,[t("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:v=>Se(s.id)},null,40,ca),e[86]||(e[86]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:v=>Te(s)},e[87]||(e[87]=[t("i",{class:"fas fa-vial"},null,-1)]),8,fa),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:v=>he(s)},e[88]||(e[88]=[t("i",{class:"fas fa-edit"},null,-1)]),8,ba),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:v=>we(s.id)},e[89]||(e[89]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xa)])])]))),128))])):(i(),d("div",pa,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",ya,[e[93]||(e[93]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",va,[t("div",null,[e[90]||(e[90]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),o(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>k.value.retrySettings.maxRetries=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[91]||(e[91]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>k.value.retrySettings.retryDelay=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[92]||(e[92]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>k.value.retrySettings.timeout=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Ue},e[94]||(e[94]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[J,T.value==="webhook"]]),o(t("div",null,[H.value?(i(),d("div",ma,e[95]||(e[95]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(i(),d("div",ka,[t("div",ha,[t("div",wa,[e[97]||(e[97]=U('

仅允许 Claude Code 客户端

启用后,所有 /api/v1/messages/claude/v1/messages 端点将强制验证 Claude Code CLI 客户端

',1)),t("label",Sa,[o(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>n.value.claudeCodeOnlyEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.claudeCodeOnlyEnabled]]),e[96]||(e[96]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[98]||(e[98]=U('

此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。

',1))]),t("div",Ta,[t("div",Ca,[e[100]||(e[100]=U('

强制会话绑定

启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性

',1)),t("label",Ua,[o(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>n.value.globalSessionBindingEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.globalSessionBindingEnabled]]),e[99]||(e[99]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),n.value.globalSessionBindingEnabled?(i(),d("div",Ma,[t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),o(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>n.value.sessionBindingTtlDays=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,n.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[102]||(e[102]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[103]||(e[103]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),o(t("textarea",{"onUpdate:modelValue":e[17]||(e[17]=s=>n.value.sessionBindingErrorMessage=s),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,n.value.sessionBindingErrorMessage]]),e[104]||(e[104]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[105]||(e[105]=U('

工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。

新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。

',1))]),t("div",Ia,[t("div",Ba,[e[107]||(e[107]=U('

用户消息串行队列

启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流

',1)),t("label",Ea,[o(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>n.value.userMessageQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.userMessageQueueEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),n.value.userMessageQueueEnabled?(i(),d("div",Aa,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[19]||(e[19]=s=>n.value.userMessageQueueDelayMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[20]||(e[20]=s=>n.value.userMessageQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[112]||(e[112]=U('

工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。

',1))]),t("div",Da,[t("div",Va,[e[114]||(e[114]=U('

并发请求排队

当 API Key 并发请求超限时进入队列等待,而非直接拒绝

',1)),t("label",Qa,[o(t("input",{"onUpdate:modelValue":e[21]||(e[21]=s=>n.value.concurrentRequestQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.concurrentRequestQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),n.value.concurrentRequestQueueEnabled?(i(),d("div",Ra,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[22]||(e[22]=s=>n.value.concurrentRequestQueueMaxSize=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>n.value.concurrentRequestQueueMaxSizeMultiplier=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>n.value.concurrentRequestQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[121]||(e[121]=U('

工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。

',1))]),n.value.updatedAt?(i(),d("div",qa,[e[124]||(e[124]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+m(f(X)(n.value.updatedAt))+" ",1),n.value.updatedBy?(i(),d("span",ja,[e[122]||(e[122]=l(" 由 ",-1)),t("strong",null,m(n.value.updatedBy),1),e[123]||(e[123]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[J,T.value==="claude"]])]))])]),P.value?(i(),d("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:K},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[46]||(e[46]=Pe(()=>{},["stop"]))},[t("div",Pa,[t("div",La,[t("div",Oa,[e[126]||(e[126]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",Fa,m(E.value?"编辑":"添加")+"通知平台 ",1),t("p",Na," 配置"+m(E.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:K},e[127]||(e[127]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Ka,[t("div",Wa,[t("div",null,[e[131]||(e[131]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",za,[o(t("select",{"onUpdate:modelValue":e[25]||(e[25]=s=>a.value.type=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:E.value},e[128]||(e[128]=[U('',9)]),8,$a),[[z,a.value.type]]),e[129]||(e[129]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),E.value?(i(),d("p",Ha,e[130]||(e[130]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[132]||(e[132]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>a.value.name=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,a.value.name]])]),a.value.type!=="bark"&&a.value.type!=="smtp"&&a.value.type!=="telegram"?(i(),d("div",Xa,[e[136]||(e[136]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",Ja,[o(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>a.value.url=s),class:R(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":c.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":y.value}]),placeholder:"https://...",required:"",type:"url",onInput:me},null,34),[[p,a.value.url]]),y.value?(i(),d("div",Ya,e[133]||(e[133]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),c.value?(i(),d("div",Ga,e[134]||(e[134]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),te(a.value.type)?(i(),d("div",Za,[e[135]||(e[135]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",_a,m(te(a.value.type)),1)])):x("",!0)])):x("",!0),a.value.type==="telegram"?(i(),d("div",er,[t("div",null,[e[137]||(e[137]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>a.value.botToken=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,a.value.botToken]]),e[138]||(e[138]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[139]||(e[139]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>a.value.chatId=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,a.value.chatId]]),e[140]||(e[140]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[141]||(e[141]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>a.value.apiBaseUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,a.value.apiBaseUrl]]),e[142]||(e[142]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[143]||(e[143]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[31]||(e[31]=s=>a.value.proxyUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,a.value.proxyUrl]]),e[144]||(e[144]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[145]||(e[145]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),a.value.type==="bark"?(i(),d("div",tr,[t("div",null,[e[146]||(e[146]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>a.value.deviceKey=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,a.value.deviceKey]]),e[147]||(e[147]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[33]||(e[33]=s=>a.value.serverUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,a.value.serverUrl]])]),t("div",null,[e[150]||(e[150]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),o(t("select",{"onUpdate:modelValue":e[34]||(e[34]=s=>a.value.level=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[149]||(e[149]=[U('',5)]),512),[[z,a.value.level]])]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),o(t("select",{"onUpdate:modelValue":e[35]||(e[35]=s=>a.value.sound=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[151]||(e[151]=[U('',9)]),512),[[z,a.value.sound]])]),t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[36]||(e[36]=s=>a.value.group=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,a.value.group]])]),e[154]||(e[154]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),a.value.type==="smtp"?(i(),d("div",ar,[t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[37]||(e[37]=s=>a.value.host=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,a.value.host]])]),t("div",rr,[t("div",null,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),o(t("input",{"onUpdate:modelValue":e[38]||(e[38]=s=>a.value.port=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,a.value.port,void 0,{number:!0}]]),e[157]||(e[157]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),o(t("select",{"onUpdate:modelValue":e[39]||(e[39]=s=>a.value.secure=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[158]||(e[158]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[z,a.value.secure]])])]),t("div",null,[e[160]||(e[160]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[40]||(e[40]=s=>a.value.user=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,a.value.user]])]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[41]||(e[41]=s=>a.value.pass=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,a.value.pass]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[42]||(e[42]=s=>a.value.from=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,a.value.from]])]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[43]||(e[43]=s=>a.value.to=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,a.value.to]]),e[165]||(e[165]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),a.value.type==="dingtalk"||a.value.type==="feishu"?(i(),d("div",sr,[t("div",lr,[t("div",or,[t("label",nr,[o(t("input",{id:"enableSign","onUpdate:modelValue":e[44]||(e[44]=s=>a.value.enableSign=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[q,a.value.enableSign]]),e[166]||(e[166]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),a.value.enableSign?(i(),d("span",dr," 已启用 ")):x("",!0)]),Re(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:qe(()=>[a.value.enableSign?(i(),d("div",ir,[e[167]||(e[167]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),o(t("input",{"onUpdate:modelValue":e[45]||(e[45]=s=>a.value.secret=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,a.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ur,[t("div",gr,[e[169]||(e[169]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",cr,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:K},e[168]||(e[168]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:Q.value,onClick:Ce},[t("i",{class:R(["mr-2 transition-transform",Q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+m(Q.value?"测试中...":"测试连接"),1)],8,fr),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ye.value||V.value,onClick:ke},[t("i",{class:R(["mr-2 transition-transform",V.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+m(V.value?"保存中...":E.value?"保存修改":"添加平台"),1)],8,br)])])])])])):x("",!0)],64))}}),kr=Le(xr,[["__scopeId","data-v-d2705d9a"]]);export{kr as default}; diff --git a/assets/ThemeToggle-Dkc-_0Ud.js b/assets/ThemeToggle-Btdau4yo.js similarity index 94% rename from assets/ThemeToggle-Dkc-_0Ud.js rename to assets/ThemeToggle-Btdau4yo.js index 906c9520..58300319 100644 --- a/assets/ThemeToggle-Dkc-_0Ud.js +++ b/assets/ThemeToggle-Btdau4yo.js @@ -1 +1 @@ -import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-R8HMg95E.js";import{_ as T,a as w}from"./index-Cr7hSgrN.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T}; +import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-BVUySZOn.js";import{_ as T,a as w}from"./index-BAse2XU9.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T}; diff --git a/assets/TutorialView-C0wjIk1C.js b/assets/TutorialView-C0wjIk1C.js new file mode 100644 index 00000000..753b43c7 --- /dev/null +++ b/assets/TutorialView-C0wjIk1C.js @@ -0,0 +1 @@ +import{_}from"./index-BAse2XU9.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-BVUySZOn.js";import"./element-plus-CKhypU-Q.js";import"./vendor-Dr8jvgFu.js";import"./chart-ChB167Jv.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Windows 安装方法

方法一:官网下载(推荐)

  1. 打开浏览器访问 https://nodejs.org/
  2. 点击 "LTS" 版本进行下载(推荐长期支持版本)
  3. 下载完成后双击 .msi 文件
  4. 按照安装向导完成安装,保持默认设置即可

方法二:使用包管理器

如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:

# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
  • • 建议使用 PowerShell 而不是 CMD
  • • 如果遇到权限问题,尝试以管理员身份运行
  • • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功

安装完成后,打开 PowerShell 或 CMD,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 PowerShell 或 CMD,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。

提示
  • • 建议使用 PowerShell 而不是 CMD,功能更强大
  • • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('

查看已设置的环境变量:

# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)

💡 设置后需要重新打开 PowerShell 窗口才能生效。

',3))])])]),t[35]||(t[35]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",B,[t[14]||(t[14]=m('
验证环境变量设置

设置完环境变量后,可以通过以下命令验证是否设置成功:

在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m('
验证 Gemini CLI 环境变量

在 PowerShell 中验证:

echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json

',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude

Windows 常见问题解决

安装时提示 "permission denied" 错误

这通常是权限问题,尝试以下解决方法:

  • 以管理员身份运行 PowerShell
  • 或者配置 npm 使用用户目录:npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误

如果遇到执行策略限制,运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效

设置永久环境变量后需要:

  • 重新启动 PowerShell 或 CMD
  • 或者注销并重新登录 Windows
  • 验证设置:echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

macOS 安装方法

方法一:使用 Homebrew(推荐)

如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:

# 更新 Homebrew
brew update
# 安装 Node.js
brew install node

方法二:官网下载

  1. 访问 https://nodejs.org/
  2. 下载适合 macOS 的 LTS 版本
  3. 打开下载的 .pkg 文件
  4. 按照安装程序指引完成安装
macOS 注意事项
  • • 如果遇到权限问题,可能需要使用 sudo
  • • 首次运行可能需要在系统偏好设置中允许
  • • 建议使用 Terminal 或 iTerm2
验证安装是否成功

安装完成后,打开 Terminal,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 Terminal,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m('
验证 Gemini CLI 环境变量

在 Terminal 中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。

',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

macOS 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
macOS 安全设置阻止运行

如果系统阻止运行 Claude Code:

  • 打开"系统偏好设置" → "安全性与隐私"
  • 点击"仍要打开"或"允许"
  • 或者在 Terminal 中运行:sudo spctl --master-disable
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
  • 重新启动 Terminal
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Linux 安装方法

方法一:使用官方仓库(推荐)

# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs

方法二:使用系统包管理器

虽然版本可能不是最新的,但对于基本使用已经足够:

# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
  • • 某些发行版可能需要安装额外的依赖
  • • 如果遇到权限问题,使用 sudo
  • • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功

安装完成后,打开终端,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开终端,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m('
验证 Gemini CLI 环境变量

在终端中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",je,[t[127]||(t[127]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。

',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

Linux 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
  • 然后添加到 PATH:export PATH=~/.npm-global/bin:$PATH
缺少依赖库

某些 Linux 发行版需要安装额外依赖:

# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.bashrc 或 .zshrc)
  • 重新启动终端或运行 source ~/.bashrc
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},Je=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{Je as default}; diff --git a/assets/TutorialView-DqwFkHUw.js b/assets/TutorialView-DqwFkHUw.js deleted file mode 100644 index 427abf57..00000000 --- a/assets/TutorialView-DqwFkHUw.js +++ /dev/null @@ -1 +0,0 @@ -import{_}from"./index-Cr7hSgrN.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-R8HMg95E.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Windows 安装方法

方法一:官网下载(推荐)

  1. 打开浏览器访问 https://nodejs.org/
  2. 点击 "LTS" 版本进行下载(推荐长期支持版本)
  3. 下载完成后双击 .msi 文件
  4. 按照安装向导完成安装,保持默认设置即可

方法二:使用包管理器

如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:

# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
  • • 建议使用 PowerShell 而不是 CMD
  • • 如果遇到权限问题,尝试以管理员身份运行
  • • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功

安装完成后,打开 PowerShell 或 CMD,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 PowerShell 或 CMD,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。

提示
  • • 建议使用 PowerShell 而不是 CMD,功能更强大
  • • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('

查看已设置的环境变量:

# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)

💡 设置后需要重新打开 PowerShell 窗口才能生效。

',3))])])]),t[35]||(t[35]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",B,[t[14]||(t[14]=m('
验证环境变量设置

设置完环境变量后,可以通过以下命令验证是否设置成功:

在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m('
验证 Gemini CLI 环境变量

在 PowerShell 中验证:

echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json

',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude

Windows 常见问题解决

安装时提示 "permission denied" 错误

这通常是权限问题,尝试以下解决方法:

  • 以管理员身份运行 PowerShell
  • 或者配置 npm 使用用户目录:npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误

如果遇到执行策略限制,运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效

设置永久环境变量后需要:

  • 重新启动 PowerShell 或 CMD
  • 或者注销并重新登录 Windows
  • 验证设置:echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

macOS 安装方法

方法一:使用 Homebrew(推荐)

如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:

# 更新 Homebrew
brew update
# 安装 Node.js
brew install node

方法二:官网下载

  1. 访问 https://nodejs.org/
  2. 下载适合 macOS 的 LTS 版本
  3. 打开下载的 .pkg 文件
  4. 按照安装程序指引完成安装
macOS 注意事项
  • • 如果遇到权限问题,可能需要使用 sudo
  • • 首次运行可能需要在系统偏好设置中允许
  • • 建议使用 Terminal 或 iTerm2
验证安装是否成功

安装完成后,打开 Terminal,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 Terminal,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m('
验证 Gemini CLI 环境变量

在 Terminal 中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。

',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

macOS 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
macOS 安全设置阻止运行

如果系统阻止运行 Claude Code:

  • 打开"系统偏好设置" → "安全性与隐私"
  • 点击"仍要打开"或"允许"
  • 或者在 Terminal 中运行:sudo spctl --master-disable
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
  • 重新启动 Terminal
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Linux 安装方法

方法一:使用官方仓库(推荐)

# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs

方法二:使用系统包管理器

虽然版本可能不是最新的,但对于基本使用已经足够:

# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
  • • 某些发行版可能需要安装额外的依赖
  • • 如果遇到权限问题,使用 sudo
  • • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功

安装完成后,打开终端,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开终端,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m('
验证 Gemini CLI 环境变量

在终端中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",je,[t[127]||(t[127]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。

',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

Linux 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
  • 然后添加到 PATH:export PATH=~/.npm-global/bin:$PATH
缺少依赖库

某些 Linux 发行版需要安装额外依赖:

# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.bashrc 或 .zshrc)
  • 重新启动终端或运行 source ~/.bashrc
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},We=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{We as default}; diff --git a/assets/UserDashboardView-C3u0eacX.js b/assets/UserDashboardView-C3u0eacX.js deleted file mode 100644 index 43fcd994..00000000 --- a/assets/UserDashboardView-C3u0eacX.js +++ /dev/null @@ -1 +0,0 @@ -import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-R8HMg95E.js";import{_ as V,b as z,s as _,a as Z}from"./index-Cr7hSgrN.js";import{T as ee}from"./ThemeToggle-Dkc-_0Ud.js";import{C as te}from"./ConfirmModal-CZV4xGP-.js";import se from"./TutorialView-DqwFkHUw.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('

Daily Usage Trend

Usage Chart

Daily usage trends would be displayed here

(Chart integration can be added with Chart.js, D3.js, or similar library)

',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},Zo=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{Zo as default}; diff --git a/assets/UserDashboardView-DyavPA36.js b/assets/UserDashboardView-DyavPA36.js new file mode 100644 index 00000000..ac2cf972 --- /dev/null +++ b/assets/UserDashboardView-DyavPA36.js @@ -0,0 +1 @@ +import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-BVUySZOn.js";import{_ as V,b as z,s as _,a as Z}from"./index-BAse2XU9.js";import{T as ee}from"./ThemeToggle-Btdau4yo.js";import{C as te}from"./ConfirmModal-BGRLg47v.js";import se from"./TutorialView-C0wjIk1C.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('

Daily Usage Trend

Usage Chart

Daily usage trends would be displayed here

(Chart integration can be added with Chart.js, D3.js, or similar library)

',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},el=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{el as default}; diff --git a/assets/UserLoginView-COfwLqzh.js b/assets/UserLoginView-COfwLqzh.js new file mode 100644 index 00000000..ecfe7ee4 --- /dev/null +++ b/assets/UserLoginView-COfwLqzh.js @@ -0,0 +1 @@ +import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-BVUySZOn.js";import{_ as C,b as T,a as U,s as M}from"./index-BAse2XU9.js";import{T as B}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),s=h({username:"",password:""}),w=async()=>{var d,t;if(!s.username||!s.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:s.username,password:s.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((t=(d=o.response)==null?void 0:d.data)==null?void 0:t.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,t)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[t[7]||(t[7]=_('
Claude Relay

User Sign In

Sign in to your account to manage your API keys

',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[t[2]||(t[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":t[0]||(t[0]=l=>s.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,s.username]])])]),e("div",null,[t[3]||(t[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":t[1]||(t[1]=l=>s.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,s.password]])])]),a.value?(i(),n("div",D,[e("div",H,[t[4]||(t[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!s.username||!s.password,type:"submit"},[r.value?(i(),n("span",Y,t[5]||(t[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>t[6]||(t[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default}; diff --git a/assets/UserLoginView-qdXph3b_.js b/assets/UserLoginView-qdXph3b_.js deleted file mode 100644 index 19a5df53..00000000 --- a/assets/UserLoginView-qdXph3b_.js +++ /dev/null @@ -1 +0,0 @@ -import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-R8HMg95E.js";import{_ as C,b as T,a as U,s as M}from"./index-Cr7hSgrN.js";import{T as B}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),t=h({username:"",password:""}),w=async()=>{var d,s;if(!t.username||!t.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:t.username,password:t.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((s=(d=o.response)==null?void 0:d.data)==null?void 0:s.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,s)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[s[7]||(s[7]=_('
Claude Relay

User Sign In

Sign in to your account to manage your API keys

',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[s[2]||(s[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":s[0]||(s[0]=l=>t.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,t.username]])])]),e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=l=>t.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,t.password]])])]),a.value?(i(),n("div",D,[e("div",H,[s[4]||(s[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!t.username||!t.password,type:"submit"},[r.value?(i(),n("span",Y,s[5]||(s[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>s[6]||(s[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default}; diff --git a/assets/UserManagementView-CFT_Esng.js b/assets/UserManagementView-CFT_Esng.js new file mode 100644 index 00000000..e282d0f7 --- /dev/null +++ b/assets/UserManagementView-CFT_Esng.js @@ -0,0 +1 @@ +import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-BVUySZOn.js";import{_ as q,c as A,s as M}from"./index-BAse2XU9.js";import{C as te}from"./ConfirmModal-BGRLg47v.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./chart-ChB167Jv.js";import"./element-plus-CKhypU-Q.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},qs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{qs as default}; diff --git a/assets/UserManagementView-CUF5iwjE.js b/assets/UserManagementView-CUF5iwjE.js deleted file mode 100644 index 08457f8a..00000000 --- a/assets/UserManagementView-CUF5iwjE.js +++ /dev/null @@ -1 +0,0 @@ -import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-R8HMg95E.js";import{_ as q,c as A,s as M}from"./index-Cr7hSgrN.js";import{C as te}from"./ConfirmModal-CZV4xGP-.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./element-plus-BUfCkBQO.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},Hs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{Hs as default}; diff --git a/assets/WindowCountdown-DF7xS2EZ.js b/assets/WindowCountdown-Cb_iHkvc.js similarity index 98% rename from assets/WindowCountdown-DF7xS2EZ.js rename to assets/WindowCountdown-Cb_iHkvc.js index 9fede84a..9e278ec5 100644 --- a/assets/WindowCountdown-DF7xS2EZ.js +++ b/assets/WindowCountdown-Cb_iHkvc.js @@ -1 +1 @@ -import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-R8HMg95E.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _}; +import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-BVUySZOn.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _}; diff --git a/assets/chart-yFHxLHpB.js b/assets/chart-ChB167Jv.js similarity index 99% rename from assets/chart-yFHxLHpB.js rename to assets/chart-ChB167Jv.js index 4009691d..73fbbb75 100644 --- a/assets/chart-yFHxLHpB.js +++ b/assets/chart-ChB167Jv.js @@ -10,4 +10,4 @@ var Jn=Object.defineProperty;var Qn=(i,t,e)=>t in i?Jn(i,t,{enumerable:!0,config * Released under the MIT License */class _a{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,s,n){const o=e.listeners[n],a=e.duration;o.forEach(r=>r({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=cn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;const o=s.items;let a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const s=e.items;let n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var ht=new _a;const es="transparent",ya={boolean(i,t,e){return e>.5?t:i},color(i,t,e){const s=Yi(i||es),n=s.valid&&Yi(t||es);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}};class va{constructor(t,e,s,n){const o=e[s];n=qt([t.to,n,o,t.from]);const a=qt([t.from,o,n]);this._active=!0,this._fn=t.fn||ya[t.type||typeof a],this._easing=se[t.easing]||se.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);const n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=qt([t.to,e,n,t.from]),this._from=qt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to;let l;if(this._active=o!==r&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){const e=t?"res":"rej",s=this._promises||[];for(let n=0;n{const o=t[n];if(!T(o))return;const a={};for(const r of e)a[r]=o[r];(V(o.properties)&&o.properties||[n]).forEach(r=>{(r===n||!s.has(r))&&s.set(r,a)})})}_animateOptions(t,e){const s=e.options,n=ka(t,s);if(!n)return[];const o=this._createAnimations(n,s);return s.$shared&&Ma(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){const s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now();let l;for(l=a.length-1;l>=0;--l){const c=a[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}const h=e[c];let d=o[c];const u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new va(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const s=this._createAnimations(t,e);if(s.length)return ht.add(this._chart,s),!0}}function Ma(i,t){const e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function os(i,t){const{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=Da(o,a,s),d=t.length;let u;for(let f=0;fe[s].axis===t).shift()}function Oa(i,t){return vt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Ta(i,t,e){return vt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Yt(i,t){const e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(const n of t){const o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e],o[s]._visualValues!==void 0&&o[s]._visualValues[e]!==void 0&&delete o[s]._visualValues[e]}}}const ti=i=>i==="reset"||i==="none",as=(i,t)=>t?i:Object.assign({},i),La=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:An(e,!0),values:null};class nt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Qe(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Yt(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d==="x"?u:d==="r"?g:f,o=e.xAxisID=D(s.xAxisID,Ze(t,"x")),a=e.yAxisID=D(s.yAxisID,Ze(t,"y")),r=e.rAxisID=D(s.rAxisID,Ze(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Hi(this._data,this),t._stacked&&Yt(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(T(e)){const n=this._cachedMeta;this._data=Pa(e,n)}else if(s!==e){if(s){Hi(s,this);const n=this._cachedMeta;Yt(n),n._parsed=[]}e&&Object.isExtensible(e)&&mo(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,s=this.getDataset();let n=!1;this._dataCheck();const o=e._stacked;e._stacked=Qe(e.vScale,e),e.stack!==s.stack&&(n=!0,Yt(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&(os(this,e._parsed),e._stacked=Qe(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis;let l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{V(n[t])?u=this.parseArrayData(s,n,t,e):T(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);const f=()=>d[r]===null||c&&d[r]p||d=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(s,n,e),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(as(p,l))),p}_resolveAnimations(t,e,s){const n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){const h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}const c=new Cn(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ti(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){ti(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!ti(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,s=this._cachedMeta.data;for(const[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];const n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;rn-o))}return i._cache.$bar}function Ia(i){const t=i.iScale,e=Ra(t,i.type);let s=t._length,n,o,a,r;const l=()=>{a===32767||a===-32768||(re(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n0?n[i-1]:null,r=iMath.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function On(i,t,e,s){return V(i)?Fa(i,t,e,s):t[e.axis]=e.parse(i,s),t}function rs(i,t,e,s){const n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[];let c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function Va(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.baseh.controller.options.grouped),o=s.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[s.axis],c=h=>{const d=h._parsed.find(f=>f[s.axis]===l),u=d&&d[h.vScale.axis];if(O(u)||isNaN(u))return!0};for(const h of n)if(!(e!==void 0&&c(h))&&((o===!1||a.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&a.push(h.stack),h.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)t[D(this.chart.options.indexAxis==="x"?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){const n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,s=e.iScale,n=[];let o,a;for(o=0,a=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y),c=a._custom;return{label:s[t]||"",value:"("+r+", "+l+(c?", "+c:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;ule(v,r,l,!0)?1:Math.max(y,y*e,_,_*e),g=(v,y,_)=>le(v,r,l,!0)?-1:Math.min(y,y*e,_,_*e),p=f(0,c,d),m=f(j,h,u),b=g(R,c,d),x=g(R+j,h,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}class Ot extends nt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(T(s[t])){const{key:l="value"}=this._parsing;o=c=>+_t(s[c],l)}let a,r;for(a=t,r=t+e;a0&&!isNaN(t)?F*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const s=this.chart;let n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;nt!=="spacing",_indexable:t=>t!=="spacing"&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),M(Ot,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}});class Ce extends nt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled;let{start:r,count:l}=dn(e,n,a);this._drawStart=r,this._drawCount=l,un(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Wt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n==="none",x=e+s,v=t.length;let y=e>0&&this.getParsed(e-1);for(let _=0;_=x){S.skip=!0;continue}const w=this.getParsed(_),P=O(w[f]),C=S[u]=a.getPixelForValue(w[u],_),A=S[f]=o||P?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,w,l):w[f],_);S.skip=isNaN(C)||isNaN(A)||P,S.stop=_>0&&Math.abs(w[u]-y[u])>m,p&&(S.parsed=w,S.raw=c.data[_]),d&&(S.options=h||this.resolveDataElementOptions(_,k.active?"active":n)),b||this.updateElement(k,_,S,n),y=w}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;const o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}M(Ce,"id","line"),M(Ce,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),M(Ce,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class oe extends nt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{const o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){const o=n==="reset",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*R;let f=u,g;const p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?st(this.resolveDataElementOptions(t,e).angle||s):0}}M(oe,"id","polarArea"),M(oe,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),M(oe,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class ui extends Ot{}M(ui,"id","pie"),M(ui,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class Ae extends nt{getLabelAndValue(t){const e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){const a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);const r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){const o=this._cachedMeta.rScale,a=n==="reset";for(let r=e;r0&&this.getParsed(e-1);for(let y=e;y0&&Math.abs(k[f]-v[f])>b,m&&(S.parsed=k,S.raw=c.data[y]),u&&(S.options=d||this.resolveDataElementOptions(y,_.active?"active":n)),x||this.updateElement(_,y,S,n),v=k}this.updateSharedOptions(d,n,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}const s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;const o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}}M(Oe,"id","scatter"),M(Oe,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),M(Oe,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});var $a=Object.freeze({__proto__:null,BarController:Pe,BubbleController:De,DoughnutController:Ot,LineController:Ce,PieController:ui,PolarAreaController:oe,RadarController:Ae,ScatterController:Oe});function Pt(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ei{constructor(t){M(this,"options");this.options=t||{}}static override(t){Object.assign(Ei.prototype,t)}init(){}formats(){return Pt()}parse(){return Pt()}format(){return Pt()}add(){return Pt()}diff(){return Pt()}startOf(){return Pt()}endOf(){return Pt()}}var Ya={_date:Ei};function Ua(i,t,e,s){const{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale,l=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null;if(r&&t===r.axis&&t!=="r"&&a&&o.length){const c=r._reversePixels?go:ft;if(s){if(n._sharedOptions){const h=o[0],d=typeof h.getRange=="function"&&h.getRange(t);if(d){const u=c(o,t,e-d),f=c(o,t,e+d);return{lo:u.lo,hi:f.hi}}}}else{const h=c(o,t,e);if(l){const{vScale:d}=n._cachedMeta,{_parsed:u}=i,f=u.slice(0,h.lo+1).reverse().findIndex(p=>!O(p[d.axis]));h.lo-=Math.max(0,f);const g=u.slice(h.hi).findIndex(p=>!O(p[d.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function Xe(i,t,e,s,n){const o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r{l[a]&&l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var qa={modes:{index(i,t,e,s){const n=Ct(t,i),o=e.axis||"x",a=e.includeInvisible||!1,r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{const h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){const n=Ct(t,i),o=e.axis||"xy",a=e.includeInvisible||!1;let r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a);if(r.length>0){const l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;he.pos===t)}function ds(i,t){return i.filter(e=>Tn.indexOf(e.pos)===-1&&e.box.axis===t)}function Xt(i,t){return i.sort((e,s)=>{const n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Ja(i){const t=[];let e,s,n,o,a,r;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=Xt(Ut(t,"left"),!0),n=Xt(Ut(t,"right")),o=Xt(Ut(t,"top"),!0),a=Xt(Ut(t,"bottom")),r=ds(t,"x"),l=ds(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ut(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function us(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function Ln(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function er(i,t,e,s){const{pos:n,box:o}=e,a=i.maxPadding;if(!T(n)){e.size&&(i[n]-=e.size);const d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&Ln(a,o.getPadding());const r=Math.max(0,t.outerWidth-us(a,i,"left","right")),l=Math.max(0,t.outerHeight-us(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function ir(i){const t=i.maxPadding;function e(s){const n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function sr(i,t){const e=t.maxPadding;function s(n){const o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Jt(i,t,e,s){const n=[];let o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);Ln(u,J(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Za(l.concat(c),d);Jt(r.fullSize,f,d,g),Jt(l,f,d,g),Jt(c,f,d,g)&&Jt(l,f,d,g),ir(f),fs(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,fs(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},I(r.chartArea,p=>{const m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class Rn{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}}class nr extends Rn{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Te="$chartjs",or={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},gs=i=>i===null||i==="";function ar(i,t){const e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[Te]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",gs(n)){const o=Ji(i,"width");o!==void 0&&(i.width=o)}if(gs(s))if(i.style.height==="")i.height=i.width/(t||2);else{const o=Ji(i,"height");o!==void 0&&(i.height=o)}return i}const In=ra?{passive:!0}:!1;function rr(i,t,e){i&&i.addEventListener(t,e,In)}function lr(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,In)}function cr(i,t){const e=or[i.type]||i.type,{x:s,y:n}=Ct(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function We(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function hr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.addedNodes,s),a=a&&!We(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function dr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.removedNodes,s),a=a&&!We(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}const he=new Map;let ps=0;function En(){const i=window.devicePixelRatio;i!==ps&&(ps=i,he.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function ur(i,t){he.size||window.addEventListener("resize",En),he.set(i,t)}function fr(i){he.delete(i),he.size||window.removeEventListener("resize",En)}function gr(i,t,e){const s=i.canvas,n=s&&Ii(s);if(!n)return;const o=hn((r,l)=>{const c=n.clientWidth;e(r,l),c{const l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),ur(i,o),a}function ni(i,t,e){e&&e.disconnect(),t==="resize"&&fr(i)}function pr(i,t,e){const s=i.canvas,n=hn(o=>{i.ctx!==null&&e(cr(o,i))},i);return rr(s,t,n),n}class mr extends Rn{acquireContext(t,e){const s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(ar(t,e),s):null}releaseContext(t){const e=t.canvas;if(!e[Te])return!1;const s=e[Te].initial;["height","width"].forEach(o=>{const a=s[o];O(a)?e.removeAttribute(o):e.setAttribute(o,a)});const n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[Te],!0}addEventListener(t,e,s){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),a={attach:hr,detach:dr,resize:gr}[e]||pr;n[e]=a(t,e,s)}removeEventListener(t,e){const s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:ni,detach:ni,resize:ni}[e]||lr)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return aa(t,e,s,n)}isAttached(t){const e=t&&Ii(t);return!!(e&&e.isConnected)}}function br(i){return!Ri()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?nr:mr}class ot{constructor(){M(this,"x");M(this,"y");M(this,"active",!1);M(this,"options");M(this,"$animations")}tooltipPosition(t){const{x:e,y:s}=this.getProps(["x","y"],t);return{x:e,y:s}}hasValue(){return Wt(this.x)&&Wt(this.y)}getProps(t,e){const s=this.$animations;if(!e||!s)return this;const n={};return t.forEach(o=>{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}}M(ot,"defaults",{}),M(ot,"defaultRoutes");function xr(i,t){const e=i.options.ticks,s=_r(i),n=Math.min(e.maxTicksLimit||s,s),o=e.major.enabled?vr(t):[],a=o.length,r=o[0],l=o[a-1],c=[];if(a>n)return Mr(t,c,o,a/n),c;const h=yr(o,t,n);if(a>0){let d,u;const f=a>1?Math.round((l-r)/(a-1)):null;for(ye(t,c,h,O(f)?0:r-f,r),d=0,u=a-1;dn)return l}return Math.max(n,1)}function vr(i){const t=[];let e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,ms=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e,bs=(i,t)=>Math.min(t||i,i);function xs(i,t){const e=[],s=i.length/t,n=i.length;let o=0;for(;oa+r)))return l}function Pr(i,t){I(i,e=>{const s=e.gc,n=s.length/2;let o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:et(e,et(s,e)),max:et(s,et(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){z(this.options.beforeUpdate,[this])}update(t,e,s){const{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Bo(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=r=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}const h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-Kt(t.grid)-e.padding-_s(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=wi(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){z(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){z(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){const l=_s(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=Kt(o)+l):(t.height=this.maxHeight,t.width=Kt(o)+l),s.display&&this.ticks.length){const{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=st(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){const b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){const{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!=="top"&&this.axis==="x";if(this.isHorizontal()){const h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){z(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:a[P]||0,height:r[P]||0});return{first:w(0),last:w(e-1),widest:w(k),highest:w(S),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return fo(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&tr*n?r/s:l/n:l*n0}_computeGridLineItems(t){const e=this.axis,s=this.chart,n=this.options,{grid:o,position:a,border:r}=n,l=o.offset,c=this.isHorizontal(),d=this.ticks.length+(l?1:0),u=Kt(o),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(B){return wt(s,B,p)};let x,v,y,_,k,S,w,P,C,A,L,U;if(a==="top")x=b(this.bottom),S=this.bottom-u,P=x-m,A=b(t.top)+m,U=t.bottom;else if(a==="bottom")x=b(this.top),A=t.top,U=b(t.bottom)-m,S=x+m,P=this.top+u;else if(a==="left")x=b(this.right),k=this.right-u,w=x-m,C=b(t.left)+m,L=t.right;else if(a==="right")x=b(this.left),C=t.left,L=b(t.right)-m,k=x+m,w=this.left+u;else if(e==="x"){if(a==="center")x=b((t.top+t.bottom)/2+.5);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}A=t.top,U=t.bottom,S=x+m,P=S+u}else if(e==="y"){if(a==="center")x=b((t.left+t.right)/2);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}k=x-m,w=k-u,C=t.left,L=t.right}const tt=D(n.ticks.maxTicksLimit,d),E=Math.max(1,Math.ceil(d/tt));for(v=0;v0&&(kt-=Mt/2);break}ge={left:kt,top:$t,width:Mt+Ft.width,height:jt+Ft.height,color:E.backdropColor}}m.push({label:y,font:P,textOffset:L,options:{rotation:p,color:H,strokeColor:it,strokeWidth:X,textAlign:zt,textBaseline:U,translation:[_,k],backdrop:ge}})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-st(this.labelRotation))return t==="top"?"left":"right";let n="center";return e.align==="start"?n="left":e.align==="end"?n="right":e.align==="inner"&&(n="inner"),n}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:s,mirror:n,padding:o}}=this.options,a=this._getLabelSizes(),r=t+o,l=a.widest.width;let c,h;return e==="left"?n?(h=this.right+o,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h+=l)):(h=this.right-r,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h=this.left)):e==="right"?n?(h=this.left+o,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h-=l)):(h=this.left+r,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h=this.right)):c="right",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;if(e==="left"||e==="right")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e==="top"||e==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:s,top:n,width:o,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,n,o,a),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){const e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,a;const r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o{this.draw(o)}}]:[{z:s,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[];let o,a;for(o=0,a=e.length;o{const s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),a=t[e].split("."),r=a.pop(),l=a.join(".");W.route(o,n,l,r)})}function Rr(i){return"id"in i&&"defaults"in i}class Ir{constructor(){this.controllers=new ve(nt,"datasets",!0),this.elements=new ve(ot,"elements"),this.plugins=new ve(Object,"plugins"),this.scales=new ve(Et,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{const o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):I(n,a=>{const r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){const n=Si(t);z(s["before"+n],[],s),e[t](s),z(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;eo.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}}function zr(i){const t={},e=[],s=Object.keys(rt.plugins.items);for(let o=0;o1&&ys(i[0].toLowerCase());if(s)return s}throw new Error(`Cannot determine type of '${i}' axis. Please provide 'axis' or 'position' option.`)}function vs(i,t,e){if(e[t+"AxisID"]===i)return{axis:t}}function jr(i,t){if(t.data&&t.data.datasets){const e=t.data.datasets.filter(s=>s.xAxisID===i||s.yAxisID===i);if(e.length)return vs(i,"x",e[0])||vs(i,"y",e[0])}return{}}function $r(i,t){const e=Rt[i.type]||{scales:{}},s=t.scales||{},n=fi(i.type,t),o=Object.create(null);return Object.keys(s).forEach(a=>{const r=s[a];if(!T(r))return console.error(`Invalid scale configuration for scale: ${a}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);const l=gi(a,r,jr(a,i),W.scales[r.type]),c=Nr(l,n),h=e.scales||{};o[a]=ee(Object.create(null),[{axis:l},r,h[l],h[c]])}),i.data.datasets.forEach(a=>{const r=a.type||i.type,l=a.indexAxis||fi(r,t),h=(Rt[r]||{}).scales||{};Object.keys(h).forEach(d=>{const u=Wr(d,l),f=a[u+"AxisID"]||u;o[f]=o[f]||Object.create(null),ee(o[f],[{axis:u},s[f],h[d]])})}),Object.keys(o).forEach(a=>{const r=o[a];ee(r,[W.scales[r.type],W.scale])}),o}function zn(i){const t=i.options||(i.options={});t.plugins=D(t.plugins,{}),t.scales=$r(i,t)}function Fn(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function Yr(i){return i=i||{},i.data=Fn(i.data),zn(i),i}const Ms=new Map,Bn=new Set;function Me(i,t){let e=Ms.get(i);return e||(e=t(),Ms.set(i,e),Bn.add(e)),e}const Gt=(i,t,e)=>{const s=_t(t,e);s!==void 0&&i.add(s)};class Ur{constructor(t){this._config=Yr(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),zn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Me(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Me(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Me(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,s=this.type;return Me(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const s=this._scopeCache;let n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){const{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;const l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>Gt(l,t,d))),h.forEach(d=>Gt(l,n,d)),h.forEach(d=>Gt(l,Rt[o]||{},d)),h.forEach(d=>Gt(l,W,d)),h.forEach(d=>Gt(l,hi,d))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Bn.has(e)&&a.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Rt[e]||{},W.datasets[e]||{},{type:e},W,hi]}resolveNamedOptions(t,e,s,n=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=ks(this._resolverCache,t,n);let l=a;if(Kr(a,e)){o.$shared=!1,s=yt(s)?s():s;const c=this.createResolver(t,s,r);l=Nt(a,s,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){const{resolver:o}=ks(this._resolverCache,t,s);return T(e)?Nt(o,e,void 0,n):o}}function ks(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));const n=e.join();let o=s.get(n);return o||(o={resolver:Oi(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes("hover"))},s.set(n,o)),o}const Xr=i=>T(i)&&Object.getOwnPropertyNames(i).some(t=>yt(i[t]));function Kr(i,t){const{isScriptable:e,isIndexable:s}=mn(i);for(const n of t){const o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(yt(r)||Xr(r))||a&&V(r))return!0}return!1}var Gr="4.5.0";const qr=["top","bottom","left","right","chartArea"];function Ss(i,t){return i==="top"||i==="bottom"||qr.indexOf(i)===-1&&t==="x"}function ws(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Ps(i){const t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),z(e&&e.onComplete,[i],t)}function Jr(i){const t=i.chart,e=t.options.animation;z(e&&e.onProgress,[i],t)}function Vn(i){return Ri()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}const Le={},Ds=i=>{const t=Vn(i);return Object.values(Le).filter(e=>e.canvas===t).pop()};function Qr(i,t,e){const s=Object.keys(i);for(const n of s){const o=+n;if(o>=t){const a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function Zr(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}class pt{static register(...t){rt.add(...t),Cs()}static unregister(...t){rt.remove(...t),Cs()}constructor(t,e){const s=this.config=new Ur(e),n=Vn(t),o=Ds(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||br(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Zn(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Er,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=bo(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],Le[this.id]=this,!r||!l){console.error("Failed to create chart: can't acquire context from the given item");return}ht.listen(this,"complete",Ps),ht.listen(this,"progress",Jr),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return O(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return rt}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():qi(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Xi(this.canvas,this.ctx),this}stop(){return ht.stop(this),this}resize(t,e){ht.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,qi(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),z(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};I(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){const t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{});let o=[];e&&(o=o.concat(Object.keys(e).map(a=>{const r=e[a],l=gi(a,r),c=l==="r",h=l==="x";return{options:r,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),I(o,a=>{const r=a.options,l=r.id,c=gi(l,r),h=D(r.type,a.dtype);(r.position===void 0||Ss(r.position,c)!==Ss(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{const u=rt.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),I(n,(a,r)=>{a||delete s[r]}),I(s,a=>{q.configure(this,a,a.options),q.addBox(this,a)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(ws("z","_idx"));const{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){I(this.scales,t=>{q.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Bi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:s,start:n,count:o}of e){const a=s==="_removeElements"?-o:o;Qr(t,n,a)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+","+a.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;q.update(this,this.width,this.height,t);const e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],I(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=Dn(this,t);this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(n&&$e(e,n),t.controller.draw(),n&&Ye(e),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(t){return gt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){const o=qa.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=vt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);re(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ht.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};I(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let a;const r=()=>{n("attach",r),this.attached=!0,this.resize(),s("resize",o),s("detach",a)};a=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){I(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},I(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){const n=s?"set":"remove";let o,a,r,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),r=0,l=t.length;r{const r=this.getDatasetMeta(o);if(!r)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:r.data[a],index:a}});!Ee(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,s){const n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){const s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;const o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){const{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=oo(t),c=Zr(t,this._lastEvent,s,l);s&&(this._lastEvent=null,z(o.onHover,[t,r,this],this),l&&z(o.onClick,[t,r,this],this));const h=!Ee(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}}M(pt,"defaults",W),M(pt,"instances",Le),M(pt,"overrides",Rt),M(pt,"registry",rt),M(pt,"version",Gr),M(pt,"getChart",Ds);function Cs(){return I(pt.instances,i=>i._plugins.invalidate())}function tl(i,t,e){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,d=Math.min(c/a,G(s-e));if(i.beginPath(),i.arc(n,o,a-c/2,s+d/2,e-d/2),r>0){const u=Math.min(c/r,G(s-e));i.arc(n,o,r+c/2,e-u/2,s+u/2,!0)}else{const u=Math.min(c/2,a*G(s-e));if(h==="round")i.arc(n,o,u,e-R/2,s+R/2,!0);else if(h==="bevel"){const f=2*u*u,g=-f*Math.cos(e+R/2)+n,p=-f*Math.sin(e+R/2)+o,m=f*Math.cos(s+R/2)+n,b=f*Math.sin(s+R/2)+o;i.lineTo(g,p),i.lineTo(m,b)}}i.closePath(),i.moveTo(0,0),i.rect(0,0,i.canvas.width,i.canvas.height),i.clip("evenodd")}function el(i,t,e){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t;let c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+j,s-j),i.closePath(),i.clip()}function il(i){return Ai(i,["outerStart","outerEnd","innerStart","innerEnd"])}function sl(i,t,e,s){const n=il(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{const c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Bt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function Ne(i,t,e,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0;let f=0;const g=n-l;if(s){const E=h>0?h-s:0,B=d>0?d-s:0,H=(E+B)/2,it=H!==0?g*H/(H+s):g;f=(g-it)/2}const p=Math.max(.001,g*d-e/R)/d,m=(g-p)/2,b=l+m+f,x=n-m-f,{outerStart:v,outerEnd:y,innerStart:_,innerEnd:k}=sl(t,u,d,x-b),S=d-v,w=d-y,P=b+v/S,C=x-y/w,A=u+_,L=u+k,U=b+_/A,tt=x-k/L;if(i.beginPath(),o){const E=(P+C)/2;if(i.arc(a,r,d,P,E),i.arc(a,r,d,E,C),y>0){const X=Bt(w,C,a,r);i.arc(X.x,X.y,y,C,x+j)}const B=Bt(L,x,a,r);if(i.lineTo(B.x,B.y),k>0){const X=Bt(L,tt,a,r);i.arc(X.x,X.y,k,x+j,tt+Math.PI)}const H=(x-k/u+(b+_/u))/2;if(i.arc(a,r,u,x-k/u,H,!0),i.arc(a,r,u,H,b+_/u,!0),_>0){const X=Bt(A,U,a,r);i.arc(X.x,X.y,_,U+Math.PI,b-j)}const it=Bt(S,b,a,r);if(i.lineTo(it.x,it.y),v>0){const X=Bt(S,P,a,r);i.arc(X.x,X.y,v,b-j,P)}}else{i.moveTo(a,r);const E=Math.cos(P)*d+a,B=Math.sin(P)*d+r;i.lineTo(E,B);const H=Math.cos(C)*d+a,it=Math.sin(C)*d+r;i.lineTo(H,it)}i.closePath()}function nl(i,t,e,s,n){const{fullCircles:o,startAngle:a,circumference:r}=t;let l=t.endAngle;if(o){Ne(i,t,e,s,l,n);for(let c=0;c=R&&f===0&&h!=="miter"&&tl(i,t,p),o||(Ne(i,t,e,s,p,n),i.stroke())}class Qt extends ot{constructor(e){super();M(this,"circumference");M(this,"endAngle");M(this,"fullCircles");M(this,"innerRadius");M(this,"outerRadius");M(this,"pixelMargin");M(this,"startAngle");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,s,n){const o=this.getProps(["x","y"],n),{angle:a,distance:r}=an(o,{x:e,y:s}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:d,circumference:u}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],n),f=(this.options.spacing+this.options.borderWidth)/2,g=D(u,c-l),p=le(a,l,c)&&l!==c,m=g>=F||p,b=ut(r,h+f,d+f);return m&&b}getCenterPoint(e){const{x:s,y:n,startAngle:o,endAngle:a,innerRadius:r,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:c,spacing:h}=this.options,d=(o+a)/2,u=(r+l+h+c)/2;return{x:s+Math.cos(d)*u,y:n+Math.sin(d)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:s,circumference:n}=this,o=(s.offset||0)/4,a=(s.spacing||0)/2,r=s.circular;if(this.pixelMargin=s.borderAlign==="inner"?.33:0,this.fullCircles=n>F?Math.floor(n/F):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();const l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(R,n||0)),h=o*c;e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,nl(e,this,h,a,r),ol(e,this,h,a,r),e.restore()}}M(Qt,"id","arc"),M(Qt,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),M(Qt,"defaultRoutes",{backgroundColor:"backgroundColor"}),M(Qt,"descriptors",{_scriptable:!0,_indexable:e=>e!=="borderDash"});function Wn(i,t,e=t){i.lineCap=D(e.borderCapStyle,t.borderCapStyle),i.setLineDash(D(e.borderDash,t.borderDash)),i.lineDashOffset=D(e.borderDashOffset,t.borderDashOffset),i.lineJoin=D(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=D(e.borderWidth,t.borderWidth),i.strokeStyle=D(e.borderColor,t.borderColor)}function al(i,t,e){i.lineTo(e.x,e.y)}function rl(i){return i.stepped?Ao:i.tension||i.cubicInterpolationMode==="monotone"?Oo:al}function Nn(i,t,e={}){const s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=nr&&o>r;return{count:s,start:l,loop:t.loop,ilen:c(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[x(u)],f.skip)continue;const y=f.x,_=f.y,k=y|0;k===g?(_m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=k,d=0,p=m=_),b=_}v()}function pi(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?cl:ll}function hl(i){return i.stepped?la:i.tension||i.cubicInterpolationMode==="monotone"?ca:At}function dl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wn(i,t.options),i.stroke(n)}function ul(i,t,e,s){const{segments:n,options:o}=t,a=pi(t);for(const r of n)Wn(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}const fl=typeof Path2D=="function";function gl(i,t,e,s){fl&&!t.options.segment?dl(i,t,e,s):ul(i,t,e,s)}class bt extends ot{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){const n=s.spanGaps?this._loop:this._fullLoop;ta(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=pa(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,n=t[e],o=this.points,a=Pn(this,{property:e,start:n,end:n});if(!a.length)return;const r=[],l=hl(s);let c,h;for(c=0,h=a.length;ct!=="borderDash"&&t!=="fill"});function As(i,t,e,s){const n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)i.replace("rgb(","rgba(").replace(")",", 0.5)"));function jn(i){return mi[i%mi.length]}function $n(i){return Os[i%Os.length]}function vl(i,t){return i.borderColor=jn(t),i.backgroundColor=$n(t),++t}function Ml(i,t){return i.backgroundColor=i.data.map(()=>jn(t++)),t}function kl(i,t){return i.backgroundColor=i.data.map(()=>$n(t++)),t}function Sl(i){let t=0;return(e,s)=>{const n=i.getDatasetMeta(s).controller;n instanceof Ot?t=Ml(e,t):n instanceof oe?t=kl(e,t):n&&(t=vl(e,t))}}function Ts(i){let t;for(t in i)if(i[t].borderColor||i[t].backgroundColor)return!0;return!1}function wl(i){return i&&(i.borderColor||i.backgroundColor)}function Pl(){return W.borderColor!=="rgba(0,0,0,0.1)"||W.backgroundColor!=="rgba(0,0,0,0.1)"}var Dl={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(i,t,e){if(!e.enabled)return;const{data:{datasets:s},options:n}=i.config,{elements:o}=n,a=Ts(s)||wl(n)||o&&Ts(o)||Pl();if(!e.forceOverride&&a)return;const r=Sl(i);s.forEach(r)}};function Cl(i,t,e,s,n){const o=n.samples||s;if(o>=e)return i.slice(t,t+e);const a=[],r=(e-2)/(o-2);let l=0;const c=t+e-1;let h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;df&&(f=g,u=i[x],p=x);a[l++]=u,h=p}return a[l++]=i[c],a}function Al(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p;const m=[],b=t+e-1,x=i[t].x,y=i[b].x-x;for(a=t;ap&&(p=c,u=a),n=(o*n+r.x)/++o;else{const k=a-1;if(!O(d)&&!O(u)){const S=Math.min(d,u),w=Math.max(d,u);S!==f&&S!==k&&m.push({...i[S],x:n}),w!==f&&w!==k&&m.push({...i[w],x:n})}a>0&&k!==f&&m.push(i[k]),m.push(r),h=_,o=0,g=p=c,d=u=f=a}}return m}function Yn(i){if(i._decimated){const t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function Ls(i){i.data.datasets.forEach(t=>{Yn(t)})}function Ol(i,t){const e=t.length;let s=0,n;const{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(ft(t,o.axis,a).lo,0,e-1)),c?n=Y(ft(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var Tl={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Ls(i);return}const s=i.width;i.data.datasets.forEach((n,o)=>{const{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(qt([r,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;const h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=Ol(l,c);const f=e.threshold||4*s;if(u<=f){Yn(n);return}O(a)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case"lttb":g=Cl(c,d,u,s,e);break;case"min-max":g=Al(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){Ls(i)}};function Ll(i,t,e){const s=i.segments,n=i.points,o=t.points,a=[];for(const r of s){let{start:l,end:c}=r;c=Ke(l,c,n);const h=bi(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}const d=Pn(t,h);for(const u of d){const f=bi(e,o[u.start],o[u.end],u.loop),g=wn(r,n,f);for(const p of g)a.push({source:p,target:u,start:{[e]:Rs(h,f,"start",Math.max)},end:{[e]:Rs(h,f,"end",Math.min)}})}}return a}function bi(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=G(n),o=G(o)),{property:i,start:n,end:o}}function Rl(i,t){const{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Ke(a,r,n);const l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Ke(i,t,e){for(;t>i;t--){const s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function Rs(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Un(i,t){let e=[],s=!1;return V(i)?(s=!0,e=i):e=Rl(i,t),e.length?new bt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Is(i){return i&&i.fill!==!1}function Il(i,t,e){let n=i[t].fill;const o=[t];let a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!N(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function El(i,t,e){const s=Vl(i);if(T(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return N(n)&&Math.floor(n)===n?zl(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function zl(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Fl(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:T(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Bl(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:T(i)?s=i.value:s=t.getBaseValue(),s}function Vl(i){const t=i.options,e=t.fill;let s=D(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Wl(i){const{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=Nl(t,e);r.push(Un({x:null,y:t.bottom},s));for(let l=0;l=0;--a){const r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&ri(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){const o=s[n].$filler;Is(o)&&ri(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){const s=t.meta.$filler;!Is(s)||e.drawTime!=="beforeDatasetDraw"||ri(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Bs=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},Ql=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index;class Vs extends ot{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=z(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=Bs(s,o);let c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,n,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){const{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r;let d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{const m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){const{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t;let d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{const{itemWidth:x,itemHeight:v}=Zl(s,e,o,m,n);b>0&&f+v+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:x,height:v},u=Math.max(u,x),f+=v+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Vt(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=K(s,this.left+n,this.right-this.lineWidths[r]);for(const c of e)r!==c.row&&(r=c.row,l=K(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(const c of e)c.col!==r&&(r=c.col,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;$e(t,this),this._draw(),Ye(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=W.color,l=Vt(t.rtl,this.left,this.width),c=$(a.font),{padding:h}=a,d=c.size,u=d/2;let f;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=Bs(a,d),b=function(k,S,w){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();const P=D(w.lineWidth,1);if(n.fillStyle=D(w.fillStyle,r),n.lineCap=D(w.lineCap,"butt"),n.lineDashOffset=D(w.lineDashOffset,0),n.lineJoin=D(w.lineJoin,"miter"),n.lineWidth=P,n.strokeStyle=D(w.strokeStyle,r),n.setLineDash(D(w.lineDash,[])),a.usePointStyle){const C={radius:p*Math.SQRT2/2,pointStyle:w.pointStyle,rotation:w.rotation,borderWidth:P},A=l.xPlus(k,g/2),L=S+u;gn(n,C,A,L,a.pointStyleWidth&&g)}else{const C=S+Math.max((d-p)/2,0),A=l.leftForLtr(k,g),L=Tt(w.borderRadius);n.beginPath(),Object.values(L).some(U=>U!==0)?ce(n,{x:A,y:C,w:g,h:p,radius:L}):n.rect(A,C,g,p),n.fill(),P!==0&&n.stroke()}n.restore()},x=function(k,S,w){It(n,w.text,k,S+m/2,c,{strikethrough:w.hidden,textAlign:l.textAlign(w.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();v?f={x:K(o,this.left+h,this.right-s[0]),y:this.top+h+y,line:0}:f={x:this.left+h,y:K(o,this.top+y+h,this.bottom-e[0].height),line:0},Mn(this.ctx,t.textDirection);const _=m+h;this.legendItems.forEach((k,S)=>{n.strokeStyle=k.fontColor,n.fillStyle=k.fontColor;const w=n.measureText(k.text).width,P=l.textAlign(k.textAlign||(k.textAlign=a.textAlign)),C=g+u+w;let A=f.x,L=f.y;l.setWidth(this.width),v?S>0&&A+C+h>this.right&&(L=f.y+=_,f.line++,A=f.x=K(o,this.left+h,this.right-s[f.line])):S>0&&L+_>this.bottom&&(A=f.x=A+e[f.line].width+h,f.line++,L=f.y=K(o,this.top+y+h,this.bottom-e[f.line].height));const U=l.x(A);if(b(U,L,k),A=xo(P,A+g+u,v?A+C:this.right,t.rtl),x(l.x(A),L,k),v)f.x+=C+h;else if(typeof k.text!="string"){const tt=c.lineHeight;f.y+=Kn(k,tt)+h}else f.y+=_}),kn(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,s=$(e.font),n=J(e.padding);if(!e.display)return;const o=Vt(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l;let h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=K(t.align,d,this.right-u);else{const g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+K(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=K(r,d,d+u);a.textAlign=o.textAlign(Di(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,It(a,e.text,f,h,s)}_computeTitleHeight(){const t=this.options.title,e=$(t.font),s=J(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(ut(t,this.left,this.right)&&ut(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;so.length>a.length?o:a)),t+e.size/2+s.measureText(n).width}function ec(i,t,e){let s=i;return typeof t.text!="string"&&(s=Kn(t,e)),s}function Kn(i,t){const e=i.text?i.text.length:0;return t*e}function ic(i,t){return!!((i==="mousemove"||i==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(i==="click"||i==="mouseup"))}var sc={id:"legend",_element:Vs,start(i,t,e){const s=i.legend=new Vs({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s)},stop(i){q.removeBox(i,i.legend),delete i.legend},beforeUpdate(i,t,e){const s=i.legend;q.configure(i,s,e),s.options=e},afterUpdate(i){const t=i.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(i,t){t.replay||i.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(i,t,e){const s=t.datasetIndex,n=e.chart;n.isDatasetVisible(s)?(n.hide(s),t.hidden=!0):(n.show(s),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:i=>i.chart.options.color,boxWidth:40,padding:10,generateLabels(i){const t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=i.legend.options;return i._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(e?0:void 0),h=J(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:s||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:a&&(r||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}};class zi extends ot{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;const n=V(s.text)?s.text.length:1;this._padding=J(s.padding);const o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align;let l=0,c,h,d;return this.isHorizontal()?(h=K(r,s,o),d=e+t,c=o-s):(a.position==="left"?(h=s+t,d=K(r,n,e),l=R*-.5):(h=o-t,d=K(r,e,n),l=R*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);It(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:Di(e.align),textBaseline:"middle",translation:[a,r]})}}function nc(i,t){const e=new zi({ctx:i.ctx,options:t,chart:i});q.configure(i,e,t),q.addBox(i,e),i.titleBlock=e}var oc={id:"title",_element:zi,start(i,t,e){nc(i,e)},stop(i){const t=i.titleBlock;q.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){const s=i.titleBlock;q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ke=new WeakMap;var ac={id:"subtitle",start(i,t,e){const s=new zi({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s),ke.set(i,s)},stop(i){q.removeBox(i,ke.get(i)),ke.delete(i)},beforeUpdate(i,t,e){const s=ke.get(i);q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Zt={average(i){if(!i.length)return!1;let t,e,s=new Set,n=0,o=0;for(t=0,e=i.length;tr+l)/s.size,y:n/o}},nearest(i,t){if(!i.length)return!1;let e=t.x,s=t.y,n=Number.POSITIVE_INFINITY,o,a,r;for(o=0,a=i.length;o-1?i.split(` -`):i}function rc(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Ws(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=J(t.padding);let p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){const y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,I(i.title,v),e.font=l.string,I(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,I(s,y=>{I(y.before,v),I(y.lines,v),I(y.after,v)}),x=0,e.font=h.string,I(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function lc(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),I(r,h=>{const d=$s(t.callbacks,h);n.push(Q(d,"labelColor",this,h)),o.push(Q(d,"labelPointStyle",this,h)),a.push(Q(d,"labelTextColor",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const r=Zt[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const l=this._size=Ws(this,s),c=Object.assign({},r,l),h=Ns(this.chart,s,c),d=Hs(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,b,x,v,y,_;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){const n=this.title,o=n.length;let a,r,l;if(o){const c=Vt(s.rtl,this.x,this.width);for(t.x=Se(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lx!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ce(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ce(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont);let u=d.lineHeight,f=0;const g=Vt(s.rtl,this.x,this.width),p=function(w){e.fillText(w,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let b,x,v,y,_,k,S;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Se(this,m,s),e.fillStyle=s.bodyColor,I(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,k=n.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const a=Zt[t.position].call(this,this._active,this._eventPosition);if(!a)return;const r=this._size=Ws(this,t),l=Object.assign({},a,this._size),c=Ns(e,t,l),h=Hs(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=J(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Mn(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),kn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:r,index:l})=>{const c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!Ee(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!Ee(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);const a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,a=Zt[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}}M(xi,"positioners",Zt);var gc={id:"tooltip",_element:xi,positioners:Zt,afterInit(i,t,e){e&&(i.tooltip=new xi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Gn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:i=>i!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},pc=Object.freeze({__proto__:null,Colors:Dl,Decimation:Tl,Filler:Jl,Legend:sc,SubTitle:ac,Title:oc,Tooltip:gc});const mc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function bc(i,t,e,s){const n=i.indexOf(t);if(n===-1)return mc(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const xc=(i,t)=>i===null?null:Y(Math.round(i),0,t);function Ys(i){const t=this.getLabels();return i>=0&&ie.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}M(_i,"id","category"),M(_i,"defaults",{ticks:{callback:Ys}});function _c(i,t){const e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1);let _=Wi((m-p)/g/f)*f,k,S,w,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Wi(P*_/g/f)*f),O(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n==="ticks"?(S=Math.floor(p/_)*_,w=Math.ceil(m/_)*_):(S=p,w=m),b&&x&&o&&ho((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,S=a,w=r):v?(S=b?a:S,w=x?r:w,P=c-1,_=(w-S)/P):(P=(w-S)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));const C=Math.max(Ni(_),Ni(S));k=Math.pow(10,O(l)?C:l),S=Math.round(S*k)/k,w=Math.round(w*k)/k;let A=0;for(b&&(u&&S!==a?(e.push({value:a}),Sr)break;e.push({value:L})}return x&&u&&w!==r?e.length&&ie(e[e.length-1].value,r,Us(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||w===r)&&e.push({value:w}),e}function Us(i,t,{horizontal:e,minRotation:s}){const n=st(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(""+i).length;return Math.min(t/o,a)}class He extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:n,max:o}=this;const a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){const l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=_c(n,o);return t.bounds==="ticks"&&on(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return fe(t,this.chart.options.locale,this.options.ticks.format)}}class yi extends He{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=st(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}M(yi,"id","linear"),M(yi,"defaults",{ticks:{callback:je.formatters.numeric}});const de=i=>Math.floor(mt(i)),Dt=(i,t)=>Math.pow(10,de(i)+t);function Xs(i){return i/Math.pow(10,de(i))===1}function Ks(i,t,e){const s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function yc(i,t){const e=t-i;let s=de(e);for(;Ks(i,t,s)>10;)s++;for(;Ks(i,t,s)<10;)s--;return Math.min(s,de(i))}function vc(i,{min:t,max:e}){t=et(i.min,t);const s=[],n=de(t);let o=yc(t,e),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10;let d=Math.floor((c-h)/Math.pow(10,o)),u=et(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;const f=et(i.max,u);return s.push({value:f,major:Xs(f),significand:d}),s}class vi extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=He.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Dt(this.min,0)?Dt(this.min,-1):Dt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Dt(s,-1)),a(Dt(n,1)))),s<=0&&o(Dt(n,-1)),n<=0&&a(Dt(s,1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=vc(e,this);return t.bounds==="ticks"&&on(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":fe(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}M(vi,"id","logarithmic"),M(vi,"defaults",{ticks:{callback:je.formatters.logarithmic,major:{enabled:!0}}});function Mi(i){const t=i.ticks;if(t.display&&i.display){const e=J(t.backdropPadding);return D(t.font&&t.font.size,W.font.size)+e.height}return 0}function Mc(i,t,e){return e=V(e)?e:[e],{w:Co(i,t.string,e),h:e.length*t.lineHeight}}function Gs(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function wc(i,t,e){const s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(wi(G(l.angle+j))),h=Oc(l.y,r.h,c),d=Cc(c),u=Ac(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function Pc(i,t){if(!t)return!0;const{left:e,top:s,right:n,bottom:o}=i;return!(gt({x:e,y:s},t)||gt({x:e,y:o},t)||gt({x:n,y:s},t)||gt({x:n,y:o},t))}function Dc(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Mi(o)/2,additionalAngle:a?R/n:0};let c;for(let h=0;h270||e<90)&&(i-=t),i}function Tc(i,t,e){const{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){const l=Tt(t.borderRadius),c=J(t.backdropPadding);i.fillStyle=r;const h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),ce(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function Lc(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=i._pointLabelItems[n];if(!o.visible)continue;const a=s.setContext(i.getPointLabelContext(n));Tc(e,a,o);const r=$(a.font),{x:l,y:c,textAlign:h}=o;It(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:"middle"})}}function qn(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);const u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Rc(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){const h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;const d=J(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}It(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}M(te,"id","radialLinear"),M(te,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:je.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M(te,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),M(te,"descriptors",{angleLines:{_fallback:"grid"}});const Ge={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(Ge);function qs(i,t){return i-t}function Js(i,t){if(O(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let a=t;return typeof s=="function"&&(a=s(a)),N(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Wt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function Qs(i,t,e,s){const n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){const a=Z[o];if(Ge[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function zc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function Fc(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function tn(i,t,e){const s=[],n={},o=t.length;let a,r;for(a=0;a+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Qs(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Wt(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);const g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;an-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(we(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return we(this._table,s*this._tableRange+this._minPos,!0)}}M(ki,"id","timeseries"),M(ki,"defaults",ue.defaults);var Bc=Object.freeze({__proto__:null,CategoryScale:_i,LinearScale:yi,LogarithmicScale:vi,RadialLinearScale:te,TimeScale:ue,TimeSeriesScale:ki});const Vc=[$a,yl,pc,Bc];pt.register(...Vc);export{pt as C}; +`):i}function rc(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Ws(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=J(t.padding);let p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){const y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,I(i.title,v),e.font=l.string,I(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,I(s,y=>{I(y.before,v),I(y.lines,v),I(y.after,v)}),x=0,e.font=h.string,I(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function lc(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),I(r,h=>{const d=$s(t.callbacks,h);n.push(Q(d,"labelColor",this,h)),o.push(Q(d,"labelPointStyle",this,h)),a.push(Q(d,"labelTextColor",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const r=Zt[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const l=this._size=Ws(this,s),c=Object.assign({},r,l),h=Ns(this.chart,s,c),d=Hs(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,b,x,v,y,_;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){const n=this.title,o=n.length;let a,r,l;if(o){const c=Vt(s.rtl,this.x,this.width);for(t.x=Se(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lx!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ce(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ce(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont);let u=d.lineHeight,f=0;const g=Vt(s.rtl,this.x,this.width),p=function(w){e.fillText(w,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let b,x,v,y,_,k,S;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Se(this,m,s),e.fillStyle=s.bodyColor,I(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,k=n.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const a=Zt[t.position].call(this,this._active,this._eventPosition);if(!a)return;const r=this._size=Ws(this,t),l=Object.assign({},a,this._size),c=Ns(e,t,l),h=Hs(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=J(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Mn(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),kn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:r,index:l})=>{const c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!Ee(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!Ee(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);const a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,a=Zt[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}}M(xi,"positioners",Zt);var gc={id:"tooltip",_element:xi,positioners:Zt,afterInit(i,t,e){e&&(i.tooltip=new xi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Gn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:i=>i!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},pc=Object.freeze({__proto__:null,Colors:Dl,Decimation:Tl,Filler:Jl,Legend:sc,SubTitle:ac,Title:oc,Tooltip:gc});const mc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function bc(i,t,e,s){const n=i.indexOf(t);if(n===-1)return mc(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const xc=(i,t)=>i===null?null:Y(Math.round(i),0,t);function Ys(i){const t=this.getLabels();return i>=0&&ie.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}M(_i,"id","category"),M(_i,"defaults",{ticks:{callback:Ys}});function _c(i,t){const e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1);let _=Wi((m-p)/g/f)*f,k,S,w,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Wi(P*_/g/f)*f),O(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n==="ticks"?(S=Math.floor(p/_)*_,w=Math.ceil(m/_)*_):(S=p,w=m),b&&x&&o&&ho((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,S=a,w=r):v?(S=b?a:S,w=x?r:w,P=c-1,_=(w-S)/P):(P=(w-S)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));const C=Math.max(Ni(_),Ni(S));k=Math.pow(10,O(l)?C:l),S=Math.round(S*k)/k,w=Math.round(w*k)/k;let A=0;for(b&&(u&&S!==a?(e.push({value:a}),Sr)break;e.push({value:L})}return x&&u&&w!==r?e.length&&ie(e[e.length-1].value,r,Us(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||w===r)&&e.push({value:w}),e}function Us(i,t,{horizontal:e,minRotation:s}){const n=st(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(""+i).length;return Math.min(t/o,a)}class He extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:n,max:o}=this;const a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){const l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=_c(n,o);return t.bounds==="ticks"&&on(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return fe(t,this.chart.options.locale,this.options.ticks.format)}}class yi extends He{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=st(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}M(yi,"id","linear"),M(yi,"defaults",{ticks:{callback:je.formatters.numeric}});const de=i=>Math.floor(mt(i)),Dt=(i,t)=>Math.pow(10,de(i)+t);function Xs(i){return i/Math.pow(10,de(i))===1}function Ks(i,t,e){const s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function yc(i,t){const e=t-i;let s=de(e);for(;Ks(i,t,s)>10;)s++;for(;Ks(i,t,s)<10;)s--;return Math.min(s,de(i))}function vc(i,{min:t,max:e}){t=et(i.min,t);const s=[],n=de(t);let o=yc(t,e),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10;let d=Math.floor((c-h)/Math.pow(10,o)),u=et(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;const f=et(i.max,u);return s.push({value:f,major:Xs(f),significand:d}),s}class vi extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=He.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Dt(this.min,0)?Dt(this.min,-1):Dt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Dt(s,-1)),a(Dt(n,1)))),s<=0&&o(Dt(n,-1)),n<=0&&a(Dt(s,1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=vc(e,this);return t.bounds==="ticks"&&on(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":fe(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}M(vi,"id","logarithmic"),M(vi,"defaults",{ticks:{callback:je.formatters.logarithmic,major:{enabled:!0}}});function Mi(i){const t=i.ticks;if(t.display&&i.display){const e=J(t.backdropPadding);return D(t.font&&t.font.size,W.font.size)+e.height}return 0}function Mc(i,t,e){return e=V(e)?e:[e],{w:Co(i,t.string,e),h:e.length*t.lineHeight}}function Gs(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function wc(i,t,e){const s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(wi(G(l.angle+j))),h=Oc(l.y,r.h,c),d=Cc(c),u=Ac(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function Pc(i,t){if(!t)return!0;const{left:e,top:s,right:n,bottom:o}=i;return!(gt({x:e,y:s},t)||gt({x:e,y:o},t)||gt({x:n,y:s},t)||gt({x:n,y:o},t))}function Dc(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Mi(o)/2,additionalAngle:a?R/n:0};let c;for(let h=0;h270||e<90)&&(i-=t),i}function Tc(i,t,e){const{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){const l=Tt(t.borderRadius),c=J(t.backdropPadding);i.fillStyle=r;const h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),ce(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function Lc(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=i._pointLabelItems[n];if(!o.visible)continue;const a=s.setContext(i.getPointLabelContext(n));Tc(e,a,o);const r=$(a.font),{x:l,y:c,textAlign:h}=o;It(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:"middle"})}}function qn(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);const u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Rc(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){const h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;const d=J(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}It(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}M(te,"id","radialLinear"),M(te,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:je.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M(te,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),M(te,"descriptors",{angleLines:{_fallback:"grid"}});const Ge={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(Ge);function qs(i,t){return i-t}function Js(i,t){if(O(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let a=t;return typeof s=="function"&&(a=s(a)),N(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Wt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function Qs(i,t,e,s){const n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){const a=Z[o];if(Ge[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function zc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function Fc(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function tn(i,t,e){const s=[],n={},o=t.length;let a,r;for(a=0;a+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Qs(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Wt(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);const g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;an-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(we(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return we(this._table,s*this._tableRange+this._minPos,!0)}}M(ki,"id","timeseries"),M(ki,"defaults",ue.defaults);var Bc=Object.freeze({__proto__:null,CategoryScale:_i,LinearScale:yi,LogarithmicScale:vi,RadialLinearScale:te,TimeScale:ue,TimeSeriesScale:ki});const Vc=[$a,yl,pc,Bc];pt.register(...Vc);export{Qt as A,pt as C,Ot as D,Ce as L,Re as P,_i as a,yi as b,bt as c,gc as d,sc as e,Jl as i,oc as p}; diff --git a/assets/element-plus-BUfCkBQO.js b/assets/element-plus-CKhypU-Q.js similarity index 99% rename from assets/element-plus-BUfCkBQO.js rename to assets/element-plus-CKhypU-Q.js index 1fe2d08a..42a4d848 100644 --- a/assets/element-plus-BUfCkBQO.js +++ b/assets/element-plus-CKhypU-Q.js @@ -1,4 +1,4 @@ -import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-R8HMg95E.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(` +import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-BVUySZOn.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(` Add an empty element to avoid render label, do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 `),F("span")]),_:1},8,["model-value","label","disabled","onClick"])):o(d)&&e.node.checked?(_(),oe(o(Se),{key:2,class:T(o(a).e("prefix"))},{default:U(()=>[H(o(va))]),_:1},8,["class"])):J("v-if",!0),H(o(xy),{"render-label-fn":o(l).renderLabelFn,node:e.node},null,8,["render-label-fn","node"]),J(" postfix "),o(d)?J("v-if",!0):(_(),V(Oe,{key:3},[e.node.loading?(_(),oe(o(Se),{key:0,class:T([o(a).is("loading"),o(a).e("postfix")])},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])):(_(),oe(o(Se),{key:1,class:T(["arrow-right",o(a).e("postfix")])},{default:U(()=>[H(o(Cn))]),_:1},8,["class"]))],64))],42,["id","aria-haspopup","aria-owns","aria-expanded","tabindex"]))}});var Ky=fe(Hy,[["__file","node.vue"]]);const Wy=x({name:"ElCascaderMenu"}),jy=x({...Wy,props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=e,n=lt(),l=ue("cascader-menu"),{t:a}=pt(),s=sn();let r,i;const u=we(li),c=I(),d=y(()=>!t.nodes.length),f=y(()=>!u.initialLoaded),m=y(()=>`${s.value}-${t.index}`),v=b=>{r=b.target},h=b=>{if(!(!u.isHoverMenu||!r||!c.value))if(r.contains(b.target)){p();const E=n.vnode.el,{left:C}=E.getBoundingClientRect(),{offsetWidth:w,offsetHeight:k}=E,S=b.clientX-C,$=r.offsetTop,M=$+r.offsetHeight;c.value.innerHTML=` diff --git a/assets/index-B2QI2w7Z.css b/assets/index-B2QI2w7Z.css new file mode 100644 index 00000000..98e05b3d --- /dev/null +++ b/assets/index-B2QI2w7Z.css @@ -0,0 +1,5 @@ +.toast-container[data-v-c8b24ff5]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;pointer-events:none}.toast[data-v-c8b24ff5]{min-width:320px;max-width:500px;background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e5e7eb;overflow:hidden;position:relative;pointer-events:auto;cursor:pointer;transform:translate(100%);opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 8px 32px #0000004d}.toast-show[data-v-c8b24ff5]{transform:translate(0);opacity:1}.toast-hide[data-v-c8b24ff5]{transform:translate(100%);opacity:0}.toast-content[data-v-c8b24ff5]{display:flex;align-items:flex-start;padding:16px;gap:12px}.toast-icon[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px}.toast-body[data-v-c8b24ff5]{flex:1}.toast-title[data-v-c8b24ff5]{font-weight:600;font-size:14px;line-height:1.4;margin-bottom:4px}.toast-message[data-v-c8b24ff5]{font-size:14px;line-height:1.5;word-wrap:break-word}.toast-close[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#9ca3af;transition:all .2s ease}.toast-close[data-v-c8b24ff5]:hover{background:#f3f4f6;color:#6b7280}.dark{background:#374151;color:#9ca3af}.toast-progress[data-v-c8b24ff5]{position:absolute;bottom:0;left:0;height:3px;background:currentColor;opacity:.3;animation:toast-progress-c8b24ff5 linear forwards}@keyframes toast-progress-c8b24ff5{0%{width:100%}to{width:0%}}.toast-success[data-v-c8b24ff5]{border-left:4px solid #10b981}.toast-success .toast-icon[data-v-c8b24ff5]{color:#10b981;background:#d1fae5}.dark{background:#064e3b}.toast-success .toast-title[data-v-c8b24ff5]{color:#065f46}.dark{color:#10b981}.toast-success .toast-message[data-v-c8b24ff5]{color:#047857}.dark{color:#34d399}.toast-success .toast-progress[data-v-c8b24ff5]{background:#10b981}.toast-error[data-v-c8b24ff5]{border-left:4px solid #ef4444}.toast-error .toast-icon[data-v-c8b24ff5]{color:#ef4444;background:#fee2e2}.dark{background:#7f1d1d}.toast-error .toast-title[data-v-c8b24ff5]{color:#991b1b}.dark{color:#ef4444}.toast-error .toast-message[data-v-c8b24ff5]{color:#dc2626}.dark{color:#f87171}.toast-error .toast-progress[data-v-c8b24ff5]{background:#ef4444}.toast-warning[data-v-c8b24ff5]{border-left:4px solid #f59e0b}.toast-warning .toast-icon[data-v-c8b24ff5]{color:#f59e0b;background:#fef3c7}.dark{background:#78350f}.toast-warning .toast-title[data-v-c8b24ff5]{color:#92400e}.dark{color:#f59e0b}.toast-warning .toast-message[data-v-c8b24ff5]{color:#d97706}.dark{color:#fbbf24}.toast-warning .toast-progress[data-v-c8b24ff5]{background:#f59e0b}.toast-info[data-v-c8b24ff5]{border-left:4px solid #3b82f6}.toast-info .toast-icon[data-v-c8b24ff5]{color:#3b82f6;background:#dbeafe}.dark{background:#1e3a8a}.toast-info .toast-title[data-v-c8b24ff5]{color:#1e40af}.dark{color:#3b82f6}.toast-info .toast-message[data-v-c8b24ff5]{color:#2563eb}.dark{color:#60a5fa}.toast-info .toast-progress[data-v-c8b24ff5]{background:#3b82f6}@media (max-width: 640px){.toast-container[data-v-c8b24ff5]{top:10px;right:10px;left:10px}.toast[data-v-c8b24ff5]{min-width:auto;max-width:none}}.toast-list-enter-active[data-v-c8b24ff5],.toast-list-leave-active[data-v-c8b24ff5]{transition:all .3s ease}.toast-list-enter-from[data-v-c8b24ff5],.toast-list-leave-to[data-v-c8b24ff5]{opacity:0;transform:translate(100%)}.toast-list-move[data-v-c8b24ff5]{transition:transform .3s ease}.modal[data-v-6b3390a6]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3}.modal-content[data-v-6b3390a6]{background:#fff;border-radius:16px;box-shadow:0 20px 64px #00000026;border:1px solid #e5e7eb;max-height:90vh;overflow-y:auto}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 20px 64px #000c}.btn[data-v-6b3390a6]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-6b3390a6]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-danger[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-danger[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.btn-danger[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.btn-warning[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-warning[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.btn-warning[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-6b3390a6]{height:1rem;width:1rem}@keyframes spin-6b3390a6{to{transform:rotate(360deg)}}.loading-spinner[data-v-6b3390a6]{animation:spin-6b3390a6 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.modal-enter-active[data-v-6b3390a6],.modal-leave-active[data-v-6b3390a6]{transition:all .3s ease}.modal-enter-from[data-v-6b3390a6],.modal-leave-to[data-v-6b3390a6]{opacity:0}.modal-enter-active .modal-content[data-v-6b3390a6],.modal-leave-active .modal-content[data-v-6b3390a6]{transition:transform .3s ease}.modal-enter-from .modal-content[data-v-6b3390a6],.modal-leave-to .modal-content[data-v-6b3390a6]{transform:scale(.9) translateY(-20px)}.modal-content[data-v-6b3390a6]::-webkit-scrollbar{width:6px}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.dark{background:#374151}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.dark{background:#4b5563}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb:hover{background:#94a3b8}.dark{background:#6b7280}#app[data-v-dab04b7e]{min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-0\.5{top:-.125rem;right:-.125rem;bottom:-.125rem;left:-.125rem}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-left-2{left:-.5rem}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-3{left:.75rem}.left-5{left:1.25rem}.left-\[50px\]{left:50px}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1050\]{z-index:1050}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-8{margin-right:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[2px\]{margin-top:2px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[260px\]{height:260px}.h-\[38px\]{height:38px}.h-\[50vh\]{height:50vh}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[92vh\]{max-height:92vh}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[32px\]{min-height:32px}.min-h-\[48px\]{min-height:48px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[180px\]{width:180px}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[768px\]{width:768px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[150px\]{min-width:150px}.min-w-\[160px\]{min-width:160px}.min-w-\[170px\]{min-width:170px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[20px\]{min-width:20px}.min-w-\[210px\]{min-width:210px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[32px\]{min-width:32px}.min-w-\[34px\]{min-width:34px}.min-w-\[48px\]{min-width:48px}.min-w-\[50px\]{min-width:50px}.min-w-\[70px\]{min-width:70px}.min-w-\[80px\]{min-width:80px}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-gray-200\/50>:not([hidden])~:not([hidden]){border-color:#e5e7eb80}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.\!overflow-visible{overflow:visible!important}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-100{--tw-border-opacity: 1;border-color:rgb(254 243 199 / var(--tw-border-opacity, 1))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-200\/80{border-color:#bfdbfecc}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-500{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-emerald-100{--tw-border-opacity: 1;border-color:rgb(209 250 229 / var(--tw-border-opacity, 1))}.border-emerald-200\/80{border-color:#a7f3d0cc}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/50{border-color:#e5e7eb80}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-300\/30{border-color:#d1d5db4d}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-green-100{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-indigo-100{--tw-border-opacity: 1;border-color:rgb(224 231 255 / var(--tw-border-opacity, 1))}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-orange-100{--tw-border-opacity: 1;border-color:rgb(255 237 213 / var(--tw-border-opacity, 1))}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity, 1))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-purple-100{--tw-border-opacity: 1;border-color:rgb(243 232 255 / var(--tw-border-opacity, 1))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-200\/70{border-color:#e9d5ffb3}.border-purple-200\/80{border-color:#e9d5ffcc}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.border-purple-700{--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-500\/30{border-color:#ef44444d}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-rose-500{--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.border-sky-200\/80{border-color:#bae6fdcc}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/70{border-color:#e2e8f0b3}.border-teal-200{--tw-border-opacity: 1;border-color:rgb(153 246 228 / var(--tw-border-opacity, 1))}.border-teal-500{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200\/80{border-color:#ddd6fecc}.border-white\/20{border-color:#fff3}.border-white\/50{border-color:#ffffff80}.border-yellow-100{--tw-border-opacity: 1;border-color:rgb(254 249 195 / var(--tw-border-opacity, 1))}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity, 1))}.border-opacity-20{--tw-border-opacity: .2}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-300{--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/60{background-color:#eff6ff99}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900\/20{background-color:#1e3a8a33}.bg-cyan-100{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-cyan-50\/90{background-color:#ecfeffe6}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-cyan-600{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/60{background-color:#ecfdf599}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/85{background-color:#e5e7ebd9}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-300\/50{background-color:#d1d5db80}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/50{background-color:#f9fafb80}.bg-gray-50\/70{background-color:#f9fafbb3}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/40{background-color:#11182766}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-300{--tw-bg-opacity: 1;background-color:rgb(165 180 252 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-200{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-600{--tw-bg-opacity: 1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-300{--tw-bg-opacity: 1;background-color:rgb(216 180 254 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-50\/90{background-color:#fff1f2e6}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-teal-300{--tw-bg-opacity: 1;background-color:rgb(94 234 212 / var(--tw-bg-opacity, 1))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/20{background-color:#fff3}.bg-white\/30{background-color:#ffffff4d}.bg-white\/60{background-color:#fff9}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-300{--tw-bg-opacity: 1;background-color:rgb(253 224 71 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-20{--tw-bg-opacity: .2}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from: #fef3c7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 243 199 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-500{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-100{--tw-gradient-from: #dbeafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50{--tw-gradient-from: #eff6ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500\/20{--tw-gradient-from: rgb(59 130 246 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-100{--tw-gradient-from: #cffafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(207 250 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from: #06b6d4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-400{--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500{--tw-gradient-from: #10b981 var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-200{--tw-gradient-from: #e5e7eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(229 231 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-300{--tw-gradient-from: #d1d5db var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-50{--tw-gradient-from: #f9fafb var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-600{--tw-gradient-from: #4b5563 var(--tw-gradient-from-position);--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-50{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from: #6366f1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-100{--tw-gradient-from: #ffedd5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 237 213 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-50{--tw-gradient-from: #fff7ed var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 247 237 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-100{--tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50\/80{--tw-gradient-from: rgb(250 245 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500\/90{--tw-gradient-from: rgb(168 85 247 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-600{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-50{--tw-gradient-from: #fff1f2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 241 242 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-400{--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-50{--tw-gradient-from: #f0f9ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 249 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-500{--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-100{--tw-gradient-from: #ccfbf1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-400{--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from: #f5f3ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 243 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from: #8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-100{--tw-gradient-from: #fef9c3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 249 195 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-400{--tw-gradient-from: #facc15 var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-50{--tw-gradient-from: #fefce8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 252 232 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-500{--tw-gradient-from: #eab308 var(--tw-gradient-from-position);--tw-gradient-to: rgb(234 179 8 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-blue-100{--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #dbeafe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-blue-500{--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-cyan-400{--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-500{--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-300{--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #d1d5db var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-50{--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f9fafb var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-green-50{--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f0fdf4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-orange-400{--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-500{--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-600{--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #9333ea var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-red-500{--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-sky-100{--tw-gradient-to: rgb(224 242 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #e0f2fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-100{--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ede9fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-100{--tw-gradient-to: #fef3c7 var(--tw-gradient-to-position)}.to-amber-50{--tw-gradient-to: #fffbeb var(--tw-gradient-to-position)}.to-amber-500{--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.to-amber-600{--tw-gradient-to: #d97706 var(--tw-gradient-to-position)}.to-blue-100{--tw-gradient-to: #dbeafe var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-cyan-500{--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.to-emerald-100{--tw-gradient-to: #d1fae5 var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to: #ecfdf5 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to: #10b981 var(--tw-gradient-to-position)}.to-emerald-600{--tw-gradient-to: #059669 var(--tw-gradient-to-position)}.to-fuchsia-100{--tw-gradient-to: #fae8ff var(--tw-gradient-to-position)}.to-fuchsia-500{--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.to-gray-100{--tw-gradient-to: #f3f4f6 var(--tw-gradient-to-position)}.to-gray-100\/90{--tw-gradient-to: rgb(243 244 246 / .9) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-gray-400{--tw-gradient-to: #9ca3af var(--tw-gradient-to-position)}.to-gray-50{--tw-gradient-to: #f9fafb var(--tw-gradient-to-position)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-500{--tw-gradient-to: #22c55e var(--tw-gradient-to-position)}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position)}.to-indigo-100{--tw-gradient-to: #e0e7ff var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to: #eef2ff var(--tw-gradient-to-position)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.to-indigo-500\/90{--tw-gradient-to: rgb(99 102 241 / .9) var(--tw-gradient-to-position)}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.to-orange-100{--tw-gradient-to: #ffedd5 var(--tw-gradient-to-position)}.to-orange-50{--tw-gradient-to: #fff7ed var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-pink-100{--tw-gradient-to: #fce7f3 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to: #db2777 var(--tw-gradient-to-position)}.to-purple-100{--tw-gradient-to: #f3e8ff var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to: #faf5ff var(--tw-gradient-to-position)}.to-purple-50\/80{--tw-gradient-to: rgb(250 245 255 / .8) var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to: #a855f7 var(--tw-gradient-to-position)}.to-purple-500\/20{--tw-gradient-to: rgb(168 85 247 / .2) var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-red-50{--tw-gradient-to: #fef2f2 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position)}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.to-rose-600{--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.to-sky-100{--tw-gradient-to: #e0f2fe var(--tw-gradient-to-position)}.to-sky-600{--tw-gradient-to: #0284c7 var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.to-teal-50{--tw-gradient-to: #f0fdfa var(--tw-gradient-to-position)}.to-teal-500{--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to: #0d9488 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-yellow-100{--tw-gradient-to: #fef9c3 var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.to-yellow-500{--tw-gradient-to: #eab308 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-cyan-800{--tw-text-opacity: 1;color:rgb(21 94 117 / var(--tw-text-opacity, 1))}.text-cyan-900{--tw-text-opacity: 1;color:rgb(22 78 99 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-gray-950{--tw-text-opacity: 1;color:rgb(3 7 18 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-indigo-800{--tw-text-opacity: 1;color:rgb(55 48 163 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-500\/80{color:#a855f7cc}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-teal-800{--tw-text-opacity: 1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.text-yellow-900{--tw-text-opacity: 1;color:rgb(113 63 18 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.mix-blend-overlay{mix-blend-mode:overlay}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(139\,92\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(139,92,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(148,163,184,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(16\,185\,129\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(16,185,129,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(56\,189\,248\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(56,189,248,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(59\,130\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(59,130,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-amber-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1))}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.ring-blue-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1))}.ring-emerald-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 250 229 / var(--tw-ring-opacity, 1))}.ring-green-500\/20{--tw-ring-color: rgb(34 197 94 / .2)}.ring-purple-100\/80{--tw-ring-color: rgb(243 232 255 / .8)}.ring-red-500\/20{--tw-ring-color: rgb(239 68 68 / .2)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.8\)\]{--tw-drop-shadow: drop-shadow(0 1px 2px rgba(0,0,0,.8));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_2px_4px_rgba\(0\,0\,0\,0\.9\)\]{--tw-drop-shadow: drop-shadow(0 2px 4px rgba(0,0,0,.9));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / .05));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[username\:password\@\]{username:password@}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2)}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.glass-strong{background:var(--surface-color);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.card{background:var(--surface-color);border-radius:16px;border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative}.stat-card{background:linear-gradient(135deg,#fffffff2,#fffc);border-radius:20px;border:1px solid rgba(255,255,255,.3);padding:24px;position:relative;overflow:hidden;transition:all .3s ease}.btn-secondary{background:linear-gradient(135deg,#6b7280,#4b5563);color:#fff;box-shadow:0 10px 15px -3px #6b72804d,0 4px 6px -2px #6b72800d}.btn-secondary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #6b72804d,0 10px 10px -5px #6b72801a}.form-input{background:#fffffff2;border:2px solid rgba(255,255,255,.3);border-radius:12px;padding:8px 12px;font-size:14px;transition:all .2s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2}.table-container{background:#fffffff2;border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.table-row{transition:all .2s ease}.table-row:hover{background:#667eea0d;transform:scale(1.005)}.modal{background:#0009}.dark .modal{background:#000000bf}.modal-content{background:#fffffffa;border-radius:24px;border:1px solid rgba(255,255,255,.3);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d}.dark .modal-content{background:#111827f2;border:1px solid rgba(75,85,99,.3);box-shadow:0 10px 25px -5px #0000004d,0 0 0 1px #ffffff0d}@media (max-width: 640px){.glass,.glass-strong{margin:12px;border-radius:16px;padding:16px}.stat-card{padding:12px;border-radius:12px}.stat-icon{width:40px;height:40px;font-size:16px}.tab-btn{font-size:12px;padding:10px 6px}.modal-content{margin:8px;max-width:calc(100vw - 24px);padding:16px}.modal-scroll-content{max-height:calc(90vh - 100px)}.card{border-radius:12px}.form-input,.form-select,.form-textarea{font-size:14px;padding:8px 12px}.btn{font-size:14px;padding:8px 16px}.table-container table{font-size:12px}.table-container th,.table-container td{padding:8px 12px}.toast{min-width:280px;max-width:calc(100vw - 40px);right:12px;top:60px}.loading-spinner{width:16px;height:16px}}.animate-pulse{animation:pulse 2s infinite}.fa-openai{width:16px;height:16px;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNjQwIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIHY3LjAuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLi0tPjxwYXRoIGQ9Ik0yNjAuNCAyNDkuOHYtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44bC0xMDEuNS01OS40Yy02LjEtMy42LTEyLjMtMy42LTE4LjQgMGwtMTI4LjUgNzQuN3ptMjI4LjMgMTg5LjRWMzIzYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDM1MSAyMzIuNGw0Mi0yNC4xYzMuNi0yIDYuNy0yIDEwLjIgMGw5Ny44IDU2LjRjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNnpNMjMwLjIgMzM2LjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMlYxOTAuNGMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBsLTEwMC45IDU4LjRjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOXYxNDguNXptOTAuNCA1Mi4ybC02MC4yLTMzLjh2LTcxLjdsNjAuMi0zMy44IDYwLjIgMzMuOHY3MS43TDMyMC42IDM4OXptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlWMzAxLjlsNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMnYxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM3pNMjM3LjggNDMwLjVsLTk3LjctNTYuM0MxMTEuOSAzNTcuOCA5MyAzMjMgOTMgMjg5LjJjMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZ2MTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjJ2NDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM3ptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiLz48L3N2Zz4=) no-repeat center/100%}/*! + * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2024 Fonticons, Inc. + */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fas,.far,.fab,.fa-solid,.fa-regular,.fa-brands,.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas:before,.far:before,.fab:before,.fa-solid:before,.fa-regular:before,.fa-brands:before,.fa:before{content:var(--fa)}.fa-classic,.fas,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0{--fa: "0"}.fa-1{--fa: "1"}.fa-2{--fa: "2"}.fa-3{--fa: "3"}.fa-4{--fa: "4"}.fa-5{--fa: "5"}.fa-6{--fa: "6"}.fa-7{--fa: "7"}.fa-8{--fa: "8"}.fa-9{--fa: "9"}.fa-fill-drip{--fa: ""}.fa-arrows-to-circle{--fa: ""}.fa-circle-chevron-right,.fa-chevron-circle-right{--fa: ""}.fa-at{--fa: "@"}.fa-trash-can,.fa-trash-alt{--fa: ""}.fa-text-height{--fa: ""}.fa-user-xmark,.fa-user-times{--fa: ""}.fa-stethoscope{--fa: ""}.fa-message,.fa-comment-alt{--fa: ""}.fa-info{--fa: ""}.fa-down-left-and-up-right-to-center,.fa-compress-alt{--fa: ""}.fa-explosion{--fa: ""}.fa-file-lines,.fa-file-alt,.fa-file-text{--fa: ""}.fa-wave-square{--fa: ""}.fa-ring{--fa: ""}.fa-building-un{--fa: ""}.fa-dice-three{--fa: ""}.fa-calendar-days,.fa-calendar-alt{--fa: ""}.fa-anchor-circle-check{--fa: ""}.fa-building-circle-arrow-right{--fa: ""}.fa-volleyball,.fa-volleyball-ball{--fa: ""}.fa-arrows-up-to-line{--fa: ""}.fa-sort-down,.fa-sort-desc{--fa: ""}.fa-circle-minus,.fa-minus-circle{--fa: ""}.fa-door-open{--fa: ""}.fa-right-from-bracket,.fa-sign-out-alt{--fa: ""}.fa-atom{--fa: ""}.fa-soap{--fa: ""}.fa-icons,.fa-heart-music-camera-bolt{--fa: ""}.fa-microphone-lines-slash,.fa-microphone-alt-slash{--fa: ""}.fa-bridge-circle-check{--fa: ""}.fa-pump-medical{--fa: ""}.fa-fingerprint{--fa: ""}.fa-hand-point-right{--fa: ""}.fa-magnifying-glass-location,.fa-search-location{--fa: ""}.fa-forward-step,.fa-step-forward{--fa: ""}.fa-face-smile-beam,.fa-smile-beam{--fa: ""}.fa-flag-checkered{--fa: ""}.fa-football,.fa-football-ball{--fa: ""}.fa-school-circle-exclamation{--fa: ""}.fa-crop{--fa: ""}.fa-angles-down,.fa-angle-double-down{--fa: ""}.fa-users-rectangle{--fa: ""}.fa-people-roof{--fa: ""}.fa-people-line{--fa: ""}.fa-beer-mug-empty,.fa-beer{--fa: ""}.fa-diagram-predecessor{--fa: ""}.fa-arrow-up-long,.fa-long-arrow-up{--fa: ""}.fa-fire-flame-simple,.fa-burn{--fa: ""}.fa-person,.fa-male{--fa: ""}.fa-laptop{--fa: ""}.fa-file-csv{--fa: ""}.fa-menorah{--fa: ""}.fa-truck-plane{--fa: ""}.fa-record-vinyl{--fa: ""}.fa-face-grin-stars,.fa-grin-stars{--fa: ""}.fa-bong{--fa: ""}.fa-spaghetti-monster-flying,.fa-pastafarianism{--fa: ""}.fa-arrow-down-up-across-line{--fa: ""}.fa-spoon,.fa-utensil-spoon{--fa: ""}.fa-jar-wheat{--fa: ""}.fa-envelopes-bulk,.fa-mail-bulk{--fa: ""}.fa-file-circle-exclamation{--fa: ""}.fa-circle-h,.fa-hospital-symbol{--fa: ""}.fa-pager{--fa: ""}.fa-address-book,.fa-contact-book{--fa: ""}.fa-strikethrough{--fa: ""}.fa-k{--fa: "K"}.fa-landmark-flag{--fa: ""}.fa-pencil,.fa-pencil-alt{--fa: ""}.fa-backward{--fa: ""}.fa-caret-right{--fa: ""}.fa-comments{--fa: ""}.fa-paste,.fa-file-clipboard{--fa: ""}.fa-code-pull-request{--fa: ""}.fa-clipboard-list{--fa: ""}.fa-truck-ramp-box,.fa-truck-loading{--fa: ""}.fa-user-check{--fa: ""}.fa-vial-virus{--fa: ""}.fa-sheet-plastic{--fa: ""}.fa-blog{--fa: ""}.fa-user-ninja{--fa: ""}.fa-person-arrow-up-from-line{--fa: ""}.fa-scroll-torah,.fa-torah{--fa: ""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa: ""}.fa-toggle-off{--fa: ""}.fa-box-archive,.fa-archive{--fa: ""}.fa-person-drowning{--fa: ""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa: ""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa: ""}.fa-spray-can{--fa: ""}.fa-truck-monster{--fa: ""}.fa-w{--fa: "W"}.fa-earth-africa,.fa-globe-africa{--fa: ""}.fa-rainbow{--fa: ""}.fa-circle-notch{--fa: ""}.fa-tablet-screen-button,.fa-tablet-alt{--fa: ""}.fa-paw{--fa: ""}.fa-cloud{--fa: ""}.fa-trowel-bricks{--fa: ""}.fa-face-flushed,.fa-flushed{--fa: ""}.fa-hospital-user{--fa: ""}.fa-tent-arrow-left-right{--fa: ""}.fa-gavel,.fa-legal{--fa: ""}.fa-binoculars{--fa: ""}.fa-microphone-slash{--fa: ""}.fa-box-tissue{--fa: ""}.fa-motorcycle{--fa: ""}.fa-bell-concierge,.fa-concierge-bell{--fa: ""}.fa-pen-ruler,.fa-pencil-ruler{--fa: ""}.fa-people-arrows,.fa-people-arrows-left-right{--fa: ""}.fa-mars-and-venus-burst{--fa: ""}.fa-square-caret-right,.fa-caret-square-right{--fa: ""}.fa-scissors,.fa-cut{--fa: ""}.fa-sun-plant-wilt{--fa: ""}.fa-toilets-portable{--fa: ""}.fa-hockey-puck{--fa: ""}.fa-table{--fa: ""}.fa-magnifying-glass-arrow-right{--fa: ""}.fa-tachograph-digital,.fa-digital-tachograph{--fa: ""}.fa-users-slash{--fa: ""}.fa-clover{--fa: ""}.fa-reply,.fa-mail-reply{--fa: ""}.fa-star-and-crescent{--fa: ""}.fa-house-fire{--fa: ""}.fa-square-minus,.fa-minus-square{--fa: ""}.fa-helicopter{--fa: ""}.fa-compass{--fa: ""}.fa-square-caret-down,.fa-caret-square-down{--fa: ""}.fa-file-circle-question{--fa: ""}.fa-laptop-code{--fa: ""}.fa-swatchbook{--fa: ""}.fa-prescription-bottle{--fa: ""}.fa-bars,.fa-navicon{--fa: ""}.fa-people-group{--fa: ""}.fa-hourglass-end,.fa-hourglass-3{--fa: ""}.fa-heart-crack,.fa-heart-broken{--fa: ""}.fa-square-up-right,.fa-external-link-square-alt{--fa: ""}.fa-face-kiss-beam,.fa-kiss-beam{--fa: ""}.fa-film{--fa: ""}.fa-ruler-horizontal{--fa: ""}.fa-people-robbery{--fa: ""}.fa-lightbulb{--fa: ""}.fa-caret-left{--fa: ""}.fa-circle-exclamation,.fa-exclamation-circle{--fa: ""}.fa-school-circle-xmark{--fa: ""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa: ""}.fa-circle-chevron-down,.fa-chevron-circle-down{--fa: ""}.fa-unlock-keyhole,.fa-unlock-alt{--fa: ""}.fa-cloud-showers-heavy{--fa: ""}.fa-headphones-simple,.fa-headphones-alt{--fa: ""}.fa-sitemap{--fa: ""}.fa-circle-dollar-to-slot,.fa-donate{--fa: ""}.fa-memory{--fa: ""}.fa-road-spikes{--fa: ""}.fa-fire-burner{--fa: ""}.fa-flag{--fa: ""}.fa-hanukiah{--fa: ""}.fa-feather{--fa: ""}.fa-volume-low,.fa-volume-down{--fa: ""}.fa-comment-slash{--fa: ""}.fa-cloud-sun-rain{--fa: ""}.fa-compress{--fa: ""}.fa-wheat-awn,.fa-wheat-alt{--fa: ""}.fa-ankh{--fa: ""}.fa-hands-holding-child{--fa: ""}.fa-asterisk{--fa: "*"}.fa-square-check,.fa-check-square{--fa: ""}.fa-peseta-sign{--fa: ""}.fa-heading,.fa-header{--fa: ""}.fa-ghost{--fa: ""}.fa-list,.fa-list-squares{--fa: ""}.fa-square-phone-flip,.fa-phone-square-alt{--fa: ""}.fa-cart-plus{--fa: ""}.fa-gamepad{--fa: ""}.fa-circle-dot,.fa-dot-circle{--fa: ""}.fa-face-dizzy,.fa-dizzy{--fa: ""}.fa-egg{--fa: ""}.fa-house-medical-circle-xmark{--fa: ""}.fa-campground{--fa: ""}.fa-folder-plus{--fa: ""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa: ""}.fa-paintbrush,.fa-paint-brush{--fa: ""}.fa-lock{--fa: ""}.fa-gas-pump{--fa: ""}.fa-hot-tub-person,.fa-hot-tub{--fa: ""}.fa-map-location,.fa-map-marked{--fa: ""}.fa-house-flood-water{--fa: ""}.fa-tree{--fa: ""}.fa-bridge-lock{--fa: ""}.fa-sack-dollar{--fa: ""}.fa-pen-to-square,.fa-edit{--fa: ""}.fa-car-side{--fa: ""}.fa-share-nodes,.fa-share-alt{--fa: ""}.fa-heart-circle-minus{--fa: ""}.fa-hourglass-half,.fa-hourglass-2{--fa: ""}.fa-microscope{--fa: ""}.fa-sink{--fa: ""}.fa-bag-shopping,.fa-shopping-bag{--fa: ""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa: ""}.fa-mitten{--fa: ""}.fa-person-rays{--fa: ""}.fa-users{--fa: ""}.fa-eye-slash{--fa: ""}.fa-flask-vial{--fa: ""}.fa-hand,.fa-hand-paper{--fa: ""}.fa-om{--fa: ""}.fa-worm{--fa: ""}.fa-house-circle-xmark{--fa: ""}.fa-plug{--fa: ""}.fa-chevron-up{--fa: ""}.fa-hand-spock{--fa: ""}.fa-stopwatch{--fa: ""}.fa-face-kiss,.fa-kiss{--fa: ""}.fa-bridge-circle-xmark{--fa: ""}.fa-face-grin-tongue,.fa-grin-tongue{--fa: ""}.fa-chess-bishop{--fa: ""}.fa-face-grin-wink,.fa-grin-wink{--fa: ""}.fa-ear-deaf,.fa-deaf,.fa-deafness,.fa-hard-of-hearing{--fa: ""}.fa-road-circle-check{--fa: ""}.fa-dice-five{--fa: ""}.fa-square-rss,.fa-rss-square{--fa: ""}.fa-land-mine-on{--fa: ""}.fa-i-cursor{--fa: ""}.fa-stamp{--fa: ""}.fa-stairs{--fa: ""}.fa-i{--fa: "I"}.fa-hryvnia-sign,.fa-hryvnia{--fa: ""}.fa-pills{--fa: ""}.fa-face-grin-wide,.fa-grin-alt{--fa: ""}.fa-tooth{--fa: ""}.fa-v{--fa: "V"}.fa-bangladeshi-taka-sign{--fa: ""}.fa-bicycle{--fa: ""}.fa-staff-snake,.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius{--fa: ""}.fa-head-side-cough-slash{--fa: ""}.fa-truck-medical,.fa-ambulance{--fa: ""}.fa-wheat-awn-circle-exclamation{--fa: ""}.fa-snowman{--fa: ""}.fa-mortar-pestle{--fa: ""}.fa-road-barrier{--fa: ""}.fa-school{--fa: ""}.fa-igloo{--fa: ""}.fa-joint{--fa: ""}.fa-angle-right{--fa: ""}.fa-horse{--fa: ""}.fa-q{--fa: "Q"}.fa-g{--fa: "G"}.fa-notes-medical{--fa: ""}.fa-temperature-half,.fa-temperature-2,.fa-thermometer-2,.fa-thermometer-half{--fa: ""}.fa-dong-sign{--fa: ""}.fa-capsules{--fa: ""}.fa-poo-storm,.fa-poo-bolt{--fa: ""}.fa-face-frown-open,.fa-frown-open{--fa: ""}.fa-hand-point-up{--fa: ""}.fa-money-bill{--fa: ""}.fa-bookmark{--fa: ""}.fa-align-justify{--fa: ""}.fa-umbrella-beach{--fa: ""}.fa-helmet-un{--fa: ""}.fa-bullseye{--fa: ""}.fa-bacon{--fa: ""}.fa-hand-point-down{--fa: ""}.fa-arrow-up-from-bracket{--fa: ""}.fa-folder,.fa-folder-blank{--fa: ""}.fa-file-waveform,.fa-file-medical-alt{--fa: ""}.fa-radiation{--fa: ""}.fa-chart-simple{--fa: ""}.fa-mars-stroke{--fa: ""}.fa-vial{--fa: ""}.fa-gauge,.fa-dashboard,.fa-gauge-med,.fa-tachometer-alt-average{--fa: ""}.fa-wand-magic-sparkles,.fa-magic-wand-sparkles{--fa: ""}.fa-e{--fa: "E"}.fa-pen-clip,.fa-pen-alt{--fa: ""}.fa-bridge-circle-exclamation{--fa: ""}.fa-user{--fa: ""}.fa-school-circle-check{--fa: ""}.fa-dumpster{--fa: ""}.fa-van-shuttle,.fa-shuttle-van{--fa: ""}.fa-building-user{--fa: ""}.fa-square-caret-left,.fa-caret-square-left{--fa: ""}.fa-highlighter{--fa: ""}.fa-key{--fa: ""}.fa-bullhorn{--fa: ""}.fa-globe{--fa: ""}.fa-synagogue{--fa: ""}.fa-person-half-dress{--fa: ""}.fa-road-bridge{--fa: ""}.fa-location-arrow{--fa: ""}.fa-c{--fa: "C"}.fa-tablet-button{--fa: ""}.fa-building-lock{--fa: ""}.fa-pizza-slice{--fa: ""}.fa-money-bill-wave{--fa: ""}.fa-chart-area,.fa-area-chart{--fa: ""}.fa-house-flag{--fa: ""}.fa-person-circle-minus{--fa: ""}.fa-ban,.fa-cancel{--fa: ""}.fa-camera-rotate{--fa: ""}.fa-spray-can-sparkles,.fa-air-freshener{--fa: ""}.fa-star{--fa: ""}.fa-repeat{--fa: ""}.fa-cross{--fa: ""}.fa-box{--fa: ""}.fa-venus-mars{--fa: ""}.fa-arrow-pointer,.fa-mouse-pointer{--fa: ""}.fa-maximize,.fa-expand-arrows-alt{--fa: ""}.fa-charging-station{--fa: ""}.fa-shapes,.fa-triangle-circle-square{--fa: ""}.fa-shuffle,.fa-random{--fa: ""}.fa-person-running,.fa-running{--fa: ""}.fa-mobile-retro{--fa: ""}.fa-grip-lines-vertical{--fa: ""}.fa-spider{--fa: ""}.fa-hands-bound{--fa: ""}.fa-file-invoice-dollar{--fa: ""}.fa-plane-circle-exclamation{--fa: ""}.fa-x-ray{--fa: ""}.fa-spell-check{--fa: ""}.fa-slash{--fa: ""}.fa-computer-mouse,.fa-mouse{--fa: ""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa: ""}.fa-shop-slash,.fa-store-alt-slash{--fa: ""}.fa-server{--fa: ""}.fa-virus-covid-slash{--fa: ""}.fa-shop-lock{--fa: ""}.fa-hourglass-start,.fa-hourglass-1{--fa: ""}.fa-blender-phone{--fa: ""}.fa-building-wheat{--fa: ""}.fa-person-breastfeeding{--fa: ""}.fa-right-to-bracket,.fa-sign-in-alt{--fa: ""}.fa-venus{--fa: ""}.fa-passport{--fa: ""}.fa-thumbtack-slash,.fa-thumb-tack-slash{--fa: ""}.fa-heart-pulse,.fa-heartbeat{--fa: ""}.fa-people-carry-box,.fa-people-carry{--fa: ""}.fa-temperature-high{--fa: ""}.fa-microchip{--fa: ""}.fa-crown{--fa: ""}.fa-weight-hanging{--fa: ""}.fa-xmarks-lines{--fa: ""}.fa-file-prescription{--fa: ""}.fa-weight-scale,.fa-weight{--fa: ""}.fa-user-group,.fa-user-friends{--fa: ""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa: ""}.fa-chess-knight{--fa: ""}.fa-face-laugh-squint,.fa-laugh-squint{--fa: ""}.fa-wheelchair{--fa: ""}.fa-circle-arrow-up,.fa-arrow-circle-up{--fa: ""}.fa-toggle-on{--fa: ""}.fa-person-walking,.fa-walking{--fa: ""}.fa-l{--fa: "L"}.fa-fire{--fa: ""}.fa-bed-pulse,.fa-procedures{--fa: ""}.fa-shuttle-space,.fa-space-shuttle{--fa: ""}.fa-face-laugh,.fa-laugh{--fa: ""}.fa-folder-open{--fa: ""}.fa-heart-circle-plus{--fa: ""}.fa-code-fork{--fa: ""}.fa-city{--fa: ""}.fa-microphone-lines,.fa-microphone-alt{--fa: ""}.fa-pepper-hot{--fa: ""}.fa-unlock{--fa: ""}.fa-colon-sign{--fa: ""}.fa-headset{--fa: ""}.fa-store-slash{--fa: ""}.fa-road-circle-xmark{--fa: ""}.fa-user-minus{--fa: ""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa: ""}.fa-champagne-glasses,.fa-glass-cheers{--fa: ""}.fa-clipboard{--fa: ""}.fa-house-circle-exclamation{--fa: ""}.fa-file-arrow-up,.fa-file-upload{--fa: ""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa: ""}.fa-bath,.fa-bathtub{--fa: ""}.fa-underline{--fa: ""}.fa-user-pen,.fa-user-edit{--fa: ""}.fa-signature{--fa: ""}.fa-stroopwafel{--fa: ""}.fa-bold{--fa: ""}.fa-anchor-lock{--fa: ""}.fa-building-ngo{--fa: ""}.fa-manat-sign{--fa: ""}.fa-not-equal{--fa: ""}.fa-border-top-left,.fa-border-style{--fa: ""}.fa-map-location-dot,.fa-map-marked-alt{--fa: ""}.fa-jedi{--fa: ""}.fa-square-poll-vertical,.fa-poll{--fa: ""}.fa-mug-hot{--fa: ""}.fa-car-battery,.fa-battery-car{--fa: ""}.fa-gift{--fa: ""}.fa-dice-two{--fa: ""}.fa-chess-queen{--fa: ""}.fa-glasses{--fa: ""}.fa-chess-board{--fa: ""}.fa-building-circle-check{--fa: ""}.fa-person-chalkboard{--fa: ""}.fa-mars-stroke-right,.fa-mars-stroke-h{--fa: ""}.fa-hand-back-fist,.fa-hand-rock{--fa: ""}.fa-square-caret-up,.fa-caret-square-up{--fa: ""}.fa-cloud-showers-water{--fa: ""}.fa-chart-bar,.fa-bar-chart{--fa: ""}.fa-hands-bubbles,.fa-hands-wash{--fa: ""}.fa-less-than-equal{--fa: ""}.fa-train{--fa: ""}.fa-eye-low-vision,.fa-low-vision{--fa: ""}.fa-crow{--fa: ""}.fa-sailboat{--fa: ""}.fa-window-restore{--fa: ""}.fa-square-plus,.fa-plus-square{--fa: ""}.fa-torii-gate{--fa: ""}.fa-frog{--fa: ""}.fa-bucket{--fa: ""}.fa-image{--fa: ""}.fa-microphone{--fa: ""}.fa-cow{--fa: ""}.fa-caret-up{--fa: ""}.fa-screwdriver{--fa: ""}.fa-folder-closed{--fa: ""}.fa-house-tsunami{--fa: ""}.fa-square-nfi{--fa: ""}.fa-arrow-up-from-ground-water{--fa: ""}.fa-martini-glass,.fa-glass-martini-alt{--fa: ""}.fa-square-binary{--fa: ""}.fa-rotate-left,.fa-rotate-back,.fa-rotate-backward,.fa-undo-alt{--fa: ""}.fa-table-columns,.fa-columns{--fa: ""}.fa-lemon{--fa: ""}.fa-head-side-mask{--fa: ""}.fa-handshake{--fa: ""}.fa-gem{--fa: ""}.fa-dolly,.fa-dolly-box{--fa: ""}.fa-smoking{--fa: ""}.fa-minimize,.fa-compress-arrows-alt{--fa: ""}.fa-monument{--fa: ""}.fa-snowplow{--fa: ""}.fa-angles-right,.fa-angle-double-right{--fa: ""}.fa-cannabis{--fa: ""}.fa-circle-play,.fa-play-circle{--fa: ""}.fa-tablets{--fa: ""}.fa-ethernet{--fa: ""}.fa-euro-sign,.fa-eur,.fa-euro{--fa: ""}.fa-chair{--fa: ""}.fa-circle-check,.fa-check-circle{--fa: ""}.fa-circle-stop,.fa-stop-circle{--fa: ""}.fa-compass-drafting,.fa-drafting-compass{--fa: ""}.fa-plate-wheat{--fa: ""}.fa-icicles{--fa: ""}.fa-person-shelter{--fa: ""}.fa-neuter{--fa: ""}.fa-id-badge{--fa: ""}.fa-marker{--fa: ""}.fa-face-laugh-beam,.fa-laugh-beam{--fa: ""}.fa-helicopter-symbol{--fa: ""}.fa-universal-access{--fa: ""}.fa-circle-chevron-up,.fa-chevron-circle-up{--fa: ""}.fa-lari-sign{--fa: ""}.fa-volcano{--fa: ""}.fa-person-walking-dashed-line-arrow-right{--fa: ""}.fa-sterling-sign,.fa-gbp,.fa-pound-sign{--fa: ""}.fa-viruses{--fa: ""}.fa-square-person-confined{--fa: ""}.fa-user-tie{--fa: ""}.fa-arrow-down-long,.fa-long-arrow-down{--fa: ""}.fa-tent-arrow-down-to-line{--fa: ""}.fa-certificate{--fa: ""}.fa-reply-all,.fa-mail-reply-all{--fa: ""}.fa-suitcase{--fa: ""}.fa-person-skating,.fa-skating{--fa: ""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa: ""}.fa-camera-retro{--fa: ""}.fa-circle-arrow-down,.fa-arrow-circle-down{--fa: ""}.fa-file-import,.fa-arrow-right-to-file{--fa: ""}.fa-square-arrow-up-right,.fa-external-link-square{--fa: ""}.fa-box-open{--fa: ""}.fa-scroll{--fa: ""}.fa-spa{--fa: ""}.fa-location-pin-lock{--fa: ""}.fa-pause{--fa: ""}.fa-hill-avalanche{--fa: ""}.fa-temperature-empty,.fa-temperature-0,.fa-thermometer-0,.fa-thermometer-empty{--fa: ""}.fa-bomb{--fa: ""}.fa-registered{--fa: ""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa: ""}.fa-scale-unbalanced-flip,.fa-balance-scale-right{--fa: ""}.fa-subscript{--fa: ""}.fa-diamond-turn-right,.fa-directions{--fa: ""}.fa-burst{--fa: ""}.fa-house-laptop,.fa-laptop-house{--fa: ""}.fa-face-tired,.fa-tired{--fa: ""}.fa-money-bills{--fa: ""}.fa-smog{--fa: ""}.fa-crutch{--fa: ""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa: ""}.fa-palette{--fa: ""}.fa-arrows-turn-right{--fa: ""}.fa-vest{--fa: ""}.fa-ferry{--fa: ""}.fa-arrows-down-to-people{--fa: ""}.fa-seedling,.fa-sprout{--fa: ""}.fa-left-right,.fa-arrows-alt-h{--fa: ""}.fa-boxes-packing{--fa: ""}.fa-circle-arrow-left,.fa-arrow-circle-left{--fa: ""}.fa-group-arrows-rotate{--fa: ""}.fa-bowl-food{--fa: ""}.fa-candy-cane{--fa: ""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa: ""}.fa-cloud-bolt,.fa-thunderstorm{--fa: ""}.fa-text-slash,.fa-remove-format{--fa: ""}.fa-face-smile-wink,.fa-smile-wink{--fa: ""}.fa-file-word{--fa: ""}.fa-file-powerpoint{--fa: ""}.fa-arrows-left-right,.fa-arrows-h{--fa: ""}.fa-house-lock{--fa: ""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa: ""}.fa-children{--fa: ""}.fa-chalkboard,.fa-blackboard{--fa: ""}.fa-user-large-slash,.fa-user-alt-slash{--fa: ""}.fa-envelope-open{--fa: ""}.fa-handshake-simple-slash,.fa-handshake-alt-slash{--fa: ""}.fa-mattress-pillow{--fa: ""}.fa-guarani-sign{--fa: ""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa: ""}.fa-fire-extinguisher{--fa: ""}.fa-cruzeiro-sign{--fa: ""}.fa-greater-than-equal{--fa: ""}.fa-shield-halved,.fa-shield-alt{--fa: ""}.fa-book-atlas,.fa-atlas{--fa: ""}.fa-virus{--fa: ""}.fa-envelope-circle-check{--fa: ""}.fa-layer-group{--fa: ""}.fa-arrows-to-dot{--fa: ""}.fa-archway{--fa: ""}.fa-heart-circle-check{--fa: ""}.fa-house-chimney-crack,.fa-house-damage{--fa: ""}.fa-file-zipper,.fa-file-archive{--fa: ""}.fa-square{--fa: ""}.fa-martini-glass-empty,.fa-glass-martini{--fa: ""}.fa-couch{--fa: ""}.fa-cedi-sign{--fa: ""}.fa-italic{--fa: ""}.fa-table-cells-column-lock{--fa: ""}.fa-church{--fa: ""}.fa-comments-dollar{--fa: ""}.fa-democrat{--fa: ""}.fa-z{--fa: "Z"}.fa-person-skiing,.fa-skiing{--fa: ""}.fa-road-lock{--fa: ""}.fa-a{--fa: "A"}.fa-temperature-arrow-down,.fa-temperature-down{--fa: ""}.fa-feather-pointed,.fa-feather-alt{--fa: ""}.fa-p{--fa: "P"}.fa-snowflake{--fa: ""}.fa-newspaper{--fa: ""}.fa-rectangle-ad,.fa-ad{--fa: ""}.fa-circle-arrow-right,.fa-arrow-circle-right{--fa: ""}.fa-filter-circle-xmark{--fa: ""}.fa-locust{--fa: ""}.fa-sort,.fa-unsorted{--fa: ""}.fa-list-ol,.fa-list-1-2,.fa-list-numeric{--fa: ""}.fa-person-dress-burst{--fa: ""}.fa-money-check-dollar,.fa-money-check-alt{--fa: ""}.fa-vector-square{--fa: ""}.fa-bread-slice{--fa: ""}.fa-language{--fa: ""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa: ""}.fa-filter{--fa: ""}.fa-question{--fa: "?"}.fa-file-signature{--fa: ""}.fa-up-down-left-right,.fa-arrows-alt{--fa: ""}.fa-house-chimney-user{--fa: ""}.fa-hand-holding-heart{--fa: ""}.fa-puzzle-piece{--fa: ""}.fa-money-check{--fa: ""}.fa-star-half-stroke,.fa-star-half-alt{--fa: ""}.fa-code{--fa: ""}.fa-whiskey-glass,.fa-glass-whiskey{--fa: ""}.fa-building-circle-exclamation{--fa: ""}.fa-magnifying-glass-chart{--fa: ""}.fa-arrow-up-right-from-square,.fa-external-link{--fa: ""}.fa-cubes-stacked{--fa: ""}.fa-won-sign,.fa-krw,.fa-won{--fa: ""}.fa-virus-covid{--fa: ""}.fa-austral-sign{--fa: ""}.fa-f{--fa: "F"}.fa-leaf{--fa: ""}.fa-road{--fa: ""}.fa-taxi,.fa-cab{--fa: ""}.fa-person-circle-plus{--fa: ""}.fa-chart-pie,.fa-pie-chart{--fa: ""}.fa-bolt-lightning{--fa: ""}.fa-sack-xmark{--fa: ""}.fa-file-excel{--fa: ""}.fa-file-contract{--fa: ""}.fa-fish-fins{--fa: ""}.fa-building-flag{--fa: ""}.fa-face-grin-beam,.fa-grin-beam{--fa: ""}.fa-object-ungroup{--fa: ""}.fa-poop{--fa: ""}.fa-location-pin,.fa-map-marker{--fa: ""}.fa-kaaba{--fa: ""}.fa-toilet-paper{--fa: ""}.fa-helmet-safety,.fa-hard-hat,.fa-hat-hard{--fa: ""}.fa-eject{--fa: ""}.fa-circle-right,.fa-arrow-alt-circle-right{--fa: ""}.fa-plane-circle-check{--fa: ""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa: ""}.fa-object-group{--fa: ""}.fa-chart-line,.fa-line-chart{--fa: ""}.fa-mask-ventilator{--fa: ""}.fa-arrow-right{--fa: ""}.fa-signs-post,.fa-map-signs{--fa: ""}.fa-cash-register{--fa: ""}.fa-person-circle-question{--fa: ""}.fa-h{--fa: "H"}.fa-tarp{--fa: ""}.fa-screwdriver-wrench,.fa-tools{--fa: ""}.fa-arrows-to-eye{--fa: ""}.fa-plug-circle-bolt{--fa: ""}.fa-heart{--fa: ""}.fa-mars-and-venus{--fa: ""}.fa-house-user,.fa-home-user{--fa: ""}.fa-dumpster-fire{--fa: ""}.fa-house-crack{--fa: ""}.fa-martini-glass-citrus,.fa-cocktail{--fa: ""}.fa-face-surprise,.fa-surprise{--fa: ""}.fa-bottle-water{--fa: ""}.fa-circle-pause,.fa-pause-circle{--fa: ""}.fa-toilet-paper-slash{--fa: ""}.fa-apple-whole,.fa-apple-alt{--fa: ""}.fa-kitchen-set{--fa: ""}.fa-r{--fa: "R"}.fa-temperature-quarter,.fa-temperature-1,.fa-thermometer-1,.fa-thermometer-quarter{--fa: ""}.fa-cube{--fa: ""}.fa-bitcoin-sign{--fa: ""}.fa-shield-dog{--fa: ""}.fa-solar-panel{--fa: ""}.fa-lock-open{--fa: ""}.fa-elevator{--fa: ""}.fa-money-bill-transfer{--fa: ""}.fa-money-bill-trend-up{--fa: ""}.fa-house-flood-water-circle-arrow-right{--fa: ""}.fa-square-poll-horizontal,.fa-poll-h{--fa: ""}.fa-circle{--fa: ""}.fa-backward-fast,.fa-fast-backward{--fa: ""}.fa-recycle{--fa: ""}.fa-user-astronaut{--fa: ""}.fa-plane-slash{--fa: ""}.fa-trademark{--fa: ""}.fa-basketball,.fa-basketball-ball{--fa: ""}.fa-satellite-dish{--fa: ""}.fa-circle-up,.fa-arrow-alt-circle-up{--fa: ""}.fa-mobile-screen-button,.fa-mobile-alt{--fa: ""}.fa-volume-high,.fa-volume-up{--fa: ""}.fa-users-rays{--fa: ""}.fa-wallet{--fa: ""}.fa-clipboard-check{--fa: ""}.fa-file-audio{--fa: ""}.fa-burger,.fa-hamburger{--fa: ""}.fa-wrench{--fa: ""}.fa-bugs{--fa: ""}.fa-rupee-sign,.fa-rupee{--fa: ""}.fa-file-image{--fa: ""}.fa-circle-question,.fa-question-circle{--fa: ""}.fa-plane-departure{--fa: ""}.fa-handshake-slash{--fa: ""}.fa-book-bookmark{--fa: ""}.fa-code-branch{--fa: ""}.fa-hat-cowboy{--fa: ""}.fa-bridge{--fa: ""}.fa-phone-flip,.fa-phone-alt{--fa: ""}.fa-truck-front{--fa: ""}.fa-cat{--fa: ""}.fa-anchor-circle-exclamation{--fa: ""}.fa-truck-field{--fa: ""}.fa-route{--fa: ""}.fa-clipboard-question{--fa: ""}.fa-panorama{--fa: ""}.fa-comment-medical{--fa: ""}.fa-teeth-open{--fa: ""}.fa-file-circle-minus{--fa: ""}.fa-tags{--fa: ""}.fa-wine-glass{--fa: ""}.fa-forward-fast,.fa-fast-forward{--fa: ""}.fa-face-meh-blank,.fa-meh-blank{--fa: ""}.fa-square-parking,.fa-parking{--fa: ""}.fa-house-signal{--fa: ""}.fa-bars-progress,.fa-tasks-alt{--fa: ""}.fa-faucet-drip{--fa: ""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa: ""}.fa-ban-smoking,.fa-smoking-ban{--fa: ""}.fa-terminal{--fa: ""}.fa-mobile-button{--fa: ""}.fa-house-medical-flag{--fa: ""}.fa-basket-shopping,.fa-shopping-basket{--fa: ""}.fa-tape{--fa: ""}.fa-bus-simple,.fa-bus-alt{--fa: ""}.fa-eye{--fa: ""}.fa-face-sad-cry,.fa-sad-cry{--fa: ""}.fa-audio-description{--fa: ""}.fa-person-military-to-person{--fa: ""}.fa-file-shield{--fa: ""}.fa-user-slash{--fa: ""}.fa-pen{--fa: ""}.fa-tower-observation{--fa: ""}.fa-file-code{--fa: ""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa: ""}.fa-bus{--fa: ""}.fa-heart-circle-xmark{--fa: ""}.fa-house-chimney,.fa-home-lg{--fa: ""}.fa-window-maximize{--fa: ""}.fa-face-frown,.fa-frown{--fa: ""}.fa-prescription{--fa: ""}.fa-shop,.fa-store-alt{--fa: ""}.fa-floppy-disk,.fa-save{--fa: ""}.fa-vihara{--fa: ""}.fa-scale-unbalanced,.fa-balance-scale-left{--fa: ""}.fa-sort-up,.fa-sort-asc{--fa: ""}.fa-comment-dots,.fa-commenting{--fa: ""}.fa-plant-wilt{--fa: ""}.fa-diamond{--fa: ""}.fa-face-grin-squint,.fa-grin-squint{--fa: ""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa: ""}.fa-chart-diagram{--fa: ""}.fa-bacterium{--fa: ""}.fa-hand-pointer{--fa: ""}.fa-drum-steelpan{--fa: ""}.fa-hand-scissors{--fa: ""}.fa-hands-praying,.fa-praying-hands{--fa: ""}.fa-arrow-rotate-right,.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-redo{--fa: ""}.fa-biohazard{--fa: ""}.fa-location-crosshairs,.fa-location{--fa: ""}.fa-mars-double{--fa: ""}.fa-child-dress{--fa: ""}.fa-users-between-lines{--fa: ""}.fa-lungs-virus{--fa: ""}.fa-face-grin-tears,.fa-grin-tears{--fa: ""}.fa-phone{--fa: ""}.fa-calendar-xmark,.fa-calendar-times{--fa: ""}.fa-child-reaching{--fa: ""}.fa-head-side-virus{--fa: ""}.fa-user-gear,.fa-user-cog{--fa: ""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa: ""}.fa-door-closed{--fa: ""}.fa-shield-virus{--fa: ""}.fa-dice-six{--fa: ""}.fa-mosquito-net{--fa: ""}.fa-file-fragment{--fa: ""}.fa-bridge-water{--fa: ""}.fa-person-booth{--fa: ""}.fa-text-width{--fa: ""}.fa-hat-wizard{--fa: ""}.fa-pen-fancy{--fa: ""}.fa-person-digging,.fa-digging{--fa: ""}.fa-trash{--fa: ""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa: ""}.fa-book-medical{--fa: ""}.fa-poo{--fa: ""}.fa-quote-right,.fa-quote-right-alt{--fa: ""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa: ""}.fa-cubes{--fa: ""}.fa-divide{--fa: ""}.fa-tenge-sign,.fa-tenge{--fa: ""}.fa-headphones{--fa: ""}.fa-hands-holding{--fa: ""}.fa-hands-clapping{--fa: ""}.fa-republican{--fa: ""}.fa-arrow-left{--fa: ""}.fa-person-circle-xmark{--fa: ""}.fa-ruler{--fa: ""}.fa-align-left{--fa: ""}.fa-dice-d6{--fa: ""}.fa-restroom{--fa: ""}.fa-j{--fa: "J"}.fa-users-viewfinder{--fa: ""}.fa-file-video{--fa: ""}.fa-up-right-from-square,.fa-external-link-alt{--fa: ""}.fa-table-cells,.fa-th{--fa: ""}.fa-file-pdf{--fa: ""}.fa-book-bible,.fa-bible{--fa: ""}.fa-o{--fa: "O"}.fa-suitcase-medical,.fa-medkit{--fa: ""}.fa-user-secret{--fa: ""}.fa-otter{--fa: ""}.fa-person-dress,.fa-female{--fa: ""}.fa-comment-dollar{--fa: ""}.fa-business-time,.fa-briefcase-clock{--fa: ""}.fa-table-cells-large,.fa-th-large{--fa: ""}.fa-book-tanakh,.fa-tanakh{--fa: ""}.fa-phone-volume,.fa-volume-control-phone{--fa: ""}.fa-hat-cowboy-side{--fa: ""}.fa-clipboard-user{--fa: ""}.fa-child{--fa: ""}.fa-lira-sign{--fa: ""}.fa-satellite{--fa: ""}.fa-plane-lock{--fa: ""}.fa-tag{--fa: ""}.fa-comment{--fa: ""}.fa-cake-candles,.fa-birthday-cake,.fa-cake{--fa: ""}.fa-envelope{--fa: ""}.fa-angles-up,.fa-angle-double-up{--fa: ""}.fa-paperclip{--fa: ""}.fa-arrow-right-to-city{--fa: ""}.fa-ribbon{--fa: ""}.fa-lungs{--fa: ""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa: ""}.fa-litecoin-sign{--fa: ""}.fa-border-none{--fa: ""}.fa-circle-nodes{--fa: ""}.fa-parachute-box{--fa: ""}.fa-indent{--fa: ""}.fa-truck-field-un{--fa: ""}.fa-hourglass,.fa-hourglass-empty{--fa: ""}.fa-mountain{--fa: ""}.fa-user-doctor,.fa-user-md{--fa: ""}.fa-circle-info,.fa-info-circle{--fa: ""}.fa-cloud-meatball{--fa: ""}.fa-camera,.fa-camera-alt{--fa: ""}.fa-square-virus{--fa: ""}.fa-meteor{--fa: ""}.fa-car-on{--fa: ""}.fa-sleigh{--fa: ""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa: ""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa: ""}.fa-water{--fa: ""}.fa-calendar-check{--fa: ""}.fa-braille{--fa: ""}.fa-prescription-bottle-medical,.fa-prescription-bottle-alt{--fa: ""}.fa-landmark{--fa: ""}.fa-truck{--fa: ""}.fa-crosshairs{--fa: ""}.fa-person-cane{--fa: ""}.fa-tent{--fa: ""}.fa-vest-patches{--fa: ""}.fa-check-double{--fa: ""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa: ""}.fa-money-bill-wheat{--fa: ""}.fa-cookie{--fa: ""}.fa-arrow-rotate-left,.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-undo{--fa: ""}.fa-hard-drive,.fa-hdd{--fa: ""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa: ""}.fa-dumbbell{--fa: ""}.fa-rectangle-list,.fa-list-alt{--fa: ""}.fa-tarp-droplet{--fa: ""}.fa-house-medical-circle-check{--fa: ""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa: ""}.fa-calendar-plus{--fa: ""}.fa-plane-arrival{--fa: ""}.fa-circle-left,.fa-arrow-alt-circle-left{--fa: ""}.fa-train-subway,.fa-subway{--fa: ""}.fa-chart-gantt{--fa: ""}.fa-indian-rupee-sign,.fa-indian-rupee,.fa-inr{--fa: ""}.fa-crop-simple,.fa-crop-alt{--fa: ""}.fa-money-bill-1,.fa-money-bill-alt{--fa: ""}.fa-left-long,.fa-long-arrow-alt-left{--fa: ""}.fa-dna{--fa: ""}.fa-virus-slash{--fa: ""}.fa-minus,.fa-subtract{--fa: ""}.fa-chess{--fa: ""}.fa-arrow-left-long,.fa-long-arrow-left{--fa: ""}.fa-plug-circle-check{--fa: ""}.fa-street-view{--fa: ""}.fa-franc-sign{--fa: ""}.fa-volume-off{--fa: ""}.fa-hands-asl-interpreting,.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting{--fa: ""}.fa-gear,.fa-cog{--fa: ""}.fa-droplet-slash,.fa-tint-slash{--fa: ""}.fa-mosque{--fa: ""}.fa-mosquito{--fa: ""}.fa-star-of-david{--fa: ""}.fa-person-military-rifle{--fa: ""}.fa-cart-shopping,.fa-shopping-cart{--fa: ""}.fa-vials{--fa: ""}.fa-plug-circle-plus{--fa: ""}.fa-place-of-worship{--fa: ""}.fa-grip-vertical{--fa: ""}.fa-hexagon-nodes{--fa: ""}.fa-arrow-turn-up,.fa-level-up{--fa: ""}.fa-u{--fa: "U"}.fa-square-root-variable,.fa-square-root-alt{--fa: ""}.fa-clock,.fa-clock-four{--fa: ""}.fa-backward-step,.fa-step-backward{--fa: ""}.fa-pallet{--fa: ""}.fa-faucet{--fa: ""}.fa-baseball-bat-ball{--fa: ""}.fa-s{--fa: "S"}.fa-timeline{--fa: ""}.fa-keyboard{--fa: ""}.fa-caret-down{--fa: ""}.fa-house-chimney-medical,.fa-clinic-medical{--fa: ""}.fa-temperature-three-quarters,.fa-temperature-3,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa: ""}.fa-mobile-screen,.fa-mobile-android-alt{--fa: ""}.fa-plane-up{--fa: ""}.fa-piggy-bank{--fa: ""}.fa-battery-half,.fa-battery-3{--fa: ""}.fa-mountain-city{--fa: ""}.fa-coins{--fa: ""}.fa-khanda{--fa: ""}.fa-sliders,.fa-sliders-h{--fa: ""}.fa-folder-tree{--fa: ""}.fa-network-wired{--fa: ""}.fa-map-pin{--fa: ""}.fa-hamsa{--fa: ""}.fa-cent-sign{--fa: ""}.fa-flask{--fa: ""}.fa-person-pregnant{--fa: ""}.fa-wand-sparkles{--fa: ""}.fa-ellipsis-vertical,.fa-ellipsis-v{--fa: ""}.fa-ticket{--fa: ""}.fa-power-off{--fa: ""}.fa-right-long,.fa-long-arrow-alt-right{--fa: ""}.fa-flag-usa{--fa: ""}.fa-laptop-file{--fa: ""}.fa-tty,.fa-teletype{--fa: ""}.fa-diagram-next{--fa: ""}.fa-person-rifle{--fa: ""}.fa-house-medical-circle-exclamation{--fa: ""}.fa-closed-captioning{--fa: ""}.fa-person-hiking,.fa-hiking{--fa: ""}.fa-venus-double{--fa: ""}.fa-images{--fa: ""}.fa-calculator{--fa: ""}.fa-people-pulling{--fa: ""}.fa-n{--fa: "N"}.fa-cable-car,.fa-tram{--fa: ""}.fa-cloud-rain{--fa: ""}.fa-building-circle-xmark{--fa: ""}.fa-ship{--fa: ""}.fa-arrows-down-to-line{--fa: ""}.fa-download{--fa: ""}.fa-face-grin,.fa-grin{--fa: ""}.fa-delete-left,.fa-backspace{--fa: ""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa: ""}.fa-file-circle-check{--fa: ""}.fa-forward{--fa: ""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa: ""}.fa-face-meh,.fa-meh{--fa: ""}.fa-align-center{--fa: ""}.fa-book-skull,.fa-book-dead{--fa: ""}.fa-id-card,.fa-drivers-license{--fa: ""}.fa-outdent,.fa-dedent{--fa: ""}.fa-heart-circle-exclamation{--fa: ""}.fa-house,.fa-home,.fa-home-alt,.fa-home-lg-alt{--fa: ""}.fa-calendar-week{--fa: ""}.fa-laptop-medical{--fa: ""}.fa-b{--fa: "B"}.fa-file-medical{--fa: ""}.fa-dice-one{--fa: ""}.fa-kiwi-bird{--fa: ""}.fa-arrow-right-arrow-left,.fa-exchange{--fa: ""}.fa-rotate-right,.fa-redo-alt,.fa-rotate-forward{--fa: ""}.fa-utensils,.fa-cutlery{--fa: ""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa: ""}.fa-mill-sign{--fa: ""}.fa-bowl-rice{--fa: ""}.fa-skull{--fa: ""}.fa-tower-broadcast,.fa-broadcast-tower{--fa: ""}.fa-truck-pickup{--fa: ""}.fa-up-long,.fa-long-arrow-alt-up{--fa: ""}.fa-stop{--fa: ""}.fa-code-merge{--fa: ""}.fa-upload{--fa: ""}.fa-hurricane{--fa: ""}.fa-mound{--fa: ""}.fa-toilet-portable{--fa: ""}.fa-compact-disc{--fa: ""}.fa-file-arrow-down,.fa-file-download{--fa: ""}.fa-caravan{--fa: ""}.fa-shield-cat{--fa: ""}.fa-bolt,.fa-zap{--fa: ""}.fa-glass-water{--fa: ""}.fa-oil-well{--fa: ""}.fa-vault{--fa: ""}.fa-mars{--fa: ""}.fa-toilet{--fa: ""}.fa-plane-circle-xmark{--fa: ""}.fa-yen-sign,.fa-cny,.fa-jpy,.fa-rmb,.fa-yen{--fa: ""}.fa-ruble-sign,.fa-rouble,.fa-rub,.fa-ruble{--fa: ""}.fa-sun{--fa: ""}.fa-guitar{--fa: ""}.fa-face-laugh-wink,.fa-laugh-wink{--fa: ""}.fa-horse-head{--fa: ""}.fa-bore-hole{--fa: ""}.fa-industry{--fa: ""}.fa-circle-down,.fa-arrow-alt-circle-down{--fa: ""}.fa-arrows-turn-to-dots{--fa: ""}.fa-florin-sign{--fa: ""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa: ""}.fa-less-than{--fa: "<"}.fa-angle-down{--fa: ""}.fa-car-tunnel{--fa: ""}.fa-head-side-cough{--fa: ""}.fa-grip-lines{--fa: ""}.fa-thumbs-down{--fa: ""}.fa-user-lock{--fa: ""}.fa-arrow-right-long,.fa-long-arrow-right{--fa: ""}.fa-anchor-circle-xmark{--fa: ""}.fa-ellipsis,.fa-ellipsis-h{--fa: ""}.fa-chess-pawn{--fa: ""}.fa-kit-medical,.fa-first-aid{--fa: ""}.fa-person-through-window{--fa: ""}.fa-toolbox{--fa: ""}.fa-hands-holding-circle{--fa: ""}.fa-bug{--fa: ""}.fa-credit-card,.fa-credit-card-alt{--fa: ""}.fa-car,.fa-automobile{--fa: ""}.fa-hand-holding-hand{--fa: ""}.fa-book-open-reader,.fa-book-reader{--fa: ""}.fa-mountain-sun{--fa: ""}.fa-arrows-left-right-to-line{--fa: ""}.fa-dice-d20{--fa: ""}.fa-truck-droplet{--fa: ""}.fa-file-circle-xmark{--fa: ""}.fa-temperature-arrow-up,.fa-temperature-up{--fa: ""}.fa-medal{--fa: ""}.fa-bed{--fa: ""}.fa-square-h,.fa-h-square{--fa: ""}.fa-podcast{--fa: ""}.fa-temperature-full,.fa-temperature-4,.fa-thermometer-4,.fa-thermometer-full{--fa: ""}.fa-bell{--fa: ""}.fa-superscript{--fa: ""}.fa-plug-circle-xmark{--fa: ""}.fa-star-of-life{--fa: ""}.fa-phone-slash{--fa: ""}.fa-paint-roller{--fa: ""}.fa-handshake-angle,.fa-hands-helping{--fa: ""}.fa-location-dot,.fa-map-marker-alt{--fa: ""}.fa-file{--fa: ""}.fa-greater-than{--fa: ">"}.fa-person-swimming,.fa-swimmer{--fa: ""}.fa-arrow-down{--fa: ""}.fa-droplet,.fa-tint{--fa: ""}.fa-eraser{--fa: ""}.fa-earth-americas,.fa-earth,.fa-earth-america,.fa-globe-americas{--fa: ""}.fa-person-burst{--fa: ""}.fa-dove{--fa: ""}.fa-battery-empty,.fa-battery-0{--fa: ""}.fa-socks{--fa: ""}.fa-inbox{--fa: ""}.fa-section{--fa: ""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa: ""}.fa-envelope-open-text{--fa: ""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa: ""}.fa-wine-bottle{--fa: ""}.fa-chess-rook{--fa: ""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa: ""}.fa-dharmachakra{--fa: ""}.fa-hotdog{--fa: ""}.fa-person-walking-with-cane,.fa-blind{--fa: ""}.fa-drum{--fa: ""}.fa-ice-cream{--fa: ""}.fa-heart-circle-bolt{--fa: ""}.fa-fax{--fa: ""}.fa-paragraph{--fa: ""}.fa-check-to-slot,.fa-vote-yea{--fa: ""}.fa-star-half{--fa: ""}.fa-boxes-stacked,.fa-boxes,.fa-boxes-alt{--fa: ""}.fa-link,.fa-chain{--fa: ""}.fa-ear-listen,.fa-assistive-listening-systems{--fa: ""}.fa-tree-city{--fa: ""}.fa-play{--fa: ""}.fa-font{--fa: ""}.fa-table-cells-row-lock{--fa: ""}.fa-rupiah-sign{--fa: ""}.fa-magnifying-glass,.fa-search{--fa: ""}.fa-table-tennis-paddle-ball,.fa-ping-pong-paddle-ball,.fa-table-tennis{--fa: ""}.fa-person-dots-from-line,.fa-diagnoses{--fa: ""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa: ""}.fa-naira-sign{--fa: ""}.fa-cart-arrow-down{--fa: ""}.fa-walkie-talkie{--fa: ""}.fa-file-pen,.fa-file-edit{--fa: ""}.fa-receipt{--fa: ""}.fa-square-pen,.fa-pen-square,.fa-pencil-square{--fa: ""}.fa-suitcase-rolling{--fa: ""}.fa-person-circle-exclamation{--fa: ""}.fa-chevron-down{--fa: ""}.fa-battery-full,.fa-battery,.fa-battery-5{--fa: ""}.fa-skull-crossbones{--fa: ""}.fa-code-compare{--fa: ""}.fa-list-ul,.fa-list-dots{--fa: ""}.fa-school-lock{--fa: ""}.fa-tower-cell{--fa: ""}.fa-down-long,.fa-long-arrow-alt-down{--fa: ""}.fa-ranking-star{--fa: ""}.fa-chess-king{--fa: ""}.fa-person-harassing{--fa: ""}.fa-brazilian-real-sign{--fa: ""}.fa-landmark-dome,.fa-landmark-alt{--fa: ""}.fa-arrow-up{--fa: ""}.fa-tv,.fa-television,.fa-tv-alt{--fa: ""}.fa-shrimp{--fa: ""}.fa-list-check,.fa-tasks{--fa: ""}.fa-jug-detergent{--fa: ""}.fa-circle-user,.fa-user-circle{--fa: ""}.fa-user-shield{--fa: ""}.fa-wind{--fa: ""}.fa-car-burst,.fa-car-crash{--fa: ""}.fa-y{--fa: "Y"}.fa-person-snowboarding,.fa-snowboarding{--fa: ""}.fa-truck-fast,.fa-shipping-fast{--fa: ""}.fa-fish{--fa: ""}.fa-user-graduate{--fa: ""}.fa-circle-half-stroke,.fa-adjust{--fa: ""}.fa-clapperboard{--fa: ""}.fa-circle-radiation,.fa-radiation-alt{--fa: ""}.fa-baseball,.fa-baseball-ball{--fa: ""}.fa-jet-fighter-up{--fa: ""}.fa-diagram-project,.fa-project-diagram{--fa: ""}.fa-copy{--fa: ""}.fa-volume-xmark,.fa-volume-mute,.fa-volume-times{--fa: ""}.fa-hand-sparkles{--fa: ""}.fa-grip,.fa-grip-horizontal{--fa: ""}.fa-share-from-square,.fa-share-square{--fa: ""}.fa-child-combatant,.fa-child-rifle{--fa: ""}.fa-gun{--fa: ""}.fa-square-phone,.fa-phone-square{--fa: ""}.fa-plus,.fa-add{--fa: "+"}.fa-expand{--fa: ""}.fa-computer{--fa: ""}.fa-xmark,.fa-close,.fa-multiply,.fa-remove,.fa-times{--fa: ""}.fa-arrows-up-down-left-right,.fa-arrows{--fa: ""}.fa-chalkboard-user,.fa-chalkboard-teacher{--fa: ""}.fa-peso-sign{--fa: ""}.fa-building-shield{--fa: ""}.fa-baby{--fa: ""}.fa-users-line{--fa: ""}.fa-quote-left,.fa-quote-left-alt{--fa: ""}.fa-tractor{--fa: ""}.fa-trash-arrow-up,.fa-trash-restore{--fa: ""}.fa-arrow-down-up-lock{--fa: ""}.fa-lines-leaning{--fa: ""}.fa-ruler-combined{--fa: ""}.fa-copyright{--fa: ""}.fa-equals{--fa: "="}.fa-blender{--fa: ""}.fa-teeth{--fa: ""}.fa-shekel-sign,.fa-ils,.fa-shekel,.fa-sheqel,.fa-sheqel-sign{--fa: ""}.fa-map{--fa: ""}.fa-rocket{--fa: ""}.fa-photo-film,.fa-photo-video{--fa: ""}.fa-folder-minus{--fa: ""}.fa-hexagon-nodes-bolt{--fa: ""}.fa-store{--fa: ""}.fa-arrow-trend-up{--fa: ""}.fa-plug-circle-minus{--fa: ""}.fa-sign-hanging,.fa-sign{--fa: ""}.fa-bezier-curve{--fa: ""}.fa-bell-slash{--fa: ""}.fa-tablet,.fa-tablet-android{--fa: ""}.fa-school-flag{--fa: ""}.fa-fill{--fa: ""}.fa-angle-up{--fa: ""}.fa-drumstick-bite{--fa: ""}.fa-holly-berry{--fa: ""}.fa-chevron-left{--fa: ""}.fa-bacteria{--fa: ""}.fa-hand-lizard{--fa: ""}.fa-notdef{--fa: ""}.fa-disease{--fa: ""}.fa-briefcase-medical{--fa: ""}.fa-genderless{--fa: ""}.fa-chevron-right{--fa: ""}.fa-retweet{--fa: ""}.fa-car-rear,.fa-car-alt{--fa: ""}.fa-pump-soap{--fa: ""}.fa-video-slash{--fa: ""}.fa-battery-quarter,.fa-battery-2{--fa: ""}.fa-radio{--fa: ""}.fa-baby-carriage,.fa-carriage-baby{--fa: ""}.fa-traffic-light{--fa: ""}.fa-thermometer{--fa: ""}.fa-vr-cardboard{--fa: ""}.fa-hand-middle-finger{--fa: ""}.fa-percent,.fa-percentage{--fa: "%"}.fa-truck-moving{--fa: ""}.fa-glass-water-droplet{--fa: ""}.fa-display{--fa: ""}.fa-face-smile,.fa-smile{--fa: ""}.fa-thumbtack,.fa-thumb-tack{--fa: ""}.fa-trophy{--fa: ""}.fa-person-praying,.fa-pray{--fa: ""}.fa-hammer{--fa: ""}.fa-hand-peace{--fa: ""}.fa-rotate,.fa-sync-alt{--fa: ""}.fa-spinner{--fa: ""}.fa-robot{--fa: ""}.fa-peace{--fa: ""}.fa-gears,.fa-cogs{--fa: ""}.fa-warehouse{--fa: ""}.fa-arrow-up-right-dots{--fa: ""}.fa-splotch{--fa: ""}.fa-face-grin-hearts,.fa-grin-hearts{--fa: ""}.fa-dice-four{--fa: ""}.fa-sim-card{--fa: ""}.fa-transgender,.fa-transgender-alt{--fa: ""}.fa-mercury{--fa: ""}.fa-arrow-turn-down,.fa-level-down{--fa: ""}.fa-person-falling-burst{--fa: ""}.fa-award{--fa: ""}.fa-ticket-simple,.fa-ticket-alt{--fa: ""}.fa-building{--fa: ""}.fa-angles-left,.fa-angle-double-left{--fa: ""}.fa-qrcode{--fa: ""}.fa-clock-rotate-left,.fa-history{--fa: ""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa: ""}.fa-file-export,.fa-arrow-right-from-file{--fa: ""}.fa-shield,.fa-shield-blank{--fa: ""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa: ""}.fa-comment-nodes{--fa: ""}.fa-house-medical{--fa: ""}.fa-golf-ball-tee,.fa-golf-ball{--fa: ""}.fa-circle-chevron-left,.fa-chevron-circle-left{--fa: ""}.fa-house-chimney-window{--fa: ""}.fa-pen-nib{--fa: ""}.fa-tent-arrow-turn-left{--fa: ""}.fa-tents{--fa: ""}.fa-wand-magic,.fa-magic{--fa: ""}.fa-dog{--fa: ""}.fa-carrot{--fa: ""}.fa-moon{--fa: ""}.fa-wine-glass-empty,.fa-wine-glass-alt{--fa: ""}.fa-cheese{--fa: ""}.fa-yin-yang{--fa: ""}.fa-music{--fa: ""}.fa-code-commit{--fa: ""}.fa-temperature-low{--fa: ""}.fa-person-biking,.fa-biking{--fa: ""}.fa-broom{--fa: ""}.fa-shield-heart{--fa: ""}.fa-gopuram{--fa: ""}.fa-earth-oceania,.fa-globe-oceania{--fa: ""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa: ""}.fa-hashtag{--fa: "#"}.fa-up-right-and-down-left-from-center,.fa-expand-alt{--fa: ""}.fa-oil-can{--fa: ""}.fa-t{--fa: "T"}.fa-hippo{--fa: ""}.fa-chart-column{--fa: ""}.fa-infinity{--fa: ""}.fa-vial-circle-check{--fa: ""}.fa-person-arrow-down-to-line{--fa: ""}.fa-voicemail{--fa: ""}.fa-fan{--fa: ""}.fa-person-walking-luggage{--fa: ""}.fa-up-down,.fa-arrows-alt-v{--fa: ""}.fa-cloud-moon-rain{--fa: ""}.fa-calendar{--fa: ""}.fa-trailer{--fa: ""}.fa-bahai,.fa-haykal{--fa: ""}.fa-sd-card{--fa: ""}.fa-dragon{--fa: ""}.fa-shoe-prints{--fa: ""}.fa-circle-plus,.fa-plus-circle{--fa: ""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa: ""}.fa-hand-holding{--fa: ""}.fa-plug-circle-exclamation{--fa: ""}.fa-link-slash,.fa-chain-broken,.fa-chain-slash,.fa-unlink{--fa: ""}.fa-clone{--fa: ""}.fa-person-walking-arrow-loop-left{--fa: ""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa: ""}.fa-fire-flame-curved,.fa-fire-alt{--fa: ""}.fa-tornado{--fa: ""}.fa-file-circle-plus{--fa: ""}.fa-book-quran,.fa-quran{--fa: ""}.fa-anchor{--fa: ""}.fa-border-all{--fa: ""}.fa-face-angry,.fa-angry{--fa: ""}.fa-cookie-bite{--fa: ""}.fa-arrow-trend-down{--fa: ""}.fa-rss,.fa-feed{--fa: ""}.fa-draw-polygon{--fa: ""}.fa-scale-balanced,.fa-balance-scale{--fa: ""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa: ""}.fa-shower{--fa: ""}.fa-desktop,.fa-desktop-alt{--fa: ""}.fa-m{--fa: "M"}.fa-table-list,.fa-th-list{--fa: ""}.fa-comment-sms,.fa-sms{--fa: ""}.fa-book{--fa: ""}.fa-user-plus{--fa: ""}.fa-check{--fa: ""}.fa-battery-three-quarters,.fa-battery-4{--fa: ""}.fa-house-circle-check{--fa: ""}.fa-angle-left{--fa: ""}.fa-diagram-successor{--fa: ""}.fa-truck-arrow-right{--fa: ""}.fa-arrows-split-up-and-left{--fa: ""}.fa-hand-fist,.fa-fist-raised{--fa: ""}.fa-cloud-moon{--fa: ""}.fa-briefcase{--fa: ""}.fa-person-falling{--fa: ""}.fa-image-portrait,.fa-portrait{--fa: ""}.fa-user-tag{--fa: ""}.fa-rug{--fa: ""}.fa-earth-europe,.fa-globe-europe{--fa: ""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa: ""}.fa-rectangle-xmark,.fa-rectangle-times,.fa-times-rectangle,.fa-window-close{--fa: ""}.fa-baht-sign{--fa: ""}.fa-book-open{--fa: ""}.fa-book-journal-whills,.fa-journal-whills{--fa: ""}.fa-handcuffs{--fa: ""}.fa-triangle-exclamation,.fa-exclamation-triangle,.fa-warning{--fa: ""}.fa-database{--fa: ""}.fa-share,.fa-mail-forward{--fa: ""}.fa-bottle-droplet{--fa: ""}.fa-mask-face{--fa: ""}.fa-hill-rockslide{--fa: ""}.fa-right-left,.fa-exchange-alt{--fa: ""}.fa-paper-plane{--fa: ""}.fa-road-circle-exclamation{--fa: ""}.fa-dungeon{--fa: ""}.fa-align-right{--fa: ""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa: ""}.fa-life-ring{--fa: ""}.fa-hands,.fa-sign-language,.fa-signing{--fa: ""}.fa-calendar-day{--fa: ""}.fa-water-ladder,.fa-ladder-water,.fa-swimming-pool{--fa: ""}.fa-arrows-up-down,.fa-arrows-v{--fa: ""}.fa-face-grimace,.fa-grimace{--fa: ""}.fa-wheelchair-move,.fa-wheelchair-alt{--fa: ""}.fa-turn-down,.fa-level-down-alt{--fa: ""}.fa-person-walking-arrow-right{--fa: ""}.fa-square-envelope,.fa-envelope-square{--fa: ""}.fa-dice{--fa: ""}.fa-bowling-ball{--fa: ""}.fa-brain{--fa: ""}.fa-bandage,.fa-band-aid{--fa: ""}.fa-calendar-minus{--fa: ""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa: ""}.fa-gifts{--fa: ""}.fa-hotel{--fa: ""}.fa-earth-asia,.fa-globe-asia{--fa: ""}.fa-id-card-clip,.fa-id-card-alt{--fa: ""}.fa-magnifying-glass-plus,.fa-search-plus{--fa: ""}.fa-thumbs-up{--fa: ""}.fa-user-clock{--fa: ""}.fa-hand-dots,.fa-allergies{--fa: ""}.fa-file-invoice{--fa: ""}.fa-window-minimize{--fa: ""}.fa-mug-saucer,.fa-coffee{--fa: ""}.fa-brush{--fa: ""}.fa-file-half-dashed{--fa: ""}.fa-mask{--fa: ""}.fa-magnifying-glass-minus,.fa-search-minus{--fa: ""}.fa-ruler-vertical{--fa: ""}.fa-user-large,.fa-user-alt{--fa: ""}.fa-train-tram{--fa: ""}.fa-user-nurse{--fa: ""}.fa-syringe{--fa: ""}.fa-cloud-sun{--fa: ""}.fa-stopwatch-20{--fa: ""}.fa-square-full{--fa: ""}.fa-magnet{--fa: ""}.fa-jar{--fa: ""}.fa-note-sticky,.fa-sticky-note{--fa: ""}.fa-bug-slash{--fa: ""}.fa-arrow-up-from-water-pump{--fa: ""}.fa-bone{--fa: ""}.fa-table-cells-row-unlock{--fa: ""}.fa-user-injured{--fa: ""}.fa-face-sad-tear,.fa-sad-tear{--fa: ""}.fa-plane{--fa: ""}.fa-tent-arrows-down{--fa: ""}.fa-exclamation{--fa: "!"}.fa-arrows-spin{--fa: ""}.fa-print{--fa: ""}.fa-turkish-lira-sign,.fa-try,.fa-turkish-lira{--fa: ""}.fa-dollar-sign,.fa-dollar,.fa-usd{--fa: "$"}.fa-x{--fa: "X"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa: ""}.fa-users-gear,.fa-users-cog{--fa: ""}.fa-person-military-pointing{--fa: ""}.fa-building-columns,.fa-bank,.fa-institution,.fa-museum,.fa-university{--fa: ""}.fa-umbrella{--fa: ""}.fa-trowel{--fa: ""}.fa-d{--fa: "D"}.fa-stapler{--fa: ""}.fa-masks-theater,.fa-theater-masks{--fa: ""}.fa-kip-sign{--fa: ""}.fa-hand-point-left{--fa: ""}.fa-handshake-simple,.fa-handshake-alt{--fa: ""}.fa-jet-fighter,.fa-fighter-jet{--fa: ""}.fa-square-share-nodes,.fa-share-alt-square{--fa: ""}.fa-barcode{--fa: ""}.fa-plus-minus{--fa: ""}.fa-video,.fa-video-camera{--fa: ""}.fa-graduation-cap,.fa-mortar-board{--fa: ""}.fa-hand-holding-medical{--fa: ""}.fa-person-circle-check{--fa: ""}.fa-turn-up,.fa-level-up-alt{--fa: ""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero{--fa: ""}.fa-hooli{--fa: ""}.fa-yelp{--fa: ""}.fa-cc-visa{--fa: ""}.fa-lastfm{--fa: ""}.fa-shopware{--fa: ""}.fa-creative-commons-nc{--fa: ""}.fa-aws{--fa: ""}.fa-redhat{--fa: ""}.fa-yoast{--fa: ""}.fa-cloudflare{--fa: ""}.fa-ups{--fa: ""}.fa-pixiv{--fa: ""}.fa-wpexplorer{--fa: ""}.fa-dyalog{--fa: ""}.fa-bity{--fa: ""}.fa-stackpath{--fa: ""}.fa-buysellads{--fa: ""}.fa-first-order{--fa: ""}.fa-modx{--fa: ""}.fa-guilded{--fa: ""}.fa-vnv{--fa: ""}.fa-square-js,.fa-js-square{--fa: ""}.fa-microsoft{--fa: ""}.fa-qq{--fa: ""}.fa-orcid{--fa: ""}.fa-java{--fa: ""}.fa-invision{--fa: ""}.fa-creative-commons-pd-alt{--fa: ""}.fa-centercode{--fa: ""}.fa-glide-g{--fa: ""}.fa-drupal{--fa: ""}.fa-jxl{--fa: ""}.fa-dart-lang{--fa: ""}.fa-hire-a-helper{--fa: ""}.fa-creative-commons-by{--fa: ""}.fa-unity{--fa: ""}.fa-whmcs{--fa: ""}.fa-rocketchat{--fa: ""}.fa-vk{--fa: ""}.fa-untappd{--fa: ""}.fa-mailchimp{--fa: ""}.fa-css3-alt{--fa: ""}.fa-square-reddit,.fa-reddit-square{--fa: ""}.fa-vimeo-v{--fa: ""}.fa-contao{--fa: ""}.fa-square-font-awesome{--fa: ""}.fa-deskpro{--fa: ""}.fa-brave{--fa: ""}.fa-sistrix{--fa: ""}.fa-square-instagram,.fa-instagram-square{--fa: ""}.fa-battle-net{--fa: ""}.fa-the-red-yeti{--fa: ""}.fa-square-hacker-news,.fa-hacker-news-square{--fa: ""}.fa-edge{--fa: ""}.fa-threads{--fa: ""}.fa-napster{--fa: ""}.fa-square-snapchat,.fa-snapchat-square{--fa: ""}.fa-google-plus-g{--fa: ""}.fa-artstation{--fa: ""}.fa-markdown{--fa: ""}.fa-sourcetree{--fa: ""}.fa-google-plus{--fa: ""}.fa-diaspora{--fa: ""}.fa-foursquare{--fa: ""}.fa-stack-overflow{--fa: ""}.fa-github-alt{--fa: ""}.fa-phoenix-squadron{--fa: ""}.fa-pagelines{--fa: ""}.fa-algolia{--fa: ""}.fa-red-river{--fa: ""}.fa-creative-commons-sa{--fa: ""}.fa-safari{--fa: ""}.fa-google{--fa: ""}.fa-square-font-awesome-stroke,.fa-font-awesome-alt{--fa: ""}.fa-atlassian{--fa: ""}.fa-linkedin-in{--fa: ""}.fa-digital-ocean{--fa: ""}.fa-nimblr{--fa: ""}.fa-chromecast{--fa: ""}.fa-evernote{--fa: ""}.fa-hacker-news{--fa: ""}.fa-creative-commons-sampling{--fa: ""}.fa-adversal{--fa: ""}.fa-creative-commons{--fa: ""}.fa-watchman-monitoring{--fa: ""}.fa-fonticons{--fa: ""}.fa-weixin{--fa: ""}.fa-shirtsinbulk{--fa: ""}.fa-codepen{--fa: ""}.fa-git-alt{--fa: ""}.fa-lyft{--fa: ""}.fa-rev{--fa: ""}.fa-windows{--fa: ""}.fa-wizards-of-the-coast{--fa: ""}.fa-square-viadeo,.fa-viadeo-square{--fa: ""}.fa-meetup{--fa: ""}.fa-centos{--fa: ""}.fa-adn{--fa: ""}.fa-cloudsmith{--fa: ""}.fa-opensuse{--fa: ""}.fa-pied-piper-alt{--fa: ""}.fa-square-dribbble,.fa-dribbble-square{--fa: ""}.fa-codiepie{--fa: ""}.fa-node{--fa: ""}.fa-mix{--fa: ""}.fa-steam{--fa: ""}.fa-cc-apple-pay{--fa: ""}.fa-scribd{--fa: ""}.fa-debian{--fa: ""}.fa-openid{--fa: ""}.fa-instalod{--fa: ""}.fa-files-pinwheel{--fa: ""}.fa-expeditedssl{--fa: ""}.fa-sellcast{--fa: ""}.fa-square-twitter,.fa-twitter-square{--fa: ""}.fa-r-project{--fa: ""}.fa-delicious{--fa: ""}.fa-freebsd{--fa: ""}.fa-vuejs{--fa: ""}.fa-accusoft{--fa: ""}.fa-ioxhost{--fa: ""}.fa-fonticons-fi{--fa: ""}.fa-app-store{--fa: ""}.fa-cc-mastercard{--fa: ""}.fa-itunes-note{--fa: ""}.fa-golang{--fa: ""}.fa-kickstarter,.fa-square-kickstarter{--fa: ""}.fa-grav{--fa: ""}.fa-weibo{--fa: ""}.fa-uncharted{--fa: ""}.fa-firstdraft{--fa: ""}.fa-square-youtube,.fa-youtube-square{--fa: ""}.fa-wikipedia-w{--fa: ""}.fa-wpressr,.fa-rendact{--fa: ""}.fa-angellist{--fa: ""}.fa-galactic-republic{--fa: ""}.fa-nfc-directional{--fa: ""}.fa-skype{--fa: ""}.fa-joget{--fa: ""}.fa-fedora{--fa: ""}.fa-stripe-s{--fa: ""}.fa-meta{--fa: ""}.fa-laravel{--fa: ""}.fa-hotjar{--fa: ""}.fa-bluetooth-b{--fa: ""}.fa-square-letterboxd{--fa: ""}.fa-sticker-mule{--fa: ""}.fa-creative-commons-zero{--fa: ""}.fa-hips{--fa: ""}.fa-css{--fa: ""}.fa-behance{--fa: ""}.fa-reddit{--fa: ""}.fa-discord{--fa: ""}.fa-chrome{--fa: ""}.fa-app-store-ios{--fa: ""}.fa-cc-discover{--fa: ""}.fa-wpbeginner{--fa: ""}.fa-confluence{--fa: ""}.fa-shoelace{--fa: ""}.fa-mdb{--fa: ""}.fa-dochub{--fa: ""}.fa-accessible-icon{--fa: ""}.fa-ebay{--fa: ""}.fa-amazon{--fa: ""}.fa-unsplash{--fa: ""}.fa-yarn{--fa: ""}.fa-square-steam,.fa-steam-square{--fa: ""}.fa-500px{--fa: ""}.fa-square-vimeo,.fa-vimeo-square{--fa: ""}.fa-asymmetrik{--fa: ""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa: ""}.fa-gratipay{--fa: ""}.fa-apple{--fa: ""}.fa-hive{--fa: ""}.fa-gitkraken{--fa: ""}.fa-keybase{--fa: ""}.fa-apple-pay{--fa: ""}.fa-padlet{--fa: ""}.fa-amazon-pay{--fa: ""}.fa-square-github,.fa-github-square{--fa: ""}.fa-stumbleupon{--fa: ""}.fa-fedex{--fa: ""}.fa-phoenix-framework{--fa: ""}.fa-shopify{--fa: ""}.fa-neos{--fa: ""}.fa-square-threads{--fa: ""}.fa-hackerrank{--fa: ""}.fa-researchgate{--fa: ""}.fa-swift{--fa: ""}.fa-angular{--fa: ""}.fa-speakap{--fa: ""}.fa-angrycreative{--fa: ""}.fa-y-combinator{--fa: ""}.fa-empire{--fa: ""}.fa-envira{--fa: ""}.fa-google-scholar{--fa: ""}.fa-square-gitlab,.fa-gitlab-square{--fa: ""}.fa-studiovinari{--fa: ""}.fa-pied-piper{--fa: ""}.fa-wordpress{--fa: ""}.fa-product-hunt{--fa: ""}.fa-firefox{--fa: ""}.fa-linode{--fa: ""}.fa-goodreads{--fa: ""}.fa-square-odnoklassniki,.fa-odnoklassniki-square{--fa: ""}.fa-jsfiddle{--fa: ""}.fa-sith{--fa: ""}.fa-themeisle{--fa: ""}.fa-page4{--fa: ""}.fa-hashnode{--fa: ""}.fa-react{--fa: ""}.fa-cc-paypal{--fa: ""}.fa-squarespace{--fa: ""}.fa-cc-stripe{--fa: ""}.fa-creative-commons-share{--fa: ""}.fa-bitcoin{--fa: ""}.fa-keycdn{--fa: ""}.fa-opera{--fa: ""}.fa-itch-io{--fa: ""}.fa-umbraco{--fa: ""}.fa-galactic-senate{--fa: ""}.fa-ubuntu{--fa: ""}.fa-draft2digital{--fa: ""}.fa-stripe{--fa: ""}.fa-houzz{--fa: ""}.fa-gg{--fa: ""}.fa-dhl{--fa: ""}.fa-square-pinterest,.fa-pinterest-square{--fa: ""}.fa-xing{--fa: ""}.fa-blackberry{--fa: ""}.fa-creative-commons-pd{--fa: ""}.fa-playstation{--fa: ""}.fa-quinscape{--fa: ""}.fa-less{--fa: ""}.fa-blogger-b{--fa: ""}.fa-opencart{--fa: ""}.fa-vine{--fa: ""}.fa-signal-messenger{--fa: ""}.fa-paypal{--fa: ""}.fa-gitlab{--fa: ""}.fa-typo3{--fa: ""}.fa-reddit-alien{--fa: ""}.fa-yahoo{--fa: ""}.fa-dailymotion{--fa: ""}.fa-affiliatetheme{--fa: ""}.fa-pied-piper-pp{--fa: ""}.fa-bootstrap{--fa: ""}.fa-odnoklassniki{--fa: ""}.fa-nfc-symbol{--fa: ""}.fa-mintbit{--fa: ""}.fa-ethereum{--fa: ""}.fa-speaker-deck{--fa: ""}.fa-creative-commons-nc-eu{--fa: ""}.fa-patreon{--fa: ""}.fa-avianex{--fa: ""}.fa-ello{--fa: ""}.fa-gofore{--fa: ""}.fa-bimobject{--fa: ""}.fa-brave-reverse{--fa: ""}.fa-facebook-f{--fa: ""}.fa-square-google-plus,.fa-google-plus-square{--fa: ""}.fa-web-awesome{--fa: ""}.fa-mandalorian{--fa: ""}.fa-first-order-alt{--fa: ""}.fa-osi{--fa: ""}.fa-google-wallet{--fa: ""}.fa-d-and-d-beyond{--fa: ""}.fa-periscope{--fa: ""}.fa-fulcrum{--fa: ""}.fa-cloudscale{--fa: ""}.fa-forumbee{--fa: ""}.fa-mizuni{--fa: ""}.fa-schlix{--fa: ""}.fa-square-xing,.fa-xing-square{--fa: ""}.fa-bandcamp{--fa: ""}.fa-wpforms{--fa: ""}.fa-cloudversify{--fa: ""}.fa-usps{--fa: ""}.fa-megaport{--fa: ""}.fa-magento{--fa: ""}.fa-spotify{--fa: ""}.fa-optin-monster{--fa: ""}.fa-fly{--fa: ""}.fa-square-bluesky{--fa: ""}.fa-aviato{--fa: ""}.fa-itunes{--fa: ""}.fa-cuttlefish{--fa: ""}.fa-blogger{--fa: ""}.fa-flickr{--fa: ""}.fa-viber{--fa: ""}.fa-soundcloud{--fa: ""}.fa-digg{--fa: ""}.fa-tencent-weibo{--fa: ""}.fa-letterboxd{--fa: ""}.fa-symfony{--fa: ""}.fa-maxcdn{--fa: ""}.fa-etsy{--fa: ""}.fa-facebook-messenger{--fa: ""}.fa-audible{--fa: ""}.fa-think-peaks{--fa: ""}.fa-bilibili{--fa: ""}.fa-erlang{--fa: ""}.fa-x-twitter{--fa: ""}.fa-cotton-bureau{--fa: ""}.fa-dashcube{--fa: ""}.fa-42-group,.fa-innosoft{--fa: ""}.fa-stack-exchange{--fa: ""}.fa-elementor{--fa: ""}.fa-square-pied-piper,.fa-pied-piper-square{--fa: ""}.fa-creative-commons-nd{--fa: ""}.fa-palfed{--fa: ""}.fa-superpowers{--fa: ""}.fa-resolving{--fa: ""}.fa-xbox{--fa: ""}.fa-square-web-awesome-stroke{--fa: ""}.fa-searchengin{--fa: ""}.fa-tiktok{--fa: ""}.fa-square-facebook,.fa-facebook-square{--fa: ""}.fa-renren{--fa: ""}.fa-linux{--fa: ""}.fa-glide{--fa: ""}.fa-linkedin{--fa: ""}.fa-hubspot{--fa: ""}.fa-deploydog{--fa: ""}.fa-twitch{--fa: ""}.fa-flutter{--fa: ""}.fa-ravelry{--fa: ""}.fa-mixer{--fa: ""}.fa-square-lastfm,.fa-lastfm-square{--fa: ""}.fa-vimeo{--fa: ""}.fa-mendeley{--fa: ""}.fa-uniregistry{--fa: ""}.fa-figma{--fa: ""}.fa-creative-commons-remix{--fa: ""}.fa-cc-amazon-pay{--fa: ""}.fa-dropbox{--fa: ""}.fa-instagram{--fa: ""}.fa-cmplid{--fa: ""}.fa-upwork{--fa: ""}.fa-facebook{--fa: ""}.fa-gripfire{--fa: ""}.fa-jedi-order{--fa: ""}.fa-uikit{--fa: ""}.fa-fort-awesome-alt{--fa: ""}.fa-phabricator{--fa: ""}.fa-ussunnah{--fa: ""}.fa-earlybirds{--fa: ""}.fa-trade-federation{--fa: ""}.fa-autoprefixer{--fa: ""}.fa-whatsapp{--fa: ""}.fa-square-upwork{--fa: ""}.fa-slideshare{--fa: ""}.fa-google-play{--fa: ""}.fa-viadeo{--fa: ""}.fa-line{--fa: ""}.fa-google-drive{--fa: ""}.fa-servicestack{--fa: ""}.fa-simplybuilt{--fa: ""}.fa-bitbucket{--fa: ""}.fa-imdb{--fa: ""}.fa-deezer{--fa: ""}.fa-raspberry-pi{--fa: ""}.fa-jira{--fa: ""}.fa-docker{--fa: ""}.fa-screenpal{--fa: ""}.fa-bluetooth{--fa: ""}.fa-gitter{--fa: ""}.fa-d-and-d{--fa: ""}.fa-microblog{--fa: ""}.fa-cc-diners-club{--fa: ""}.fa-gg-circle{--fa: ""}.fa-pied-piper-hat{--fa: ""}.fa-kickstarter-k{--fa: ""}.fa-yandex{--fa: ""}.fa-readme{--fa: ""}.fa-html5{--fa: ""}.fa-sellsy{--fa: ""}.fa-square-web-awesome{--fa: ""}.fa-sass{--fa: ""}.fa-wirsindhandwerk,.fa-wsh{--fa: ""}.fa-buromobelexperte{--fa: ""}.fa-salesforce{--fa: ""}.fa-octopus-deploy{--fa: ""}.fa-medapps{--fa: ""}.fa-ns8{--fa: ""}.fa-pinterest-p{--fa: ""}.fa-apper{--fa: ""}.fa-fort-awesome{--fa: ""}.fa-waze{--fa: ""}.fa-bluesky{--fa: ""}.fa-cc-jcb{--fa: ""}.fa-snapchat,.fa-snapchat-ghost{--fa: ""}.fa-fantasy-flight-games{--fa: ""}.fa-rust{--fa: ""}.fa-wix{--fa: ""}.fa-square-behance,.fa-behance-square{--fa: ""}.fa-supple{--fa: ""}.fa-webflow{--fa: ""}.fa-rebel{--fa: ""}.fa-css3{--fa: ""}.fa-staylinked{--fa: ""}.fa-kaggle{--fa: ""}.fa-space-awesome{--fa: ""}.fa-deviantart{--fa: ""}.fa-cpanel{--fa: ""}.fa-goodreads-g{--fa: ""}.fa-square-git,.fa-git-square{--fa: ""}.fa-square-tumblr,.fa-tumblr-square{--fa: ""}.fa-trello{--fa: ""}.fa-creative-commons-nc-jp{--fa: ""}.fa-get-pocket{--fa: ""}.fa-perbyte{--fa: ""}.fa-grunt{--fa: ""}.fa-weebly{--fa: ""}.fa-connectdevelop{--fa: ""}.fa-leanpub{--fa: ""}.fa-black-tie{--fa: ""}.fa-themeco{--fa: ""}.fa-python{--fa: ""}.fa-android{--fa: ""}.fa-bots{--fa: ""}.fa-free-code-camp{--fa: ""}.fa-hornbill{--fa: ""}.fa-js{--fa: ""}.fa-ideal{--fa: ""}.fa-git{--fa: ""}.fa-dev{--fa: ""}.fa-sketch{--fa: ""}.fa-yandex-international{--fa: ""}.fa-cc-amex{--fa: ""}.fa-uber{--fa: ""}.fa-github{--fa: ""}.fa-php{--fa: ""}.fa-alipay{--fa: ""}.fa-youtube{--fa: ""}.fa-skyatlas{--fa: ""}.fa-firefox-browser{--fa: ""}.fa-replyd{--fa: ""}.fa-suse{--fa: ""}.fa-jenkins{--fa: ""}.fa-twitter{--fa: ""}.fa-rockrms{--fa: ""}.fa-pinterest{--fa: ""}.fa-buffer{--fa: ""}.fa-npm{--fa: ""}.fa-yammer{--fa: ""}.fa-btc{--fa: ""}.fa-dribbble{--fa: ""}.fa-stumbleupon-circle{--fa: ""}.fa-internet-explorer{--fa: ""}.fa-stubber{--fa: ""}.fa-telegram,.fa-telegram-plane{--fa: ""}.fa-old-republic{--fa: ""}.fa-odysee{--fa: ""}.fa-square-whatsapp,.fa-whatsapp-square{--fa: ""}.fa-node-js{--fa: ""}.fa-edge-legacy{--fa: ""}.fa-slack,.fa-slack-hash{--fa: ""}.fa-medrt{--fa: ""}.fa-usb{--fa: ""}.fa-tumblr{--fa: ""}.fa-vaadin{--fa: ""}.fa-quora{--fa: ""}.fa-square-x-twitter{--fa: ""}.fa-reacteurope{--fa: ""}.fa-medium,.fa-medium-m{--fa: ""}.fa-amilia{--fa: ""}.fa-mixcloud{--fa: ""}.fa-flipboard{--fa: ""}.fa-viacoin{--fa: ""}.fa-critical-role{--fa: ""}.fa-sitrox{--fa: ""}.fa-discourse{--fa: ""}.fa-joomla{--fa: ""}.fa-mastodon{--fa: ""}.fa-airbnb{--fa: ""}.fa-wolf-pack-battalion{--fa: ""}.fa-buy-n-large{--fa: ""}.fa-gulp{--fa: ""}.fa-creative-commons-sampling-plus{--fa: ""}.fa-strava{--fa: ""}.fa-ember{--fa: ""}.fa-canadian-maple-leaf{--fa: ""}.fa-teamspeak{--fa: ""}.fa-pushed{--fa: ""}.fa-wordpress-simple{--fa: ""}.fa-nutritionix{--fa: ""}.fa-wodu{--fa: ""}.fa-google-pay{--fa: ""}.fa-intercom{--fa: ""}.fa-zhihu{--fa: ""}.fa-korvue{--fa: ""}.fa-pix{--fa: ""}.fa-steam-symbol{--fa: ""}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}.far,.fa-regular{font-weight:400}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype");unicode-range:U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-v4compatibility-C9RhG_FT.woff2) format("woff2"),url(/admin-next/assets/fa-v4compatibility-CCth-dXg.ttf) format("truetype");unicode-range:U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 50%,var(--accent-color) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden}body,div,button,input,select,textarea,table,tr,td,th,span,p,h1,h2,h3,h4,h5,h6{transition:all .3s cubic-bezier(.4,0,.2,1)}.el-button--primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:transparent}.el-button--primary:hover,.el-button--primary:focus{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);opacity:.9}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:shadow-sm:after{content:var(--tw-content);--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:transition-transform:after{content:var(--tw-content);transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:duration-200:after{content:var(--tw-content);transition-duration:.2s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-amber-400:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.hover\:border-blue-300:hover{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.hover\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.hover\:border-cyan-300:hover{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.hover\:border-cyan-400:hover{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.hover\:border-emerald-300:hover{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.hover\:border-emerald-400:hover{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-indigo-300:hover{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.hover\:border-indigo-400:hover{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.hover\:border-orange-400:hover{--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.hover\:border-purple-300:hover{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.hover\:border-purple-400:hover{--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.hover\:border-red-300:hover{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.hover\:border-rose-300:hover{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.hover\:border-rose-400:hover{--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.hover\:border-teal-400:hover{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-200:hover{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-50\/50:hover{background-color:#fffbeb80}.hover\:bg-amber-700:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}.hover\:bg-blue-50\/60:hover{background-color:#eff6ff99}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-100:hover{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50:hover{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50\/50:hover{background-color:#ecfeff80}.hover\:bg-emerald-200:hover{--tw-bg-opacity: 1;background-color:rgb(167 243 208 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-50\/50:hover{background-color:#ecfdf580}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-green-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-200:hover{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}.hover\:bg-indigo-700:hover{--tw-bg-opacity: 1;background-color:rgb(67 56 202 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-100:hover{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50:hover{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}.hover\:bg-pink-200:hover{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-200:hover{--tw-bg-opacity: 1;background-color:rgb(233 213 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-50\/50:hover{background-color:#fff1f280}.hover\:bg-teal-200:hover{--tw-bg-opacity: 1;background-color:rgb(153 246 228 / var(--tw-bg-opacity, 1))}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/50:hover{background-color:#ffffff80}.hover\:bg-yellow-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 240 138 / var(--tw-bg-opacity, 1))}.hover\:from-blue-600:hover{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-blue-700:hover{--tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-green-600:hover{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-600:hover{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-700:hover{--tw-gradient-from: #b91c1c var(--tw-gradient-from-position);--tw-gradient-to: rgb(185 28 28 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-yellow-600:hover{--tw-gradient-from: #ca8a04 var(--tw-gradient-from-position);--tw-gradient-to: rgb(202 138 4 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-700:hover{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.hover\:to-blue-800:hover{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.hover\:to-green-700:hover{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.hover\:to-indigo-600:hover{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.hover\:to-indigo-700:hover{--tw-gradient-to: #4338ca var(--tw-gradient-to-position)}.hover\:to-orange-600:hover{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.hover\:to-red-700:hover{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.hover\:to-red-800:hover{--tw-gradient-to: #991b1b var(--tw-gradient-to-position)}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-cyan-700:hover{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-green-900:hover{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity, 1))}.hover\:text-orange-700:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.hover\:text-orange-900:hover{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.hover\:text-purple-700:hover{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.hover\:text-purple-900:hover{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-red-900:hover{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-yellow-700:hover{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow:hover{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.focus\:border-green-500:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.focus\:border-indigo-400:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.focus\:border-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.focus\:border-teal-500:focus{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500\/20:focus{--tw-ring-color: rgb(59 130 246 / .2)}.focus\:ring-cyan-500\/20:focus{--tw-ring-color: rgb(6 182 212 / .2)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-green-500\/20:focus{--tw-ring-color: rgb(34 197 94 / .2)}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(233 213 255 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-500\/20:focus{--tw-ring-color: rgb(168 85 247 / .2)}.focus\:ring-red-500\/20:focus{--tw-ring-color: rgb(239 68 68 / .2)}.focus\:ring-teal-500\/20:focus{--tw-ring-color: rgb(20 184 166 / .2)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-purple-500\/60:focus-visible{--tw-ring-color: rgb(168 85 247 / .6)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:from-gray-400:disabled{--tw-gradient-from: #9ca3af var(--tw-gradient-from-position);--tw-gradient-to: rgb(156 163 175 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.disabled\:to-gray-500:disabled{--tw-gradient-to: #6b7280 var(--tw-gradient-to-position)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:shadow-sm:hover:disabled{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-20{opacity:.2}.group:hover .group-hover\:opacity-30{opacity:.3}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(139\,92\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(139,92,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(148\,163\,184\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(148,163,184,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(16\,185\,129\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(16,185,129,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(56\,189\,248\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(56,189,248,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(59\,130\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(59,130,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-4:after{content:var(--tw-content);--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus~.peer-focus\:ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-blue-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-green-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(134 239 172 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-orange-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(253 186 116 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-purple-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-teal-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(94 234 212 / var(--tw-ring-opacity, 1))}.dark\:divide-gray-600:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(75 85 99 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-600\/50:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#4b556380}.dark\:divide-gray-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-800:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.dark\:border:is(.dark *){border-width:1px}.dark\:border-amber-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.dark\:border-amber-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-amber-500\/20:is(.dark *){border-color:#f59e0b33}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:border-blue-500\/20:is(.dark *){border-color:#3b82f633}.dark\:border-blue-500\/30:is(.dark *){border-color:#3b82f64d}.dark\:border-blue-500\/40:is(.dark *){border-color:#3b82f666}.dark\:border-blue-500\/50:is(.dark *){border-color:#3b82f680}.dark\:border-blue-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-cyan-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:border-cyan-500\/40:is(.dark *){border-color:#06b6d466}.dark\:border-cyan-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(8 145 178 / var(--tw-border-opacity, 1))}.dark\:border-cyan-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(14 116 144 / var(--tw-border-opacity, 1))}.dark\:border-emerald-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.dark\:border-emerald-500\/20:is(.dark *){border-color:#10b98133}.dark\:border-emerald-500\/40:is(.dark *){border-color:#10b98166}.dark\:border-gray-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-600\/30:is(.dark *){border-color:#4b55634d}.dark\:border-gray-600\/50:is(.dark *){border-color:#4b556380}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/50:is(.dark *){border-color:#37415180}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-gray-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-green-500\/30:is(.dark *){border-color:#22c55e4d}.dark\:border-green-500\/40:is(.dark *){border-color:#22c55e66}.dark\:border-green-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-indigo-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.dark\:border-indigo-500\/40:is(.dark *){border-color:#6366f166}.dark\:border-indigo-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(67 56 202 / var(--tw-border-opacity, 1))}.dark\:border-orange-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.dark\:border-orange-500\/40:is(.dark *){border-color:#f9731666}.dark\:border-orange-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(234 88 12 / var(--tw-border-opacity, 1))}.dark\:border-orange-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(194 65 12 / var(--tw-border-opacity, 1))}.dark\:border-purple-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:border-purple-500\/40:is(.dark *){border-color:#a855f766}.dark\:border-purple-600\/60:is(.dark *){border-color:#9333ea99}.dark\:border-purple-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.dark\:border-purple-700\/70:is(.dark *){border-color:#7e22ceb3}.dark\:border-red-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.dark\:border-red-500\/20:is(.dark *){border-color:#ef444433}.dark\:border-red-500\/30:is(.dark *){border-color:#ef44444d}.dark\:border-red-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/60:is(.dark *){border-color:#7f1d1d99}.dark\:border-rose-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.dark\:border-rose-500\/40:is(.dark *){border-color:#f43f5e66}.dark\:border-sky-500\/40:is(.dark *){border-color:#0ea5e966}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-slate-700\/60:is(.dark *){border-color:#33415599}.dark\:border-teal-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.dark\:border-teal-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(15 118 110 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/40:is(.dark *){border-color:#8b5cf666}.dark\:border-white\/10:is(.dark *){border-color:#ffffff1a}.dark\:border-yellow-500\/40:is(.dark *){border-color:#eab30866}.dark\:border-yellow-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(161 98 7 / var(--tw-border-opacity, 1))}.dark\:bg-amber-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-amber-900\/40:is(.dark *){background-color:#78350f66}.dark\:bg-blue-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/20:is(.dark *){background-color:#3b82f633}.dark\:bg-blue-500\/30:is(.dark *){background-color:#3b82f64d}.dark\:bg-blue-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-blue-900\/50:is(.dark *){background-color:#1e3a8a80}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-blue-950\/40:is(.dark *){background-color:#17255466}.dark\:bg-cyan-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-900\/30:is(.dark *){background-color:#164e634d}.dark\:bg-cyan-900\/40:is(.dark *){background-color:#164e6366}.dark\:bg-emerald-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-500\/20:is(.dark *){background-color:#10b98133}.dark\:bg-emerald-900\/20:is(.dark *){background-color:#064e3b33}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#064e3b4d}.dark\:bg-emerald-900\/40:is(.dark *){background-color:#064e3b66}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#022c2266}.dark\:bg-gray-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600\/50:is(.dark *){background-color:#4b556380}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700\/30:is(.dark *){background-color:#3741514d}.dark\:bg-gray-700\/50:is(.dark *){background-color:#37415180}.dark\:bg-gray-700\/60:is(.dark *){background-color:#37415199}.dark\:bg-gray-700\/70:is(.dark *){background-color:#374151b3}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/20:is(.dark *){background-color:#1f293733}.dark\:bg-gray-800\/40:is(.dark *){background-color:#1f293766}.dark\:bg-gray-800\/50:is(.dark *){background-color:#1f293780}.dark\:bg-gray-800\/60:is(.dark *){background-color:#1f293799}.dark\:bg-gray-800\/80:is(.dark *){background-color:#1f2937cc}.dark\:bg-gray-800\/90:is(.dark *){background-color:#1f2937e6}.dark\:bg-gray-800\/95:is(.dark *){background-color:#1f2937f2}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/50:is(.dark *){background-color:#11182780}.dark\:bg-gray-900\/70:is(.dark *){background-color:#111827b3}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-gray-900\/95:is(.dark *){background-color:#111827f2}.dark\:bg-green-500\/30:is(.dark *){background-color:#22c55e4d}.dark\:bg-green-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-green-900\/50:is(.dark *){background-color:#14532d80}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-indigo-500\/20:is(.dark *){background-color:#6366f133}.dark\:bg-indigo-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.dark\:bg-indigo-900\/20:is(.dark *){background-color:#312e8133}.dark\:bg-indigo-900\/30:is(.dark *){background-color:#312e814d}.dark\:bg-indigo-950\/30:is(.dark *){background-color:#1e1b4b4d}.dark\:bg-orange-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity, 1))}.dark\:bg-orange-900\/30:is(.dark *){background-color:#7c2d124d}.dark\:bg-orange-950\/30:is(.dark *){background-color:#4314074d}.dark\:bg-pink-900\/30:is(.dark *){background-color:#8318434d}.dark\:bg-purple-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500\/10:is(.dark *){background-color:#a855f71a}.dark\:bg-purple-500\/20:is(.dark *){background-color:#a855f733}.dark\:bg-purple-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-800\/20:is(.dark *){background-color:#6b21a833}.dark\:bg-purple-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-purple-950\/20:is(.dark *){background-color:#3b076433}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-500\/30:is(.dark *){background-color:#ef44444d}.dark\:bg-red-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-red-900\/40:is(.dark *){background-color:#7f1d1d66}.dark\:bg-rose-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-900\/30:is(.dark *){background-color:#8813374d}.dark\:bg-rose-900\/40:is(.dark *){background-color:#88133766}.dark\:bg-sky-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-500\/20:is(.dark *){background-color:#0ea5e933}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-slate-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900\/70:is(.dark *){background-color:#0f172ab3}.dark\:bg-teal-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 94 89 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-900\/20:is(.dark *){background-color:#134e4a33}.dark\:bg-teal-900\/30:is(.dark *){background-color:#134e4a4d}.dark\:bg-violet-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2e106566}.dark\:bg-yellow-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:bg-yellow-900\/40:is(.dark *){background-color:#713f1266}.dark\:bg-yellow-950\/30:is(.dark *){background-color:#4220064d}.dark\:from-amber-400:is(.dark *){--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-amber-900\/20:is(.dark *){--tw-gradient-from: rgb(120 53 15 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(120 53 15 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-600\/20:is(.dark *){--tw-gradient-from: rgb(37 99 235 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/20:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/40:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-950\/30:is(.dark *){--tw-gradient-from: rgb(23 37 84 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(23 37 84 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-cyan-900\/20:is(.dark *){--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-400:is(.dark *){--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/20:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/40:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-700:is(.dark *){--tw-gradient-from: #374151 var(--tw-gradient-from-position);--tw-gradient-to: rgb(55 65 81 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-800:is(.dark *){--tw-gradient-from: #1f2937 var(--tw-gradient-from-position);--tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-900\/30:is(.dark *){--tw-gradient-from: rgb(17 24 39 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-900\/20:is(.dark *){--tw-gradient-from: rgb(20 83 45 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 83 45 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-950\/30:is(.dark *){--tw-gradient-from: rgb(5 46 22 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(5 46 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-indigo-900\/20:is(.dark *){--tw-gradient-from: rgb(49 46 129 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(49 46 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-orange-950\/30:is(.dark *){--tw-gradient-from: rgb(67 20 7 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(67 20 7 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-500\/70:is(.dark *){--tw-gradient-from: rgb(168 85 247 / .7) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/20:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/40:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-950\/30:is(.dark *){--tw-gradient-from: rgb(59 7 100 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-500:is(.dark *){--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-900\/20:is(.dark *){--tw-gradient-from: rgb(136 19 55 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(136 19 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-400:is(.dark *){--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-500:is(.dark *){--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-900\/40:is(.dark *){--tw-gradient-from: rgb(12 74 110 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-teal-900\/20:is(.dark *){--tw-gradient-from: rgb(19 78 74 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(19 78 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-400:is(.dark *){--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-900\/40:is(.dark *){--tw-gradient-from: rgb(76 29 149 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-900\/20:is(.dark *){--tw-gradient-from: rgb(113 63 18 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(113 63 18 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-950\/30:is(.dark *){--tw-gradient-from: rgb(66 32 6 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(66 32 6 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-blue-500:is(.dark *){--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-blue-900\/20:is(.dark *){--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(30 58 138 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-cyan-400:is(.dark *){--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-500:is(.dark *){--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(6 78 59 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-600:is(.dark *){--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #4b5563 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-900\/10:is(.dark *){--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(17 24 39 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-orange-400:is(.dark *){--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-500:is(.dark *){--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-600\/70:is(.dark *){--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(147 51 234 / .7) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(88 28 135 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-red-500:is(.dark *){--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(12 74 110 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-violet-900\/20:is(.dark *){--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(76 29 149 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-amber-500:is(.dark *){--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.dark\:to-amber-950\/30:is(.dark *){--tw-gradient-to: rgb(69 26 3 / .3) var(--tw-gradient-to-position)}.dark\:to-blue-500:is(.dark *){--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.dark\:to-blue-800\/20:is(.dark *){--tw-gradient-to: rgb(30 64 175 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-500:is(.dark *){--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.dark\:to-cyan-900\/20:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-900\/30:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-800\/30:is(.dark *){--tw-gradient-to: rgb(6 95 70 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .2) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/30:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-950\/30:is(.dark *){--tw-gradient-to: rgb(2 44 34 / .3) var(--tw-gradient-to-position)}.dark\:to-fuchsia-500:is(.dark *){--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.dark\:to-fuchsia-900\/30:is(.dark *){--tw-gradient-to: rgb(112 26 117 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-700:is(.dark *){--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-gray-800\/30:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-800\/90:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .9) var(--tw-gradient-to-position)}.dark\:to-green-800\/20:is(.dark *){--tw-gradient-to: rgb(22 101 52 / .2) var(--tw-gradient-to-position)}.dark\:to-green-900\/20:is(.dark *){--tw-gradient-to: rgb(20 83 45 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-500\/70:is(.dark *){--tw-gradient-to: rgb(99 102 241 / .7) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/20:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/30:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .3) var(--tw-gradient-to-position)}.dark\:to-indigo-950\/30:is(.dark *){--tw-gradient-to: rgb(30 27 75 / .3) var(--tw-gradient-to-position)}.dark\:to-orange-900\/20:is(.dark *){--tw-gradient-to: rgb(124 45 18 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-900\/20:is(.dark *){--tw-gradient-to: rgb(131 24 67 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-950\/30:is(.dark *){--tw-gradient-to: rgb(80 7 36 / .3) var(--tw-gradient-to-position)}.dark\:to-purple-600\/20:is(.dark *){--tw-gradient-to: rgb(147 51 234 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-800\/20:is(.dark *){--tw-gradient-to: rgb(107 33 168 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/40:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .4) var(--tw-gradient-to-position)}.dark\:to-red-950\/30:is(.dark *){--tw-gradient-to: rgb(69 10 10 / .3) var(--tw-gradient-to-position)}.dark\:to-rose-600:is(.dark *){--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.dark\:to-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .2) var(--tw-gradient-to-position)}.dark\:to-sky-900\/30:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .3) var(--tw-gradient-to-position)}.dark\:to-slate-800:is(.dark *){--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.dark\:to-teal-500:is(.dark *){--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.dark\:to-teal-900\/20:is(.dark *){--tw-gradient-to: rgb(19 78 74 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-800\/20:is(.dark *){--tw-gradient-to: rgb(133 77 14 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-900\/20:is(.dark *){--tw-gradient-to: rgb(113 63 18 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-950\/30:is(.dark *){--tw-gradient-to: rgb(66 32 6 / .3) var(--tw-gradient-to-position)}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-100:is(.dark *){--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-200:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is(.dark *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.dark\:text-gray-900:is(.dark *){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300:is(.dark *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-indigo-400:is(.dark *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-purple-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200\/70:is(.dark *){color:#e9d5ffb3}.dark\:text-purple-300:is(.dark *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-teal-300:is(.dark *){--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.dark\:text-teal-400:is(.dark *){--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-2xl:is(.dark *){--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){--tw-shadow: 0 12px 28px rgba(0,0,0,.45);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-xl:is(.dark *){--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-blue-500\/40:is(.dark *){--tw-shadow-color: rgb(59 130 246 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:ring-amber-500\/20:is(.dark *){--tw-ring-color: rgb(245 158 11 / .2)}.dark\:ring-blue-500\/20:is(.dark *){--tw-ring-color: rgb(59 130 246 / .2)}.dark\:ring-emerald-500\/20:is(.dark *){--tw-ring-color: rgb(16 185 129 / .2)}.dark\:ring-purple-400\/30:is(.dark *){--tw-ring-color: rgb(192 132 252 / .3)}.dark\:ring-white\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:after\:bg-gray-300:is(.dark *):after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.dark\:hover\:border-amber-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:hover\:border-cyan-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(5 150 105 / var(--tw-border-opacity, 1))}.dark\:hover\:border-gray-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.dark\:hover\:border-orange-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.dark\:hover\:border-purple-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(225 29 72 / var(--tw-border-opacity, 1))}.dark\:hover\:border-teal-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-amber-800\/50:hover:is(.dark *){background-color:#92400e80}.dark\:hover\:bg-amber-900\/20:hover:is(.dark *){background-color:#78350f33}.dark\:hover\:bg-amber-900\/50:hover:is(.dark *){background-color:#78350f80}.dark\:hover\:bg-blue-500\/20:hover:is(.dark *){background-color:#3b82f633}.dark\:hover\:bg-blue-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-900\/20:hover:is(.dark *){background-color:#1e3a8a33}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-blue-900\/50:hover:is(.dark *){background-color:#1e3a8a80}.dark\:hover\:bg-blue-900\/70:hover:is(.dark *){background-color:#1e3a8ab3}.dark\:hover\:bg-cyan-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-cyan-800\/50:hover:is(.dark *){background-color:#155e7580}.dark\:hover\:bg-cyan-900\/20:hover:is(.dark *){background-color:#164e6333}.dark\:hover\:bg-cyan-900\/50:hover:is(.dark *){background-color:#164e6380}.dark\:hover\:bg-cyan-900\/60:hover:is(.dark *){background-color:#164e6399}.dark\:hover\:bg-emerald-900\/20:hover:is(.dark *){background-color:#064e3b33}.dark\:hover\:bg-emerald-900\/50:hover:is(.dark *){background-color:#064e3b80}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700\/30:hover:is(.dark *){background-color:#3741514d}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/50:hover:is(.dark *){background-color:#14532d80}.dark\:hover\:bg-indigo-900\/20:hover:is(.dark *){background-color:#312e8133}.dark\:hover\:bg-indigo-900\/50:hover:is(.dark *){background-color:#312e8180}.dark\:hover\:bg-orange-900\/20:hover:is(.dark *){background-color:#7c2d1233}.dark\:hover\:bg-orange-900\/50:hover:is(.dark *){background-color:#7c2d1280}.dark\:hover\:bg-pink-900\/50:hover:is(.dark *){background-color:#83184380}.dark\:hover\:bg-purple-500\/20:hover:is(.dark *){background-color:#a855f733}.dark\:hover\:bg-purple-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-purple-900\/20:hover:is(.dark *){background-color:#581c8733}.dark\:hover\:bg-purple-900\/40:hover:is(.dark *){background-color:#581c8766}.dark\:hover\:bg-purple-900\/50:hover:is(.dark *){background-color:#581c8780}.dark\:hover\:bg-red-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-900\/20:hover:is(.dark *){background-color:#7f1d1d33}.dark\:hover\:bg-red-900\/50:hover:is(.dark *){background-color:#7f1d1d80}.dark\:hover\:bg-rose-900\/20:hover:is(.dark *){background-color:#88133733}.dark\:hover\:bg-teal-900\/20:hover:is(.dark *){background-color:#134e4a33}.dark\:hover\:bg-teal-900\/50:hover:is(.dark *){background-color:#134e4a80}.dark\:hover\:text-blue-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:hover\:text-cyan-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:hover\:text-orange-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:hover\:text-purple-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-600:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-yellow-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:focus\:border-blue-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:focus\:border-indigo-500:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:focus\:border-purple-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:focus\:bg-gray-800:focus:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:focus\:ring-blue-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-indigo-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-purple-500\/40:focus:is(.dark *){--tw-ring-color: rgb(168 85 247 / .4)}.dark\:focus\:ring-offset-gray-800:focus:is(.dark *){--tw-ring-offset-color: #1f2937}.dark\:focus-visible\:ring-purple-400\/60:focus-visible:is(.dark *){--tw-ring-color: rgb(192 132 252 / .6)}.peer:focus~.dark\:peer-focus\:ring-blue-600:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-blue-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-green-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(22 101 52 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-orange-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(154 52 18 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-purple-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(107 33 168 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-teal-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(17 94 89 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-16{margin-left:4rem}.sm\:ml-2{margin-left:.5rem}.sm\:ml-4{margin-left:1rem}.sm\:mr-2{margin-right:.5rem}.sm\:mr-3{margin-right:.75rem}.sm\:mt-0{margin-top:0}.sm\:mt-2{margin-top:.5rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-20{height:5rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:max-h-\[300px\]{max-height:300px}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-20{width:5rem}.sm\:w-44{width:11rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-8{width:2rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:.5rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:mb-3{margin-bottom:.75rem}.md\:mb-4{margin-bottom:1rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-2{margin-right:.5rem}.md\:mr-3{margin-right:.75rem}.md\:mt-3{margin-top:.75rem}.md\:mt-4{margin-top:1rem}.md\:mt-8{margin-top:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:max-h-80{max-height:20rem}.md\:w-auto{width:auto}.md\:flex-none{flex:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:gap-2{gap:.5rem}.md\:gap-3{gap:.75rem}.md\:gap-4{gap:1rem}.md\:gap-6{gap:1.5rem}.md\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.md\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.md\:space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.md\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.md\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.md\:rounded-3xl{border-radius:1.5rem}.md\:p-10{padding:2.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pt-4{padding-top:1rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:w-auto{width:auto}.lg\:max-w-md{max-width:28rem}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:p-6{padding:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.xl\:items-stretch{align-items:stretch}}@media (min-width: 1536px){.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--glass-strong-color: rgba(255, 255, 255, .95);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2);--bg-gradient-start: #667eea;--bg-gradient-mid: #764ba2;--bg-gradient-end: #f093fb;--input-bg: rgba(255, 255, 255, .9);--input-border: rgba(209, 213, 219, .8);--modal-bg: rgba(0, 0, 0, .4);--table-bg: rgba(255, 255, 255, .95);--table-hover: rgba(102, 126, 234, .05)}.dark{--primary-color: #818cf8;--secondary-color: #a78bfa;--accent-color: #c084fc;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(31, 41, 55, .95);--glass-color: rgba(0, 0, 0, .2);--glass-strong-color: rgba(31, 41, 55, .95);--text-primary: #f3f4f6;--text-secondary: #9ca3af;--border-color: rgba(75, 85, 99, .3);--bg-gradient-start: #1f2937;--bg-gradient-mid: #374151;--bg-gradient-end: #4b5563;--input-bg: rgba(31, 41, 55, .9);--input-border: rgba(75, 85, 99, .5);--modal-bg: rgba(0, 0, 0, .6);--table-bg: rgba(31, 41, 55, .95);--table-hover: rgba(129, 140, 248, .1)}button,input,select,textarea{transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease,transform .2s ease}.transition-colors{transition:color .3s ease,background-color .3s ease,border-color .3s ease}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden;color:var(--text-primary);transition:background .3s ease,color .3s ease}body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:-1}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;transition:background-color .3s ease,border-color .3s ease}.dark .glass{box-shadow:0 20px 25px -5px #00000040,0 10px 10px -5px #0000001a,inset 0 1px #ffffff0d}.glass-strong{background:var(--glass-strong-color);border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease,border-color .3s ease}.dark .glass-strong{box-shadow:0 25px 50px -12px #0006,0 0 0 1px #ffffff05,inset 0 1px #ffffff0d}.tab-btn{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em}.tab-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.tab-btn:hover:before{left:100%}.tab-btn.active{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.card{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:background-color .3s ease,border-color .3s ease}.dark .card{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.card:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.stat-card{background:linear-gradient(135deg,var(--surface-color) 0%,var(--glass-strong-color) 100%);border-radius:20px;border:1px solid var(--border-color);padding:24px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.dark .stat-card{background:linear-gradient(135deg,#1f2937f2,#111827cc)}.stat-card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle,rgba(255,255,255,.1) 0%,transparent 70%);opacity:0;transition:opacity .3s ease}.stat-card:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.stat-card:hover:before{opacity:1}.stat-icon{width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.btn{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:#fff3;border-radius:50%;transform:translate(-50%,-50%);transition:width .3s ease,height .3s ease}.btn:active:before{width:300px;height:300px}.btn-primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-success{background:linear-gradient(135deg,var(--success-color) 0%,#059669 100%);color:#fff;box-shadow:0 10px 15px -3px #10b9814d,0 4px 6px -2px #10b9810d}.btn-success:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #10b9814d,0 10px 10px -5px #10b9811a}.btn-danger{background:linear-gradient(135deg,var(--error-color) 0%,#dc2626 100%);color:#fff;box-shadow:0 10px 15px -3px #ef44444d,0 4px 6px -2px #ef44440d}.btn-danger:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #ef44444d,0 10px 10px -5px #ef44441a}.form-input{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:16px;font-size:16px;color:var(--text-primary);transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2;color:#1f2937}.dark .form-input:focus{box-shadow:0 0 0 3px #818cf833,0 10px 15px -3px #0003;background:#111827f2;color:#f3f4f6}.table-container{background:var(--table-bg);border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease}.dark .table-container{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.table-row{transition:background-color .2s ease,transform .2s ease}.table-row:hover{background:var(--table-hover);transform:scale(1.005)}.modal{background:var(--modal-bg);transition:background-color .3s ease}.modal-content{background:#fff;border-radius:24px;border:1px solid rgba(229,231,235,.8);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d;transition:background-color .3s ease,border-color .3s ease}.dark .modal-content{background:#1f2937;border:1px solid rgba(75,85,99,.5);box-shadow:0 25px 50px -12px #0009,0 0 0 1px #ffffff05}.header-title{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.loading-spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top:2px solid white;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-up-enter-active,.slide-up-leave-active{transition:all .3s ease}.slide-up-enter-from{opacity:0;transform:translateY(30px)}.slide-up-leave-to{opacity:0;transform:translateY(-30px)}.toast{position:fixed;top:80px;right:20px;z-index:1000;min-width:320px;max-width:500px;transform:translate(100%);transition:transform .3s ease-in-out}.toast.show{transform:translate(0)}.toast-success{background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:1px solid rgba(16,185,129,.3)}.toast-error{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border:1px solid rgba(239,68,68,.3)}.toast-info{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:1px solid rgba(59,130,246,.3)}.toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border:1px solid rgba(245,158,11,.3)}[v-cloak]{display:none}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(102,126,234,.3) rgba(102,126,234,.05)}.dark .custom-scrollbar{scrollbar-color:rgba(129,140,248,.3) rgba(129,140,248,.05)}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:#667eea0d;border-radius:10px}.dark .custom-scrollbar::-webkit-scrollbar-track{background:#818cf80d}.custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea66,#764ba266);border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease}.dark .custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#818cf866,#a78bfa66)}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#667eea99,#764ba299)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#818cf899,#a78bfa99)}.custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#667eeacc,#764ba2cc)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#818cf8cc,#a78bfacc)}.modal-scroll-content{max-height:calc(90vh - 160px);overflow-y:auto;padding-right:8px}@media (max-width: 768px){.glass,.glass-strong{margin:16px;border-radius:20px}.stat-card{padding:16px}.tab-btn{font-size:14px;padding:12px 8px}.modal-scroll-content{max-height:calc(85vh - 120px)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}to{transform:scale(1);opacity:1}}.animate-pulse{transition:transform .2s ease}.animate-pulse:hover{animation:pulse .3s ease}.user-menu-dropdown{min-width:240px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.tab-content{animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} diff --git a/assets/index-B61r7_1u.css b/assets/index-B61r7_1u.css deleted file mode 100644 index 2d741b21..00000000 --- a/assets/index-B61r7_1u.css +++ /dev/null @@ -1,5 +0,0 @@ -.toast-container[data-v-c8b24ff5]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;pointer-events:none}.toast[data-v-c8b24ff5]{min-width:320px;max-width:500px;background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e5e7eb;overflow:hidden;position:relative;pointer-events:auto;cursor:pointer;transform:translate(100%);opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 8px 32px #0000004d}.toast-show[data-v-c8b24ff5]{transform:translate(0);opacity:1}.toast-hide[data-v-c8b24ff5]{transform:translate(100%);opacity:0}.toast-content[data-v-c8b24ff5]{display:flex;align-items:flex-start;padding:16px;gap:12px}.toast-icon[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px}.toast-body[data-v-c8b24ff5]{flex:1}.toast-title[data-v-c8b24ff5]{font-weight:600;font-size:14px;line-height:1.4;margin-bottom:4px}.toast-message[data-v-c8b24ff5]{font-size:14px;line-height:1.5;word-wrap:break-word}.toast-close[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#9ca3af;transition:all .2s ease}.toast-close[data-v-c8b24ff5]:hover{background:#f3f4f6;color:#6b7280}.dark{background:#374151;color:#9ca3af}.toast-progress[data-v-c8b24ff5]{position:absolute;bottom:0;left:0;height:3px;background:currentColor;opacity:.3;animation:toast-progress-c8b24ff5 linear forwards}@keyframes toast-progress-c8b24ff5{0%{width:100%}to{width:0%}}.toast-success[data-v-c8b24ff5]{border-left:4px solid #10b981}.toast-success .toast-icon[data-v-c8b24ff5]{color:#10b981;background:#d1fae5}.dark{background:#064e3b}.toast-success .toast-title[data-v-c8b24ff5]{color:#065f46}.dark{color:#10b981}.toast-success .toast-message[data-v-c8b24ff5]{color:#047857}.dark{color:#34d399}.toast-success .toast-progress[data-v-c8b24ff5]{background:#10b981}.toast-error[data-v-c8b24ff5]{border-left:4px solid #ef4444}.toast-error .toast-icon[data-v-c8b24ff5]{color:#ef4444;background:#fee2e2}.dark{background:#7f1d1d}.toast-error .toast-title[data-v-c8b24ff5]{color:#991b1b}.dark{color:#ef4444}.toast-error .toast-message[data-v-c8b24ff5]{color:#dc2626}.dark{color:#f87171}.toast-error .toast-progress[data-v-c8b24ff5]{background:#ef4444}.toast-warning[data-v-c8b24ff5]{border-left:4px solid #f59e0b}.toast-warning .toast-icon[data-v-c8b24ff5]{color:#f59e0b;background:#fef3c7}.dark{background:#78350f}.toast-warning .toast-title[data-v-c8b24ff5]{color:#92400e}.dark{color:#f59e0b}.toast-warning .toast-message[data-v-c8b24ff5]{color:#d97706}.dark{color:#fbbf24}.toast-warning .toast-progress[data-v-c8b24ff5]{background:#f59e0b}.toast-info[data-v-c8b24ff5]{border-left:4px solid #3b82f6}.toast-info .toast-icon[data-v-c8b24ff5]{color:#3b82f6;background:#dbeafe}.dark{background:#1e3a8a}.toast-info .toast-title[data-v-c8b24ff5]{color:#1e40af}.dark{color:#3b82f6}.toast-info .toast-message[data-v-c8b24ff5]{color:#2563eb}.dark{color:#60a5fa}.toast-info .toast-progress[data-v-c8b24ff5]{background:#3b82f6}@media (max-width: 640px){.toast-container[data-v-c8b24ff5]{top:10px;right:10px;left:10px}.toast[data-v-c8b24ff5]{min-width:auto;max-width:none}}.toast-list-enter-active[data-v-c8b24ff5],.toast-list-leave-active[data-v-c8b24ff5]{transition:all .3s ease}.toast-list-enter-from[data-v-c8b24ff5],.toast-list-leave-to[data-v-c8b24ff5]{opacity:0;transform:translate(100%)}.toast-list-move[data-v-c8b24ff5]{transition:transform .3s ease}.modal[data-v-6b3390a6]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3}.modal-content[data-v-6b3390a6]{background:#fff;border-radius:16px;box-shadow:0 20px 64px #00000026;border:1px solid #e5e7eb;max-height:90vh;overflow-y:auto}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 20px 64px #000c}.btn[data-v-6b3390a6]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-6b3390a6]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-danger[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-danger[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.btn-danger[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.btn-warning[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-warning[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.btn-warning[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-6b3390a6]{height:1rem;width:1rem}@keyframes spin-6b3390a6{to{transform:rotate(360deg)}}.loading-spinner[data-v-6b3390a6]{animation:spin-6b3390a6 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.modal-enter-active[data-v-6b3390a6],.modal-leave-active[data-v-6b3390a6]{transition:all .3s ease}.modal-enter-from[data-v-6b3390a6],.modal-leave-to[data-v-6b3390a6]{opacity:0}.modal-enter-active .modal-content[data-v-6b3390a6],.modal-leave-active .modal-content[data-v-6b3390a6]{transition:transform .3s ease}.modal-enter-from .modal-content[data-v-6b3390a6],.modal-leave-to .modal-content[data-v-6b3390a6]{transform:scale(.9) translateY(-20px)}.modal-content[data-v-6b3390a6]::-webkit-scrollbar{width:6px}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.dark{background:#374151}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.dark{background:#4b5563}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb:hover{background:#94a3b8}.dark{background:#6b7280}#app[data-v-dab04b7e]{min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-0\.5{top:-.125rem;right:-.125rem;bottom:-.125rem;left:-.125rem}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-left-2{left:-.5rem}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-3{left:.75rem}.left-5{left:1.25rem}.left-\[50px\]{left:50px}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1050\]{z-index:1050}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-8{margin-right:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[2px\]{margin-top:2px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[260px\]{height:260px}.h-\[38px\]{height:38px}.h-\[50vh\]{height:50vh}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[92vh\]{max-height:92vh}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[32px\]{min-height:32px}.min-h-\[48px\]{min-height:48px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[180px\]{width:180px}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[768px\]{width:768px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[150px\]{min-width:150px}.min-w-\[160px\]{min-width:160px}.min-w-\[170px\]{min-width:170px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[20px\]{min-width:20px}.min-w-\[210px\]{min-width:210px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[32px\]{min-width:32px}.min-w-\[34px\]{min-width:34px}.min-w-\[48px\]{min-width:48px}.min-w-\[50px\]{min-width:50px}.min-w-\[70px\]{min-width:70px}.min-w-\[80px\]{min-width:80px}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-gray-200\/50>:not([hidden])~:not([hidden]){border-color:#e5e7eb80}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.\!overflow-visible{overflow:visible!important}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-100{--tw-border-opacity: 1;border-color:rgb(254 243 199 / var(--tw-border-opacity, 1))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-200\/80{border-color:#bfdbfecc}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-500{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-emerald-100{--tw-border-opacity: 1;border-color:rgb(209 250 229 / var(--tw-border-opacity, 1))}.border-emerald-200\/80{border-color:#a7f3d0cc}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/50{border-color:#e5e7eb80}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-300\/30{border-color:#d1d5db4d}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-green-100{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-indigo-100{--tw-border-opacity: 1;border-color:rgb(224 231 255 / var(--tw-border-opacity, 1))}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-orange-100{--tw-border-opacity: 1;border-color:rgb(255 237 213 / var(--tw-border-opacity, 1))}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity, 1))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-purple-100{--tw-border-opacity: 1;border-color:rgb(243 232 255 / var(--tw-border-opacity, 1))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-200\/70{border-color:#e9d5ffb3}.border-purple-200\/80{border-color:#e9d5ffcc}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.border-purple-700{--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-500\/30{border-color:#ef44444d}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-rose-500{--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.border-sky-200\/80{border-color:#bae6fdcc}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/70{border-color:#e2e8f0b3}.border-teal-200{--tw-border-opacity: 1;border-color:rgb(153 246 228 / var(--tw-border-opacity, 1))}.border-teal-500{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200\/80{border-color:#ddd6fecc}.border-white\/20{border-color:#fff3}.border-white\/50{border-color:#ffffff80}.border-yellow-100{--tw-border-opacity: 1;border-color:rgb(254 249 195 / var(--tw-border-opacity, 1))}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity, 1))}.border-opacity-20{--tw-border-opacity: .2}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-300{--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/60{background-color:#eff6ff99}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900\/20{background-color:#1e3a8a33}.bg-cyan-100{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-cyan-50\/90{background-color:#ecfeffe6}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-cyan-600{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/60{background-color:#ecfdf599}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/85{background-color:#e5e7ebd9}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-300\/50{background-color:#d1d5db80}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/70{background-color:#f9fafbb3}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/40{background-color:#11182766}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-300{--tw-bg-opacity: 1;background-color:rgb(165 180 252 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-200{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-600{--tw-bg-opacity: 1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-300{--tw-bg-opacity: 1;background-color:rgb(216 180 254 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-50\/90{background-color:#fff1f2e6}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-teal-300{--tw-bg-opacity: 1;background-color:rgb(94 234 212 / var(--tw-bg-opacity, 1))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/20{background-color:#fff3}.bg-white\/30{background-color:#ffffff4d}.bg-white\/60{background-color:#fff9}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-300{--tw-bg-opacity: 1;background-color:rgb(253 224 71 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-20{--tw-bg-opacity: .2}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from: #fef3c7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 243 199 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-500{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-100{--tw-gradient-from: #dbeafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50{--tw-gradient-from: #eff6ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500\/20{--tw-gradient-from: rgb(59 130 246 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-100{--tw-gradient-from: #cffafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(207 250 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from: #06b6d4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-400{--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500{--tw-gradient-from: #10b981 var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-200{--tw-gradient-from: #e5e7eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(229 231 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-300{--tw-gradient-from: #d1d5db var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-50{--tw-gradient-from: #f9fafb var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-600{--tw-gradient-from: #4b5563 var(--tw-gradient-from-position);--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-50{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from: #6366f1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-100{--tw-gradient-from: #ffedd5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 237 213 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-50{--tw-gradient-from: #fff7ed var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 247 237 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-100{--tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50\/80{--tw-gradient-from: rgb(250 245 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500\/90{--tw-gradient-from: rgb(168 85 247 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-600{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-50{--tw-gradient-from: #fff1f2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 241 242 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-400{--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-50{--tw-gradient-from: #f0f9ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 249 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-500{--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-100{--tw-gradient-from: #ccfbf1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-400{--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from: #f5f3ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 243 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from: #8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-100{--tw-gradient-from: #fef9c3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 249 195 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-400{--tw-gradient-from: #facc15 var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-50{--tw-gradient-from: #fefce8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 252 232 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-500{--tw-gradient-from: #eab308 var(--tw-gradient-from-position);--tw-gradient-to: rgb(234 179 8 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-blue-100{--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #dbeafe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-blue-500{--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-cyan-400{--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-500{--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-300{--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #d1d5db var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-50{--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f9fafb var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-green-50{--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f0fdf4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-orange-400{--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-500{--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-600{--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #9333ea var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-red-500{--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-sky-100{--tw-gradient-to: rgb(224 242 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #e0f2fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-100{--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ede9fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-100{--tw-gradient-to: #fef3c7 var(--tw-gradient-to-position)}.to-amber-50{--tw-gradient-to: #fffbeb var(--tw-gradient-to-position)}.to-amber-500{--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.to-amber-600{--tw-gradient-to: #d97706 var(--tw-gradient-to-position)}.to-blue-100{--tw-gradient-to: #dbeafe var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-cyan-500{--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.to-emerald-100{--tw-gradient-to: #d1fae5 var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to: #ecfdf5 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to: #10b981 var(--tw-gradient-to-position)}.to-emerald-600{--tw-gradient-to: #059669 var(--tw-gradient-to-position)}.to-fuchsia-100{--tw-gradient-to: #fae8ff var(--tw-gradient-to-position)}.to-fuchsia-500{--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.to-gray-100{--tw-gradient-to: #f3f4f6 var(--tw-gradient-to-position)}.to-gray-100\/90{--tw-gradient-to: rgb(243 244 246 / .9) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-gray-400{--tw-gradient-to: #9ca3af var(--tw-gradient-to-position)}.to-gray-50{--tw-gradient-to: #f9fafb var(--tw-gradient-to-position)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-500{--tw-gradient-to: #22c55e var(--tw-gradient-to-position)}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position)}.to-indigo-100{--tw-gradient-to: #e0e7ff var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to: #eef2ff var(--tw-gradient-to-position)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.to-indigo-500\/90{--tw-gradient-to: rgb(99 102 241 / .9) var(--tw-gradient-to-position)}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.to-orange-100{--tw-gradient-to: #ffedd5 var(--tw-gradient-to-position)}.to-orange-50{--tw-gradient-to: #fff7ed var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-pink-100{--tw-gradient-to: #fce7f3 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to: #db2777 var(--tw-gradient-to-position)}.to-purple-100{--tw-gradient-to: #f3e8ff var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to: #faf5ff var(--tw-gradient-to-position)}.to-purple-50\/80{--tw-gradient-to: rgb(250 245 255 / .8) var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to: #a855f7 var(--tw-gradient-to-position)}.to-purple-500\/20{--tw-gradient-to: rgb(168 85 247 / .2) var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-red-50{--tw-gradient-to: #fef2f2 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position)}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.to-rose-600{--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.to-sky-100{--tw-gradient-to: #e0f2fe var(--tw-gradient-to-position)}.to-sky-600{--tw-gradient-to: #0284c7 var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.to-teal-50{--tw-gradient-to: #f0fdfa var(--tw-gradient-to-position)}.to-teal-500{--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to: #0d9488 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-yellow-100{--tw-gradient-to: #fef9c3 var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.to-yellow-500{--tw-gradient-to: #eab308 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-cyan-800{--tw-text-opacity: 1;color:rgb(21 94 117 / var(--tw-text-opacity, 1))}.text-cyan-900{--tw-text-opacity: 1;color:rgb(22 78 99 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-gray-950{--tw-text-opacity: 1;color:rgb(3 7 18 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-indigo-800{--tw-text-opacity: 1;color:rgb(55 48 163 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-500\/80{color:#a855f7cc}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-teal-800{--tw-text-opacity: 1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.text-yellow-900{--tw-text-opacity: 1;color:rgb(113 63 18 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.mix-blend-overlay{mix-blend-mode:overlay}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(139\,92\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(139,92,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(148,163,184,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(16\,185\,129\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(16,185,129,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(56\,189\,248\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(56,189,248,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(59\,130\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(59,130,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-amber-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1))}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.ring-blue-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1))}.ring-emerald-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 250 229 / var(--tw-ring-opacity, 1))}.ring-green-500\/20{--tw-ring-color: rgb(34 197 94 / .2)}.ring-purple-100\/80{--tw-ring-color: rgb(243 232 255 / .8)}.ring-red-500\/20{--tw-ring-color: rgb(239 68 68 / .2)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.8\)\]{--tw-drop-shadow: drop-shadow(0 1px 2px rgba(0,0,0,.8));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_2px_4px_rgba\(0\,0\,0\,0\.9\)\]{--tw-drop-shadow: drop-shadow(0 2px 4px rgba(0,0,0,.9));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / .05));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[username\:password\@\]{username:password@}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2)}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.glass-strong{background:var(--surface-color);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.card{background:var(--surface-color);border-radius:16px;border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative}.stat-card{background:linear-gradient(135deg,#fffffff2,#fffc);border-radius:20px;border:1px solid rgba(255,255,255,.3);padding:24px;position:relative;overflow:hidden;transition:all .3s ease}.btn-secondary{background:linear-gradient(135deg,#6b7280,#4b5563);color:#fff;box-shadow:0 10px 15px -3px #6b72804d,0 4px 6px -2px #6b72800d}.btn-secondary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #6b72804d,0 10px 10px -5px #6b72801a}.form-input{background:#fffffff2;border:2px solid rgba(255,255,255,.3);border-radius:12px;padding:8px 12px;font-size:14px;transition:all .2s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2}.table-container{background:#fffffff2;border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.table-row{transition:all .2s ease}.table-row:hover{background:#667eea0d;transform:scale(1.005)}.modal{background:#0009}.dark .modal{background:#000000bf}.modal-content{background:#fffffffa;border-radius:24px;border:1px solid rgba(255,255,255,.3);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d}.dark .modal-content{background:#111827f2;border:1px solid rgba(75,85,99,.3);box-shadow:0 10px 25px -5px #0000004d,0 0 0 1px #ffffff0d}@media (max-width: 640px){.glass,.glass-strong{margin:12px;border-radius:16px;padding:16px}.stat-card{padding:12px;border-radius:12px}.stat-icon{width:40px;height:40px;font-size:16px}.tab-btn{font-size:12px;padding:10px 6px}.modal-content{margin:8px;max-width:calc(100vw - 24px);padding:16px}.modal-scroll-content{max-height:calc(90vh - 100px)}.card{border-radius:12px}.form-input,.form-select,.form-textarea{font-size:14px;padding:8px 12px}.btn{font-size:14px;padding:8px 16px}.table-container table{font-size:12px}.table-container th,.table-container td{padding:8px 12px}.toast{min-width:280px;max-width:calc(100vw - 40px);right:12px;top:60px}.loading-spinner{width:16px;height:16px}}.animate-pulse{animation:pulse 2s infinite}.fa-openai{width:16px;height:16px;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNjQwIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIHY3LjAuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLi0tPjxwYXRoIGQ9Ik0yNjAuNCAyNDkuOHYtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44bC0xMDEuNS01OS40Yy02LjEtMy42LTEyLjMtMy42LTE4LjQgMGwtMTI4LjUgNzQuN3ptMjI4LjMgMTg5LjRWMzIzYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDM1MSAyMzIuNGw0Mi0yNC4xYzMuNi0yIDYuNy0yIDEwLjIgMGw5Ny44IDU2LjRjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNnpNMjMwLjIgMzM2LjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMlYxOTAuNGMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBsLTEwMC45IDU4LjRjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOXYxNDguNXptOTAuNCA1Mi4ybC02MC4yLTMzLjh2LTcxLjdsNjAuMi0zMy44IDYwLjIgMzMuOHY3MS43TDMyMC42IDM4OXptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlWMzAxLjlsNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMnYxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM3pNMjM3LjggNDMwLjVsLTk3LjctNTYuM0MxMTEuOSAzNTcuOCA5MyAzMjMgOTMgMjg5LjJjMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZ2MTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjJ2NDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM3ptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiLz48L3N2Zz4=) no-repeat center/100%}/*! - * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. - */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fas,.far,.fab,.fa-solid,.fa-regular,.fa-brands,.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas:before,.far:before,.fab:before,.fa-solid:before,.fa-regular:before,.fa-brands:before,.fa:before{content:var(--fa)}.fa-classic,.fas,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0{--fa: "0"}.fa-1{--fa: "1"}.fa-2{--fa: "2"}.fa-3{--fa: "3"}.fa-4{--fa: "4"}.fa-5{--fa: "5"}.fa-6{--fa: "6"}.fa-7{--fa: "7"}.fa-8{--fa: "8"}.fa-9{--fa: "9"}.fa-fill-drip{--fa: ""}.fa-arrows-to-circle{--fa: ""}.fa-circle-chevron-right,.fa-chevron-circle-right{--fa: ""}.fa-at{--fa: "@"}.fa-trash-can,.fa-trash-alt{--fa: ""}.fa-text-height{--fa: ""}.fa-user-xmark,.fa-user-times{--fa: ""}.fa-stethoscope{--fa: ""}.fa-message,.fa-comment-alt{--fa: ""}.fa-info{--fa: ""}.fa-down-left-and-up-right-to-center,.fa-compress-alt{--fa: ""}.fa-explosion{--fa: ""}.fa-file-lines,.fa-file-alt,.fa-file-text{--fa: ""}.fa-wave-square{--fa: ""}.fa-ring{--fa: ""}.fa-building-un{--fa: ""}.fa-dice-three{--fa: ""}.fa-calendar-days,.fa-calendar-alt{--fa: ""}.fa-anchor-circle-check{--fa: ""}.fa-building-circle-arrow-right{--fa: ""}.fa-volleyball,.fa-volleyball-ball{--fa: ""}.fa-arrows-up-to-line{--fa: ""}.fa-sort-down,.fa-sort-desc{--fa: ""}.fa-circle-minus,.fa-minus-circle{--fa: ""}.fa-door-open{--fa: ""}.fa-right-from-bracket,.fa-sign-out-alt{--fa: ""}.fa-atom{--fa: ""}.fa-soap{--fa: ""}.fa-icons,.fa-heart-music-camera-bolt{--fa: ""}.fa-microphone-lines-slash,.fa-microphone-alt-slash{--fa: ""}.fa-bridge-circle-check{--fa: ""}.fa-pump-medical{--fa: ""}.fa-fingerprint{--fa: ""}.fa-hand-point-right{--fa: ""}.fa-magnifying-glass-location,.fa-search-location{--fa: ""}.fa-forward-step,.fa-step-forward{--fa: ""}.fa-face-smile-beam,.fa-smile-beam{--fa: ""}.fa-flag-checkered{--fa: ""}.fa-football,.fa-football-ball{--fa: ""}.fa-school-circle-exclamation{--fa: ""}.fa-crop{--fa: ""}.fa-angles-down,.fa-angle-double-down{--fa: ""}.fa-users-rectangle{--fa: ""}.fa-people-roof{--fa: ""}.fa-people-line{--fa: ""}.fa-beer-mug-empty,.fa-beer{--fa: ""}.fa-diagram-predecessor{--fa: ""}.fa-arrow-up-long,.fa-long-arrow-up{--fa: ""}.fa-fire-flame-simple,.fa-burn{--fa: ""}.fa-person,.fa-male{--fa: ""}.fa-laptop{--fa: ""}.fa-file-csv{--fa: ""}.fa-menorah{--fa: ""}.fa-truck-plane{--fa: ""}.fa-record-vinyl{--fa: ""}.fa-face-grin-stars,.fa-grin-stars{--fa: ""}.fa-bong{--fa: ""}.fa-spaghetti-monster-flying,.fa-pastafarianism{--fa: ""}.fa-arrow-down-up-across-line{--fa: ""}.fa-spoon,.fa-utensil-spoon{--fa: ""}.fa-jar-wheat{--fa: ""}.fa-envelopes-bulk,.fa-mail-bulk{--fa: ""}.fa-file-circle-exclamation{--fa: ""}.fa-circle-h,.fa-hospital-symbol{--fa: ""}.fa-pager{--fa: ""}.fa-address-book,.fa-contact-book{--fa: ""}.fa-strikethrough{--fa: ""}.fa-k{--fa: "K"}.fa-landmark-flag{--fa: ""}.fa-pencil,.fa-pencil-alt{--fa: ""}.fa-backward{--fa: ""}.fa-caret-right{--fa: ""}.fa-comments{--fa: ""}.fa-paste,.fa-file-clipboard{--fa: ""}.fa-code-pull-request{--fa: ""}.fa-clipboard-list{--fa: ""}.fa-truck-ramp-box,.fa-truck-loading{--fa: ""}.fa-user-check{--fa: ""}.fa-vial-virus{--fa: ""}.fa-sheet-plastic{--fa: ""}.fa-blog{--fa: ""}.fa-user-ninja{--fa: ""}.fa-person-arrow-up-from-line{--fa: ""}.fa-scroll-torah,.fa-torah{--fa: ""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa: ""}.fa-toggle-off{--fa: ""}.fa-box-archive,.fa-archive{--fa: ""}.fa-person-drowning{--fa: ""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa: ""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa: ""}.fa-spray-can{--fa: ""}.fa-truck-monster{--fa: ""}.fa-w{--fa: "W"}.fa-earth-africa,.fa-globe-africa{--fa: ""}.fa-rainbow{--fa: ""}.fa-circle-notch{--fa: ""}.fa-tablet-screen-button,.fa-tablet-alt{--fa: ""}.fa-paw{--fa: ""}.fa-cloud{--fa: ""}.fa-trowel-bricks{--fa: ""}.fa-face-flushed,.fa-flushed{--fa: ""}.fa-hospital-user{--fa: ""}.fa-tent-arrow-left-right{--fa: ""}.fa-gavel,.fa-legal{--fa: ""}.fa-binoculars{--fa: ""}.fa-microphone-slash{--fa: ""}.fa-box-tissue{--fa: ""}.fa-motorcycle{--fa: ""}.fa-bell-concierge,.fa-concierge-bell{--fa: ""}.fa-pen-ruler,.fa-pencil-ruler{--fa: ""}.fa-people-arrows,.fa-people-arrows-left-right{--fa: ""}.fa-mars-and-venus-burst{--fa: ""}.fa-square-caret-right,.fa-caret-square-right{--fa: ""}.fa-scissors,.fa-cut{--fa: ""}.fa-sun-plant-wilt{--fa: ""}.fa-toilets-portable{--fa: ""}.fa-hockey-puck{--fa: ""}.fa-table{--fa: ""}.fa-magnifying-glass-arrow-right{--fa: ""}.fa-tachograph-digital,.fa-digital-tachograph{--fa: ""}.fa-users-slash{--fa: ""}.fa-clover{--fa: ""}.fa-reply,.fa-mail-reply{--fa: ""}.fa-star-and-crescent{--fa: ""}.fa-house-fire{--fa: ""}.fa-square-minus,.fa-minus-square{--fa: ""}.fa-helicopter{--fa: ""}.fa-compass{--fa: ""}.fa-square-caret-down,.fa-caret-square-down{--fa: ""}.fa-file-circle-question{--fa: ""}.fa-laptop-code{--fa: ""}.fa-swatchbook{--fa: ""}.fa-prescription-bottle{--fa: ""}.fa-bars,.fa-navicon{--fa: ""}.fa-people-group{--fa: ""}.fa-hourglass-end,.fa-hourglass-3{--fa: ""}.fa-heart-crack,.fa-heart-broken{--fa: ""}.fa-square-up-right,.fa-external-link-square-alt{--fa: ""}.fa-face-kiss-beam,.fa-kiss-beam{--fa: ""}.fa-film{--fa: ""}.fa-ruler-horizontal{--fa: ""}.fa-people-robbery{--fa: ""}.fa-lightbulb{--fa: ""}.fa-caret-left{--fa: ""}.fa-circle-exclamation,.fa-exclamation-circle{--fa: ""}.fa-school-circle-xmark{--fa: ""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa: ""}.fa-circle-chevron-down,.fa-chevron-circle-down{--fa: ""}.fa-unlock-keyhole,.fa-unlock-alt{--fa: ""}.fa-cloud-showers-heavy{--fa: ""}.fa-headphones-simple,.fa-headphones-alt{--fa: ""}.fa-sitemap{--fa: ""}.fa-circle-dollar-to-slot,.fa-donate{--fa: ""}.fa-memory{--fa: ""}.fa-road-spikes{--fa: ""}.fa-fire-burner{--fa: ""}.fa-flag{--fa: ""}.fa-hanukiah{--fa: ""}.fa-feather{--fa: ""}.fa-volume-low,.fa-volume-down{--fa: ""}.fa-comment-slash{--fa: ""}.fa-cloud-sun-rain{--fa: ""}.fa-compress{--fa: ""}.fa-wheat-awn,.fa-wheat-alt{--fa: ""}.fa-ankh{--fa: ""}.fa-hands-holding-child{--fa: ""}.fa-asterisk{--fa: "*"}.fa-square-check,.fa-check-square{--fa: ""}.fa-peseta-sign{--fa: ""}.fa-heading,.fa-header{--fa: ""}.fa-ghost{--fa: ""}.fa-list,.fa-list-squares{--fa: ""}.fa-square-phone-flip,.fa-phone-square-alt{--fa: ""}.fa-cart-plus{--fa: ""}.fa-gamepad{--fa: ""}.fa-circle-dot,.fa-dot-circle{--fa: ""}.fa-face-dizzy,.fa-dizzy{--fa: ""}.fa-egg{--fa: ""}.fa-house-medical-circle-xmark{--fa: ""}.fa-campground{--fa: ""}.fa-folder-plus{--fa: ""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa: ""}.fa-paintbrush,.fa-paint-brush{--fa: ""}.fa-lock{--fa: ""}.fa-gas-pump{--fa: ""}.fa-hot-tub-person,.fa-hot-tub{--fa: ""}.fa-map-location,.fa-map-marked{--fa: ""}.fa-house-flood-water{--fa: ""}.fa-tree{--fa: ""}.fa-bridge-lock{--fa: ""}.fa-sack-dollar{--fa: ""}.fa-pen-to-square,.fa-edit{--fa: ""}.fa-car-side{--fa: ""}.fa-share-nodes,.fa-share-alt{--fa: ""}.fa-heart-circle-minus{--fa: ""}.fa-hourglass-half,.fa-hourglass-2{--fa: ""}.fa-microscope{--fa: ""}.fa-sink{--fa: ""}.fa-bag-shopping,.fa-shopping-bag{--fa: ""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa: ""}.fa-mitten{--fa: ""}.fa-person-rays{--fa: ""}.fa-users{--fa: ""}.fa-eye-slash{--fa: ""}.fa-flask-vial{--fa: ""}.fa-hand,.fa-hand-paper{--fa: ""}.fa-om{--fa: ""}.fa-worm{--fa: ""}.fa-house-circle-xmark{--fa: ""}.fa-plug{--fa: ""}.fa-chevron-up{--fa: ""}.fa-hand-spock{--fa: ""}.fa-stopwatch{--fa: ""}.fa-face-kiss,.fa-kiss{--fa: ""}.fa-bridge-circle-xmark{--fa: ""}.fa-face-grin-tongue,.fa-grin-tongue{--fa: ""}.fa-chess-bishop{--fa: ""}.fa-face-grin-wink,.fa-grin-wink{--fa: ""}.fa-ear-deaf,.fa-deaf,.fa-deafness,.fa-hard-of-hearing{--fa: ""}.fa-road-circle-check{--fa: ""}.fa-dice-five{--fa: ""}.fa-square-rss,.fa-rss-square{--fa: ""}.fa-land-mine-on{--fa: ""}.fa-i-cursor{--fa: ""}.fa-stamp{--fa: ""}.fa-stairs{--fa: ""}.fa-i{--fa: "I"}.fa-hryvnia-sign,.fa-hryvnia{--fa: ""}.fa-pills{--fa: ""}.fa-face-grin-wide,.fa-grin-alt{--fa: ""}.fa-tooth{--fa: ""}.fa-v{--fa: "V"}.fa-bangladeshi-taka-sign{--fa: ""}.fa-bicycle{--fa: ""}.fa-staff-snake,.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius{--fa: ""}.fa-head-side-cough-slash{--fa: ""}.fa-truck-medical,.fa-ambulance{--fa: ""}.fa-wheat-awn-circle-exclamation{--fa: ""}.fa-snowman{--fa: ""}.fa-mortar-pestle{--fa: ""}.fa-road-barrier{--fa: ""}.fa-school{--fa: ""}.fa-igloo{--fa: ""}.fa-joint{--fa: ""}.fa-angle-right{--fa: ""}.fa-horse{--fa: ""}.fa-q{--fa: "Q"}.fa-g{--fa: "G"}.fa-notes-medical{--fa: ""}.fa-temperature-half,.fa-temperature-2,.fa-thermometer-2,.fa-thermometer-half{--fa: ""}.fa-dong-sign{--fa: ""}.fa-capsules{--fa: ""}.fa-poo-storm,.fa-poo-bolt{--fa: ""}.fa-face-frown-open,.fa-frown-open{--fa: ""}.fa-hand-point-up{--fa: ""}.fa-money-bill{--fa: ""}.fa-bookmark{--fa: ""}.fa-align-justify{--fa: ""}.fa-umbrella-beach{--fa: ""}.fa-helmet-un{--fa: ""}.fa-bullseye{--fa: ""}.fa-bacon{--fa: ""}.fa-hand-point-down{--fa: ""}.fa-arrow-up-from-bracket{--fa: ""}.fa-folder,.fa-folder-blank{--fa: ""}.fa-file-waveform,.fa-file-medical-alt{--fa: ""}.fa-radiation{--fa: ""}.fa-chart-simple{--fa: ""}.fa-mars-stroke{--fa: ""}.fa-vial{--fa: ""}.fa-gauge,.fa-dashboard,.fa-gauge-med,.fa-tachometer-alt-average{--fa: ""}.fa-wand-magic-sparkles,.fa-magic-wand-sparkles{--fa: ""}.fa-e{--fa: "E"}.fa-pen-clip,.fa-pen-alt{--fa: ""}.fa-bridge-circle-exclamation{--fa: ""}.fa-user{--fa: ""}.fa-school-circle-check{--fa: ""}.fa-dumpster{--fa: ""}.fa-van-shuttle,.fa-shuttle-van{--fa: ""}.fa-building-user{--fa: ""}.fa-square-caret-left,.fa-caret-square-left{--fa: ""}.fa-highlighter{--fa: ""}.fa-key{--fa: ""}.fa-bullhorn{--fa: ""}.fa-globe{--fa: ""}.fa-synagogue{--fa: ""}.fa-person-half-dress{--fa: ""}.fa-road-bridge{--fa: ""}.fa-location-arrow{--fa: ""}.fa-c{--fa: "C"}.fa-tablet-button{--fa: ""}.fa-building-lock{--fa: ""}.fa-pizza-slice{--fa: ""}.fa-money-bill-wave{--fa: ""}.fa-chart-area,.fa-area-chart{--fa: ""}.fa-house-flag{--fa: ""}.fa-person-circle-minus{--fa: ""}.fa-ban,.fa-cancel{--fa: ""}.fa-camera-rotate{--fa: ""}.fa-spray-can-sparkles,.fa-air-freshener{--fa: ""}.fa-star{--fa: ""}.fa-repeat{--fa: ""}.fa-cross{--fa: ""}.fa-box{--fa: ""}.fa-venus-mars{--fa: ""}.fa-arrow-pointer,.fa-mouse-pointer{--fa: ""}.fa-maximize,.fa-expand-arrows-alt{--fa: ""}.fa-charging-station{--fa: ""}.fa-shapes,.fa-triangle-circle-square{--fa: ""}.fa-shuffle,.fa-random{--fa: ""}.fa-person-running,.fa-running{--fa: ""}.fa-mobile-retro{--fa: ""}.fa-grip-lines-vertical{--fa: ""}.fa-spider{--fa: ""}.fa-hands-bound{--fa: ""}.fa-file-invoice-dollar{--fa: ""}.fa-plane-circle-exclamation{--fa: ""}.fa-x-ray{--fa: ""}.fa-spell-check{--fa: ""}.fa-slash{--fa: ""}.fa-computer-mouse,.fa-mouse{--fa: ""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa: ""}.fa-shop-slash,.fa-store-alt-slash{--fa: ""}.fa-server{--fa: ""}.fa-virus-covid-slash{--fa: ""}.fa-shop-lock{--fa: ""}.fa-hourglass-start,.fa-hourglass-1{--fa: ""}.fa-blender-phone{--fa: ""}.fa-building-wheat{--fa: ""}.fa-person-breastfeeding{--fa: ""}.fa-right-to-bracket,.fa-sign-in-alt{--fa: ""}.fa-venus{--fa: ""}.fa-passport{--fa: ""}.fa-thumbtack-slash,.fa-thumb-tack-slash{--fa: ""}.fa-heart-pulse,.fa-heartbeat{--fa: ""}.fa-people-carry-box,.fa-people-carry{--fa: ""}.fa-temperature-high{--fa: ""}.fa-microchip{--fa: ""}.fa-crown{--fa: ""}.fa-weight-hanging{--fa: ""}.fa-xmarks-lines{--fa: ""}.fa-file-prescription{--fa: ""}.fa-weight-scale,.fa-weight{--fa: ""}.fa-user-group,.fa-user-friends{--fa: ""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa: ""}.fa-chess-knight{--fa: ""}.fa-face-laugh-squint,.fa-laugh-squint{--fa: ""}.fa-wheelchair{--fa: ""}.fa-circle-arrow-up,.fa-arrow-circle-up{--fa: ""}.fa-toggle-on{--fa: ""}.fa-person-walking,.fa-walking{--fa: ""}.fa-l{--fa: "L"}.fa-fire{--fa: ""}.fa-bed-pulse,.fa-procedures{--fa: ""}.fa-shuttle-space,.fa-space-shuttle{--fa: ""}.fa-face-laugh,.fa-laugh{--fa: ""}.fa-folder-open{--fa: ""}.fa-heart-circle-plus{--fa: ""}.fa-code-fork{--fa: ""}.fa-city{--fa: ""}.fa-microphone-lines,.fa-microphone-alt{--fa: ""}.fa-pepper-hot{--fa: ""}.fa-unlock{--fa: ""}.fa-colon-sign{--fa: ""}.fa-headset{--fa: ""}.fa-store-slash{--fa: ""}.fa-road-circle-xmark{--fa: ""}.fa-user-minus{--fa: ""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa: ""}.fa-champagne-glasses,.fa-glass-cheers{--fa: ""}.fa-clipboard{--fa: ""}.fa-house-circle-exclamation{--fa: ""}.fa-file-arrow-up,.fa-file-upload{--fa: ""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa: ""}.fa-bath,.fa-bathtub{--fa: ""}.fa-underline{--fa: ""}.fa-user-pen,.fa-user-edit{--fa: ""}.fa-signature{--fa: ""}.fa-stroopwafel{--fa: ""}.fa-bold{--fa: ""}.fa-anchor-lock{--fa: ""}.fa-building-ngo{--fa: ""}.fa-manat-sign{--fa: ""}.fa-not-equal{--fa: ""}.fa-border-top-left,.fa-border-style{--fa: ""}.fa-map-location-dot,.fa-map-marked-alt{--fa: ""}.fa-jedi{--fa: ""}.fa-square-poll-vertical,.fa-poll{--fa: ""}.fa-mug-hot{--fa: ""}.fa-car-battery,.fa-battery-car{--fa: ""}.fa-gift{--fa: ""}.fa-dice-two{--fa: ""}.fa-chess-queen{--fa: ""}.fa-glasses{--fa: ""}.fa-chess-board{--fa: ""}.fa-building-circle-check{--fa: ""}.fa-person-chalkboard{--fa: ""}.fa-mars-stroke-right,.fa-mars-stroke-h{--fa: ""}.fa-hand-back-fist,.fa-hand-rock{--fa: ""}.fa-square-caret-up,.fa-caret-square-up{--fa: ""}.fa-cloud-showers-water{--fa: ""}.fa-chart-bar,.fa-bar-chart{--fa: ""}.fa-hands-bubbles,.fa-hands-wash{--fa: ""}.fa-less-than-equal{--fa: ""}.fa-train{--fa: ""}.fa-eye-low-vision,.fa-low-vision{--fa: ""}.fa-crow{--fa: ""}.fa-sailboat{--fa: ""}.fa-window-restore{--fa: ""}.fa-square-plus,.fa-plus-square{--fa: ""}.fa-torii-gate{--fa: ""}.fa-frog{--fa: ""}.fa-bucket{--fa: ""}.fa-image{--fa: ""}.fa-microphone{--fa: ""}.fa-cow{--fa: ""}.fa-caret-up{--fa: ""}.fa-screwdriver{--fa: ""}.fa-folder-closed{--fa: ""}.fa-house-tsunami{--fa: ""}.fa-square-nfi{--fa: ""}.fa-arrow-up-from-ground-water{--fa: ""}.fa-martini-glass,.fa-glass-martini-alt{--fa: ""}.fa-square-binary{--fa: ""}.fa-rotate-left,.fa-rotate-back,.fa-rotate-backward,.fa-undo-alt{--fa: ""}.fa-table-columns,.fa-columns{--fa: ""}.fa-lemon{--fa: ""}.fa-head-side-mask{--fa: ""}.fa-handshake{--fa: ""}.fa-gem{--fa: ""}.fa-dolly,.fa-dolly-box{--fa: ""}.fa-smoking{--fa: ""}.fa-minimize,.fa-compress-arrows-alt{--fa: ""}.fa-monument{--fa: ""}.fa-snowplow{--fa: ""}.fa-angles-right,.fa-angle-double-right{--fa: ""}.fa-cannabis{--fa: ""}.fa-circle-play,.fa-play-circle{--fa: ""}.fa-tablets{--fa: ""}.fa-ethernet{--fa: ""}.fa-euro-sign,.fa-eur,.fa-euro{--fa: ""}.fa-chair{--fa: ""}.fa-circle-check,.fa-check-circle{--fa: ""}.fa-circle-stop,.fa-stop-circle{--fa: ""}.fa-compass-drafting,.fa-drafting-compass{--fa: ""}.fa-plate-wheat{--fa: ""}.fa-icicles{--fa: ""}.fa-person-shelter{--fa: ""}.fa-neuter{--fa: ""}.fa-id-badge{--fa: ""}.fa-marker{--fa: ""}.fa-face-laugh-beam,.fa-laugh-beam{--fa: ""}.fa-helicopter-symbol{--fa: ""}.fa-universal-access{--fa: ""}.fa-circle-chevron-up,.fa-chevron-circle-up{--fa: ""}.fa-lari-sign{--fa: ""}.fa-volcano{--fa: ""}.fa-person-walking-dashed-line-arrow-right{--fa: ""}.fa-sterling-sign,.fa-gbp,.fa-pound-sign{--fa: ""}.fa-viruses{--fa: ""}.fa-square-person-confined{--fa: ""}.fa-user-tie{--fa: ""}.fa-arrow-down-long,.fa-long-arrow-down{--fa: ""}.fa-tent-arrow-down-to-line{--fa: ""}.fa-certificate{--fa: ""}.fa-reply-all,.fa-mail-reply-all{--fa: ""}.fa-suitcase{--fa: ""}.fa-person-skating,.fa-skating{--fa: ""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa: ""}.fa-camera-retro{--fa: ""}.fa-circle-arrow-down,.fa-arrow-circle-down{--fa: ""}.fa-file-import,.fa-arrow-right-to-file{--fa: ""}.fa-square-arrow-up-right,.fa-external-link-square{--fa: ""}.fa-box-open{--fa: ""}.fa-scroll{--fa: ""}.fa-spa{--fa: ""}.fa-location-pin-lock{--fa: ""}.fa-pause{--fa: ""}.fa-hill-avalanche{--fa: ""}.fa-temperature-empty,.fa-temperature-0,.fa-thermometer-0,.fa-thermometer-empty{--fa: ""}.fa-bomb{--fa: ""}.fa-registered{--fa: ""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa: ""}.fa-scale-unbalanced-flip,.fa-balance-scale-right{--fa: ""}.fa-subscript{--fa: ""}.fa-diamond-turn-right,.fa-directions{--fa: ""}.fa-burst{--fa: ""}.fa-house-laptop,.fa-laptop-house{--fa: ""}.fa-face-tired,.fa-tired{--fa: ""}.fa-money-bills{--fa: ""}.fa-smog{--fa: ""}.fa-crutch{--fa: ""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa: ""}.fa-palette{--fa: ""}.fa-arrows-turn-right{--fa: ""}.fa-vest{--fa: ""}.fa-ferry{--fa: ""}.fa-arrows-down-to-people{--fa: ""}.fa-seedling,.fa-sprout{--fa: ""}.fa-left-right,.fa-arrows-alt-h{--fa: ""}.fa-boxes-packing{--fa: ""}.fa-circle-arrow-left,.fa-arrow-circle-left{--fa: ""}.fa-group-arrows-rotate{--fa: ""}.fa-bowl-food{--fa: ""}.fa-candy-cane{--fa: ""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa: ""}.fa-cloud-bolt,.fa-thunderstorm{--fa: ""}.fa-text-slash,.fa-remove-format{--fa: ""}.fa-face-smile-wink,.fa-smile-wink{--fa: ""}.fa-file-word{--fa: ""}.fa-file-powerpoint{--fa: ""}.fa-arrows-left-right,.fa-arrows-h{--fa: ""}.fa-house-lock{--fa: ""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa: ""}.fa-children{--fa: ""}.fa-chalkboard,.fa-blackboard{--fa: ""}.fa-user-large-slash,.fa-user-alt-slash{--fa: ""}.fa-envelope-open{--fa: ""}.fa-handshake-simple-slash,.fa-handshake-alt-slash{--fa: ""}.fa-mattress-pillow{--fa: ""}.fa-guarani-sign{--fa: ""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa: ""}.fa-fire-extinguisher{--fa: ""}.fa-cruzeiro-sign{--fa: ""}.fa-greater-than-equal{--fa: ""}.fa-shield-halved,.fa-shield-alt{--fa: ""}.fa-book-atlas,.fa-atlas{--fa: ""}.fa-virus{--fa: ""}.fa-envelope-circle-check{--fa: ""}.fa-layer-group{--fa: ""}.fa-arrows-to-dot{--fa: ""}.fa-archway{--fa: ""}.fa-heart-circle-check{--fa: ""}.fa-house-chimney-crack,.fa-house-damage{--fa: ""}.fa-file-zipper,.fa-file-archive{--fa: ""}.fa-square{--fa: ""}.fa-martini-glass-empty,.fa-glass-martini{--fa: ""}.fa-couch{--fa: ""}.fa-cedi-sign{--fa: ""}.fa-italic{--fa: ""}.fa-table-cells-column-lock{--fa: ""}.fa-church{--fa: ""}.fa-comments-dollar{--fa: ""}.fa-democrat{--fa: ""}.fa-z{--fa: "Z"}.fa-person-skiing,.fa-skiing{--fa: ""}.fa-road-lock{--fa: ""}.fa-a{--fa: "A"}.fa-temperature-arrow-down,.fa-temperature-down{--fa: ""}.fa-feather-pointed,.fa-feather-alt{--fa: ""}.fa-p{--fa: "P"}.fa-snowflake{--fa: ""}.fa-newspaper{--fa: ""}.fa-rectangle-ad,.fa-ad{--fa: ""}.fa-circle-arrow-right,.fa-arrow-circle-right{--fa: ""}.fa-filter-circle-xmark{--fa: ""}.fa-locust{--fa: ""}.fa-sort,.fa-unsorted{--fa: ""}.fa-list-ol,.fa-list-1-2,.fa-list-numeric{--fa: ""}.fa-person-dress-burst{--fa: ""}.fa-money-check-dollar,.fa-money-check-alt{--fa: ""}.fa-vector-square{--fa: ""}.fa-bread-slice{--fa: ""}.fa-language{--fa: ""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa: ""}.fa-filter{--fa: ""}.fa-question{--fa: "?"}.fa-file-signature{--fa: ""}.fa-up-down-left-right,.fa-arrows-alt{--fa: ""}.fa-house-chimney-user{--fa: ""}.fa-hand-holding-heart{--fa: ""}.fa-puzzle-piece{--fa: ""}.fa-money-check{--fa: ""}.fa-star-half-stroke,.fa-star-half-alt{--fa: ""}.fa-code{--fa: ""}.fa-whiskey-glass,.fa-glass-whiskey{--fa: ""}.fa-building-circle-exclamation{--fa: ""}.fa-magnifying-glass-chart{--fa: ""}.fa-arrow-up-right-from-square,.fa-external-link{--fa: ""}.fa-cubes-stacked{--fa: ""}.fa-won-sign,.fa-krw,.fa-won{--fa: ""}.fa-virus-covid{--fa: ""}.fa-austral-sign{--fa: ""}.fa-f{--fa: "F"}.fa-leaf{--fa: ""}.fa-road{--fa: ""}.fa-taxi,.fa-cab{--fa: ""}.fa-person-circle-plus{--fa: ""}.fa-chart-pie,.fa-pie-chart{--fa: ""}.fa-bolt-lightning{--fa: ""}.fa-sack-xmark{--fa: ""}.fa-file-excel{--fa: ""}.fa-file-contract{--fa: ""}.fa-fish-fins{--fa: ""}.fa-building-flag{--fa: ""}.fa-face-grin-beam,.fa-grin-beam{--fa: ""}.fa-object-ungroup{--fa: ""}.fa-poop{--fa: ""}.fa-location-pin,.fa-map-marker{--fa: ""}.fa-kaaba{--fa: ""}.fa-toilet-paper{--fa: ""}.fa-helmet-safety,.fa-hard-hat,.fa-hat-hard{--fa: ""}.fa-eject{--fa: ""}.fa-circle-right,.fa-arrow-alt-circle-right{--fa: ""}.fa-plane-circle-check{--fa: ""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa: ""}.fa-object-group{--fa: ""}.fa-chart-line,.fa-line-chart{--fa: ""}.fa-mask-ventilator{--fa: ""}.fa-arrow-right{--fa: ""}.fa-signs-post,.fa-map-signs{--fa: ""}.fa-cash-register{--fa: ""}.fa-person-circle-question{--fa: ""}.fa-h{--fa: "H"}.fa-tarp{--fa: ""}.fa-screwdriver-wrench,.fa-tools{--fa: ""}.fa-arrows-to-eye{--fa: ""}.fa-plug-circle-bolt{--fa: ""}.fa-heart{--fa: ""}.fa-mars-and-venus{--fa: ""}.fa-house-user,.fa-home-user{--fa: ""}.fa-dumpster-fire{--fa: ""}.fa-house-crack{--fa: ""}.fa-martini-glass-citrus,.fa-cocktail{--fa: ""}.fa-face-surprise,.fa-surprise{--fa: ""}.fa-bottle-water{--fa: ""}.fa-circle-pause,.fa-pause-circle{--fa: ""}.fa-toilet-paper-slash{--fa: ""}.fa-apple-whole,.fa-apple-alt{--fa: ""}.fa-kitchen-set{--fa: ""}.fa-r{--fa: "R"}.fa-temperature-quarter,.fa-temperature-1,.fa-thermometer-1,.fa-thermometer-quarter{--fa: ""}.fa-cube{--fa: ""}.fa-bitcoin-sign{--fa: ""}.fa-shield-dog{--fa: ""}.fa-solar-panel{--fa: ""}.fa-lock-open{--fa: ""}.fa-elevator{--fa: ""}.fa-money-bill-transfer{--fa: ""}.fa-money-bill-trend-up{--fa: ""}.fa-house-flood-water-circle-arrow-right{--fa: ""}.fa-square-poll-horizontal,.fa-poll-h{--fa: ""}.fa-circle{--fa: ""}.fa-backward-fast,.fa-fast-backward{--fa: ""}.fa-recycle{--fa: ""}.fa-user-astronaut{--fa: ""}.fa-plane-slash{--fa: ""}.fa-trademark{--fa: ""}.fa-basketball,.fa-basketball-ball{--fa: ""}.fa-satellite-dish{--fa: ""}.fa-circle-up,.fa-arrow-alt-circle-up{--fa: ""}.fa-mobile-screen-button,.fa-mobile-alt{--fa: ""}.fa-volume-high,.fa-volume-up{--fa: ""}.fa-users-rays{--fa: ""}.fa-wallet{--fa: ""}.fa-clipboard-check{--fa: ""}.fa-file-audio{--fa: ""}.fa-burger,.fa-hamburger{--fa: ""}.fa-wrench{--fa: ""}.fa-bugs{--fa: ""}.fa-rupee-sign,.fa-rupee{--fa: ""}.fa-file-image{--fa: ""}.fa-circle-question,.fa-question-circle{--fa: ""}.fa-plane-departure{--fa: ""}.fa-handshake-slash{--fa: ""}.fa-book-bookmark{--fa: ""}.fa-code-branch{--fa: ""}.fa-hat-cowboy{--fa: ""}.fa-bridge{--fa: ""}.fa-phone-flip,.fa-phone-alt{--fa: ""}.fa-truck-front{--fa: ""}.fa-cat{--fa: ""}.fa-anchor-circle-exclamation{--fa: ""}.fa-truck-field{--fa: ""}.fa-route{--fa: ""}.fa-clipboard-question{--fa: ""}.fa-panorama{--fa: ""}.fa-comment-medical{--fa: ""}.fa-teeth-open{--fa: ""}.fa-file-circle-minus{--fa: ""}.fa-tags{--fa: ""}.fa-wine-glass{--fa: ""}.fa-forward-fast,.fa-fast-forward{--fa: ""}.fa-face-meh-blank,.fa-meh-blank{--fa: ""}.fa-square-parking,.fa-parking{--fa: ""}.fa-house-signal{--fa: ""}.fa-bars-progress,.fa-tasks-alt{--fa: ""}.fa-faucet-drip{--fa: ""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa: ""}.fa-ban-smoking,.fa-smoking-ban{--fa: ""}.fa-terminal{--fa: ""}.fa-mobile-button{--fa: ""}.fa-house-medical-flag{--fa: ""}.fa-basket-shopping,.fa-shopping-basket{--fa: ""}.fa-tape{--fa: ""}.fa-bus-simple,.fa-bus-alt{--fa: ""}.fa-eye{--fa: ""}.fa-face-sad-cry,.fa-sad-cry{--fa: ""}.fa-audio-description{--fa: ""}.fa-person-military-to-person{--fa: ""}.fa-file-shield{--fa: ""}.fa-user-slash{--fa: ""}.fa-pen{--fa: ""}.fa-tower-observation{--fa: ""}.fa-file-code{--fa: ""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa: ""}.fa-bus{--fa: ""}.fa-heart-circle-xmark{--fa: ""}.fa-house-chimney,.fa-home-lg{--fa: ""}.fa-window-maximize{--fa: ""}.fa-face-frown,.fa-frown{--fa: ""}.fa-prescription{--fa: ""}.fa-shop,.fa-store-alt{--fa: ""}.fa-floppy-disk,.fa-save{--fa: ""}.fa-vihara{--fa: ""}.fa-scale-unbalanced,.fa-balance-scale-left{--fa: ""}.fa-sort-up,.fa-sort-asc{--fa: ""}.fa-comment-dots,.fa-commenting{--fa: ""}.fa-plant-wilt{--fa: ""}.fa-diamond{--fa: ""}.fa-face-grin-squint,.fa-grin-squint{--fa: ""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa: ""}.fa-chart-diagram{--fa: ""}.fa-bacterium{--fa: ""}.fa-hand-pointer{--fa: ""}.fa-drum-steelpan{--fa: ""}.fa-hand-scissors{--fa: ""}.fa-hands-praying,.fa-praying-hands{--fa: ""}.fa-arrow-rotate-right,.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-redo{--fa: ""}.fa-biohazard{--fa: ""}.fa-location-crosshairs,.fa-location{--fa: ""}.fa-mars-double{--fa: ""}.fa-child-dress{--fa: ""}.fa-users-between-lines{--fa: ""}.fa-lungs-virus{--fa: ""}.fa-face-grin-tears,.fa-grin-tears{--fa: ""}.fa-phone{--fa: ""}.fa-calendar-xmark,.fa-calendar-times{--fa: ""}.fa-child-reaching{--fa: ""}.fa-head-side-virus{--fa: ""}.fa-user-gear,.fa-user-cog{--fa: ""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa: ""}.fa-door-closed{--fa: ""}.fa-shield-virus{--fa: ""}.fa-dice-six{--fa: ""}.fa-mosquito-net{--fa: ""}.fa-file-fragment{--fa: ""}.fa-bridge-water{--fa: ""}.fa-person-booth{--fa: ""}.fa-text-width{--fa: ""}.fa-hat-wizard{--fa: ""}.fa-pen-fancy{--fa: ""}.fa-person-digging,.fa-digging{--fa: ""}.fa-trash{--fa: ""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa: ""}.fa-book-medical{--fa: ""}.fa-poo{--fa: ""}.fa-quote-right,.fa-quote-right-alt{--fa: ""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa: ""}.fa-cubes{--fa: ""}.fa-divide{--fa: ""}.fa-tenge-sign,.fa-tenge{--fa: ""}.fa-headphones{--fa: ""}.fa-hands-holding{--fa: ""}.fa-hands-clapping{--fa: ""}.fa-republican{--fa: ""}.fa-arrow-left{--fa: ""}.fa-person-circle-xmark{--fa: ""}.fa-ruler{--fa: ""}.fa-align-left{--fa: ""}.fa-dice-d6{--fa: ""}.fa-restroom{--fa: ""}.fa-j{--fa: "J"}.fa-users-viewfinder{--fa: ""}.fa-file-video{--fa: ""}.fa-up-right-from-square,.fa-external-link-alt{--fa: ""}.fa-table-cells,.fa-th{--fa: ""}.fa-file-pdf{--fa: ""}.fa-book-bible,.fa-bible{--fa: ""}.fa-o{--fa: "O"}.fa-suitcase-medical,.fa-medkit{--fa: ""}.fa-user-secret{--fa: ""}.fa-otter{--fa: ""}.fa-person-dress,.fa-female{--fa: ""}.fa-comment-dollar{--fa: ""}.fa-business-time,.fa-briefcase-clock{--fa: ""}.fa-table-cells-large,.fa-th-large{--fa: ""}.fa-book-tanakh,.fa-tanakh{--fa: ""}.fa-phone-volume,.fa-volume-control-phone{--fa: ""}.fa-hat-cowboy-side{--fa: ""}.fa-clipboard-user{--fa: ""}.fa-child{--fa: ""}.fa-lira-sign{--fa: ""}.fa-satellite{--fa: ""}.fa-plane-lock{--fa: ""}.fa-tag{--fa: ""}.fa-comment{--fa: ""}.fa-cake-candles,.fa-birthday-cake,.fa-cake{--fa: ""}.fa-envelope{--fa: ""}.fa-angles-up,.fa-angle-double-up{--fa: ""}.fa-paperclip{--fa: ""}.fa-arrow-right-to-city{--fa: ""}.fa-ribbon{--fa: ""}.fa-lungs{--fa: ""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa: ""}.fa-litecoin-sign{--fa: ""}.fa-border-none{--fa: ""}.fa-circle-nodes{--fa: ""}.fa-parachute-box{--fa: ""}.fa-indent{--fa: ""}.fa-truck-field-un{--fa: ""}.fa-hourglass,.fa-hourglass-empty{--fa: ""}.fa-mountain{--fa: ""}.fa-user-doctor,.fa-user-md{--fa: ""}.fa-circle-info,.fa-info-circle{--fa: ""}.fa-cloud-meatball{--fa: ""}.fa-camera,.fa-camera-alt{--fa: ""}.fa-square-virus{--fa: ""}.fa-meteor{--fa: ""}.fa-car-on{--fa: ""}.fa-sleigh{--fa: ""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa: ""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa: ""}.fa-water{--fa: ""}.fa-calendar-check{--fa: ""}.fa-braille{--fa: ""}.fa-prescription-bottle-medical,.fa-prescription-bottle-alt{--fa: ""}.fa-landmark{--fa: ""}.fa-truck{--fa: ""}.fa-crosshairs{--fa: ""}.fa-person-cane{--fa: ""}.fa-tent{--fa: ""}.fa-vest-patches{--fa: ""}.fa-check-double{--fa: ""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa: ""}.fa-money-bill-wheat{--fa: ""}.fa-cookie{--fa: ""}.fa-arrow-rotate-left,.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-undo{--fa: ""}.fa-hard-drive,.fa-hdd{--fa: ""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa: ""}.fa-dumbbell{--fa: ""}.fa-rectangle-list,.fa-list-alt{--fa: ""}.fa-tarp-droplet{--fa: ""}.fa-house-medical-circle-check{--fa: ""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa: ""}.fa-calendar-plus{--fa: ""}.fa-plane-arrival{--fa: ""}.fa-circle-left,.fa-arrow-alt-circle-left{--fa: ""}.fa-train-subway,.fa-subway{--fa: ""}.fa-chart-gantt{--fa: ""}.fa-indian-rupee-sign,.fa-indian-rupee,.fa-inr{--fa: ""}.fa-crop-simple,.fa-crop-alt{--fa: ""}.fa-money-bill-1,.fa-money-bill-alt{--fa: ""}.fa-left-long,.fa-long-arrow-alt-left{--fa: ""}.fa-dna{--fa: ""}.fa-virus-slash{--fa: ""}.fa-minus,.fa-subtract{--fa: ""}.fa-chess{--fa: ""}.fa-arrow-left-long,.fa-long-arrow-left{--fa: ""}.fa-plug-circle-check{--fa: ""}.fa-street-view{--fa: ""}.fa-franc-sign{--fa: ""}.fa-volume-off{--fa: ""}.fa-hands-asl-interpreting,.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting{--fa: ""}.fa-gear,.fa-cog{--fa: ""}.fa-droplet-slash,.fa-tint-slash{--fa: ""}.fa-mosque{--fa: ""}.fa-mosquito{--fa: ""}.fa-star-of-david{--fa: ""}.fa-person-military-rifle{--fa: ""}.fa-cart-shopping,.fa-shopping-cart{--fa: ""}.fa-vials{--fa: ""}.fa-plug-circle-plus{--fa: ""}.fa-place-of-worship{--fa: ""}.fa-grip-vertical{--fa: ""}.fa-hexagon-nodes{--fa: ""}.fa-arrow-turn-up,.fa-level-up{--fa: ""}.fa-u{--fa: "U"}.fa-square-root-variable,.fa-square-root-alt{--fa: ""}.fa-clock,.fa-clock-four{--fa: ""}.fa-backward-step,.fa-step-backward{--fa: ""}.fa-pallet{--fa: ""}.fa-faucet{--fa: ""}.fa-baseball-bat-ball{--fa: ""}.fa-s{--fa: "S"}.fa-timeline{--fa: ""}.fa-keyboard{--fa: ""}.fa-caret-down{--fa: ""}.fa-house-chimney-medical,.fa-clinic-medical{--fa: ""}.fa-temperature-three-quarters,.fa-temperature-3,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa: ""}.fa-mobile-screen,.fa-mobile-android-alt{--fa: ""}.fa-plane-up{--fa: ""}.fa-piggy-bank{--fa: ""}.fa-battery-half,.fa-battery-3{--fa: ""}.fa-mountain-city{--fa: ""}.fa-coins{--fa: ""}.fa-khanda{--fa: ""}.fa-sliders,.fa-sliders-h{--fa: ""}.fa-folder-tree{--fa: ""}.fa-network-wired{--fa: ""}.fa-map-pin{--fa: ""}.fa-hamsa{--fa: ""}.fa-cent-sign{--fa: ""}.fa-flask{--fa: ""}.fa-person-pregnant{--fa: ""}.fa-wand-sparkles{--fa: ""}.fa-ellipsis-vertical,.fa-ellipsis-v{--fa: ""}.fa-ticket{--fa: ""}.fa-power-off{--fa: ""}.fa-right-long,.fa-long-arrow-alt-right{--fa: ""}.fa-flag-usa{--fa: ""}.fa-laptop-file{--fa: ""}.fa-tty,.fa-teletype{--fa: ""}.fa-diagram-next{--fa: ""}.fa-person-rifle{--fa: ""}.fa-house-medical-circle-exclamation{--fa: ""}.fa-closed-captioning{--fa: ""}.fa-person-hiking,.fa-hiking{--fa: ""}.fa-venus-double{--fa: ""}.fa-images{--fa: ""}.fa-calculator{--fa: ""}.fa-people-pulling{--fa: ""}.fa-n{--fa: "N"}.fa-cable-car,.fa-tram{--fa: ""}.fa-cloud-rain{--fa: ""}.fa-building-circle-xmark{--fa: ""}.fa-ship{--fa: ""}.fa-arrows-down-to-line{--fa: ""}.fa-download{--fa: ""}.fa-face-grin,.fa-grin{--fa: ""}.fa-delete-left,.fa-backspace{--fa: ""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa: ""}.fa-file-circle-check{--fa: ""}.fa-forward{--fa: ""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa: ""}.fa-face-meh,.fa-meh{--fa: ""}.fa-align-center{--fa: ""}.fa-book-skull,.fa-book-dead{--fa: ""}.fa-id-card,.fa-drivers-license{--fa: ""}.fa-outdent,.fa-dedent{--fa: ""}.fa-heart-circle-exclamation{--fa: ""}.fa-house,.fa-home,.fa-home-alt,.fa-home-lg-alt{--fa: ""}.fa-calendar-week{--fa: ""}.fa-laptop-medical{--fa: ""}.fa-b{--fa: "B"}.fa-file-medical{--fa: ""}.fa-dice-one{--fa: ""}.fa-kiwi-bird{--fa: ""}.fa-arrow-right-arrow-left,.fa-exchange{--fa: ""}.fa-rotate-right,.fa-redo-alt,.fa-rotate-forward{--fa: ""}.fa-utensils,.fa-cutlery{--fa: ""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa: ""}.fa-mill-sign{--fa: ""}.fa-bowl-rice{--fa: ""}.fa-skull{--fa: ""}.fa-tower-broadcast,.fa-broadcast-tower{--fa: ""}.fa-truck-pickup{--fa: ""}.fa-up-long,.fa-long-arrow-alt-up{--fa: ""}.fa-stop{--fa: ""}.fa-code-merge{--fa: ""}.fa-upload{--fa: ""}.fa-hurricane{--fa: ""}.fa-mound{--fa: ""}.fa-toilet-portable{--fa: ""}.fa-compact-disc{--fa: ""}.fa-file-arrow-down,.fa-file-download{--fa: ""}.fa-caravan{--fa: ""}.fa-shield-cat{--fa: ""}.fa-bolt,.fa-zap{--fa: ""}.fa-glass-water{--fa: ""}.fa-oil-well{--fa: ""}.fa-vault{--fa: ""}.fa-mars{--fa: ""}.fa-toilet{--fa: ""}.fa-plane-circle-xmark{--fa: ""}.fa-yen-sign,.fa-cny,.fa-jpy,.fa-rmb,.fa-yen{--fa: ""}.fa-ruble-sign,.fa-rouble,.fa-rub,.fa-ruble{--fa: ""}.fa-sun{--fa: ""}.fa-guitar{--fa: ""}.fa-face-laugh-wink,.fa-laugh-wink{--fa: ""}.fa-horse-head{--fa: ""}.fa-bore-hole{--fa: ""}.fa-industry{--fa: ""}.fa-circle-down,.fa-arrow-alt-circle-down{--fa: ""}.fa-arrows-turn-to-dots{--fa: ""}.fa-florin-sign{--fa: ""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa: ""}.fa-less-than{--fa: "<"}.fa-angle-down{--fa: ""}.fa-car-tunnel{--fa: ""}.fa-head-side-cough{--fa: ""}.fa-grip-lines{--fa: ""}.fa-thumbs-down{--fa: ""}.fa-user-lock{--fa: ""}.fa-arrow-right-long,.fa-long-arrow-right{--fa: ""}.fa-anchor-circle-xmark{--fa: ""}.fa-ellipsis,.fa-ellipsis-h{--fa: ""}.fa-chess-pawn{--fa: ""}.fa-kit-medical,.fa-first-aid{--fa: ""}.fa-person-through-window{--fa: ""}.fa-toolbox{--fa: ""}.fa-hands-holding-circle{--fa: ""}.fa-bug{--fa: ""}.fa-credit-card,.fa-credit-card-alt{--fa: ""}.fa-car,.fa-automobile{--fa: ""}.fa-hand-holding-hand{--fa: ""}.fa-book-open-reader,.fa-book-reader{--fa: ""}.fa-mountain-sun{--fa: ""}.fa-arrows-left-right-to-line{--fa: ""}.fa-dice-d20{--fa: ""}.fa-truck-droplet{--fa: ""}.fa-file-circle-xmark{--fa: ""}.fa-temperature-arrow-up,.fa-temperature-up{--fa: ""}.fa-medal{--fa: ""}.fa-bed{--fa: ""}.fa-square-h,.fa-h-square{--fa: ""}.fa-podcast{--fa: ""}.fa-temperature-full,.fa-temperature-4,.fa-thermometer-4,.fa-thermometer-full{--fa: ""}.fa-bell{--fa: ""}.fa-superscript{--fa: ""}.fa-plug-circle-xmark{--fa: ""}.fa-star-of-life{--fa: ""}.fa-phone-slash{--fa: ""}.fa-paint-roller{--fa: ""}.fa-handshake-angle,.fa-hands-helping{--fa: ""}.fa-location-dot,.fa-map-marker-alt{--fa: ""}.fa-file{--fa: ""}.fa-greater-than{--fa: ">"}.fa-person-swimming,.fa-swimmer{--fa: ""}.fa-arrow-down{--fa: ""}.fa-droplet,.fa-tint{--fa: ""}.fa-eraser{--fa: ""}.fa-earth-americas,.fa-earth,.fa-earth-america,.fa-globe-americas{--fa: ""}.fa-person-burst{--fa: ""}.fa-dove{--fa: ""}.fa-battery-empty,.fa-battery-0{--fa: ""}.fa-socks{--fa: ""}.fa-inbox{--fa: ""}.fa-section{--fa: ""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa: ""}.fa-envelope-open-text{--fa: ""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa: ""}.fa-wine-bottle{--fa: ""}.fa-chess-rook{--fa: ""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa: ""}.fa-dharmachakra{--fa: ""}.fa-hotdog{--fa: ""}.fa-person-walking-with-cane,.fa-blind{--fa: ""}.fa-drum{--fa: ""}.fa-ice-cream{--fa: ""}.fa-heart-circle-bolt{--fa: ""}.fa-fax{--fa: ""}.fa-paragraph{--fa: ""}.fa-check-to-slot,.fa-vote-yea{--fa: ""}.fa-star-half{--fa: ""}.fa-boxes-stacked,.fa-boxes,.fa-boxes-alt{--fa: ""}.fa-link,.fa-chain{--fa: ""}.fa-ear-listen,.fa-assistive-listening-systems{--fa: ""}.fa-tree-city{--fa: ""}.fa-play{--fa: ""}.fa-font{--fa: ""}.fa-table-cells-row-lock{--fa: ""}.fa-rupiah-sign{--fa: ""}.fa-magnifying-glass,.fa-search{--fa: ""}.fa-table-tennis-paddle-ball,.fa-ping-pong-paddle-ball,.fa-table-tennis{--fa: ""}.fa-person-dots-from-line,.fa-diagnoses{--fa: ""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa: ""}.fa-naira-sign{--fa: ""}.fa-cart-arrow-down{--fa: ""}.fa-walkie-talkie{--fa: ""}.fa-file-pen,.fa-file-edit{--fa: ""}.fa-receipt{--fa: ""}.fa-square-pen,.fa-pen-square,.fa-pencil-square{--fa: ""}.fa-suitcase-rolling{--fa: ""}.fa-person-circle-exclamation{--fa: ""}.fa-chevron-down{--fa: ""}.fa-battery-full,.fa-battery,.fa-battery-5{--fa: ""}.fa-skull-crossbones{--fa: ""}.fa-code-compare{--fa: ""}.fa-list-ul,.fa-list-dots{--fa: ""}.fa-school-lock{--fa: ""}.fa-tower-cell{--fa: ""}.fa-down-long,.fa-long-arrow-alt-down{--fa: ""}.fa-ranking-star{--fa: ""}.fa-chess-king{--fa: ""}.fa-person-harassing{--fa: ""}.fa-brazilian-real-sign{--fa: ""}.fa-landmark-dome,.fa-landmark-alt{--fa: ""}.fa-arrow-up{--fa: ""}.fa-tv,.fa-television,.fa-tv-alt{--fa: ""}.fa-shrimp{--fa: ""}.fa-list-check,.fa-tasks{--fa: ""}.fa-jug-detergent{--fa: ""}.fa-circle-user,.fa-user-circle{--fa: ""}.fa-user-shield{--fa: ""}.fa-wind{--fa: ""}.fa-car-burst,.fa-car-crash{--fa: ""}.fa-y{--fa: "Y"}.fa-person-snowboarding,.fa-snowboarding{--fa: ""}.fa-truck-fast,.fa-shipping-fast{--fa: ""}.fa-fish{--fa: ""}.fa-user-graduate{--fa: ""}.fa-circle-half-stroke,.fa-adjust{--fa: ""}.fa-clapperboard{--fa: ""}.fa-circle-radiation,.fa-radiation-alt{--fa: ""}.fa-baseball,.fa-baseball-ball{--fa: ""}.fa-jet-fighter-up{--fa: ""}.fa-diagram-project,.fa-project-diagram{--fa: ""}.fa-copy{--fa: ""}.fa-volume-xmark,.fa-volume-mute,.fa-volume-times{--fa: ""}.fa-hand-sparkles{--fa: ""}.fa-grip,.fa-grip-horizontal{--fa: ""}.fa-share-from-square,.fa-share-square{--fa: ""}.fa-child-combatant,.fa-child-rifle{--fa: ""}.fa-gun{--fa: ""}.fa-square-phone,.fa-phone-square{--fa: ""}.fa-plus,.fa-add{--fa: "+"}.fa-expand{--fa: ""}.fa-computer{--fa: ""}.fa-xmark,.fa-close,.fa-multiply,.fa-remove,.fa-times{--fa: ""}.fa-arrows-up-down-left-right,.fa-arrows{--fa: ""}.fa-chalkboard-user,.fa-chalkboard-teacher{--fa: ""}.fa-peso-sign{--fa: ""}.fa-building-shield{--fa: ""}.fa-baby{--fa: ""}.fa-users-line{--fa: ""}.fa-quote-left,.fa-quote-left-alt{--fa: ""}.fa-tractor{--fa: ""}.fa-trash-arrow-up,.fa-trash-restore{--fa: ""}.fa-arrow-down-up-lock{--fa: ""}.fa-lines-leaning{--fa: ""}.fa-ruler-combined{--fa: ""}.fa-copyright{--fa: ""}.fa-equals{--fa: "="}.fa-blender{--fa: ""}.fa-teeth{--fa: ""}.fa-shekel-sign,.fa-ils,.fa-shekel,.fa-sheqel,.fa-sheqel-sign{--fa: ""}.fa-map{--fa: ""}.fa-rocket{--fa: ""}.fa-photo-film,.fa-photo-video{--fa: ""}.fa-folder-minus{--fa: ""}.fa-hexagon-nodes-bolt{--fa: ""}.fa-store{--fa: ""}.fa-arrow-trend-up{--fa: ""}.fa-plug-circle-minus{--fa: ""}.fa-sign-hanging,.fa-sign{--fa: ""}.fa-bezier-curve{--fa: ""}.fa-bell-slash{--fa: ""}.fa-tablet,.fa-tablet-android{--fa: ""}.fa-school-flag{--fa: ""}.fa-fill{--fa: ""}.fa-angle-up{--fa: ""}.fa-drumstick-bite{--fa: ""}.fa-holly-berry{--fa: ""}.fa-chevron-left{--fa: ""}.fa-bacteria{--fa: ""}.fa-hand-lizard{--fa: ""}.fa-notdef{--fa: ""}.fa-disease{--fa: ""}.fa-briefcase-medical{--fa: ""}.fa-genderless{--fa: ""}.fa-chevron-right{--fa: ""}.fa-retweet{--fa: ""}.fa-car-rear,.fa-car-alt{--fa: ""}.fa-pump-soap{--fa: ""}.fa-video-slash{--fa: ""}.fa-battery-quarter,.fa-battery-2{--fa: ""}.fa-radio{--fa: ""}.fa-baby-carriage,.fa-carriage-baby{--fa: ""}.fa-traffic-light{--fa: ""}.fa-thermometer{--fa: ""}.fa-vr-cardboard{--fa: ""}.fa-hand-middle-finger{--fa: ""}.fa-percent,.fa-percentage{--fa: "%"}.fa-truck-moving{--fa: ""}.fa-glass-water-droplet{--fa: ""}.fa-display{--fa: ""}.fa-face-smile,.fa-smile{--fa: ""}.fa-thumbtack,.fa-thumb-tack{--fa: ""}.fa-trophy{--fa: ""}.fa-person-praying,.fa-pray{--fa: ""}.fa-hammer{--fa: ""}.fa-hand-peace{--fa: ""}.fa-rotate,.fa-sync-alt{--fa: ""}.fa-spinner{--fa: ""}.fa-robot{--fa: ""}.fa-peace{--fa: ""}.fa-gears,.fa-cogs{--fa: ""}.fa-warehouse{--fa: ""}.fa-arrow-up-right-dots{--fa: ""}.fa-splotch{--fa: ""}.fa-face-grin-hearts,.fa-grin-hearts{--fa: ""}.fa-dice-four{--fa: ""}.fa-sim-card{--fa: ""}.fa-transgender,.fa-transgender-alt{--fa: ""}.fa-mercury{--fa: ""}.fa-arrow-turn-down,.fa-level-down{--fa: ""}.fa-person-falling-burst{--fa: ""}.fa-award{--fa: ""}.fa-ticket-simple,.fa-ticket-alt{--fa: ""}.fa-building{--fa: ""}.fa-angles-left,.fa-angle-double-left{--fa: ""}.fa-qrcode{--fa: ""}.fa-clock-rotate-left,.fa-history{--fa: ""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa: ""}.fa-file-export,.fa-arrow-right-from-file{--fa: ""}.fa-shield,.fa-shield-blank{--fa: ""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa: ""}.fa-comment-nodes{--fa: ""}.fa-house-medical{--fa: ""}.fa-golf-ball-tee,.fa-golf-ball{--fa: ""}.fa-circle-chevron-left,.fa-chevron-circle-left{--fa: ""}.fa-house-chimney-window{--fa: ""}.fa-pen-nib{--fa: ""}.fa-tent-arrow-turn-left{--fa: ""}.fa-tents{--fa: ""}.fa-wand-magic,.fa-magic{--fa: ""}.fa-dog{--fa: ""}.fa-carrot{--fa: ""}.fa-moon{--fa: ""}.fa-wine-glass-empty,.fa-wine-glass-alt{--fa: ""}.fa-cheese{--fa: ""}.fa-yin-yang{--fa: ""}.fa-music{--fa: ""}.fa-code-commit{--fa: ""}.fa-temperature-low{--fa: ""}.fa-person-biking,.fa-biking{--fa: ""}.fa-broom{--fa: ""}.fa-shield-heart{--fa: ""}.fa-gopuram{--fa: ""}.fa-earth-oceania,.fa-globe-oceania{--fa: ""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa: ""}.fa-hashtag{--fa: "#"}.fa-up-right-and-down-left-from-center,.fa-expand-alt{--fa: ""}.fa-oil-can{--fa: ""}.fa-t{--fa: "T"}.fa-hippo{--fa: ""}.fa-chart-column{--fa: ""}.fa-infinity{--fa: ""}.fa-vial-circle-check{--fa: ""}.fa-person-arrow-down-to-line{--fa: ""}.fa-voicemail{--fa: ""}.fa-fan{--fa: ""}.fa-person-walking-luggage{--fa: ""}.fa-up-down,.fa-arrows-alt-v{--fa: ""}.fa-cloud-moon-rain{--fa: ""}.fa-calendar{--fa: ""}.fa-trailer{--fa: ""}.fa-bahai,.fa-haykal{--fa: ""}.fa-sd-card{--fa: ""}.fa-dragon{--fa: ""}.fa-shoe-prints{--fa: ""}.fa-circle-plus,.fa-plus-circle{--fa: ""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa: ""}.fa-hand-holding{--fa: ""}.fa-plug-circle-exclamation{--fa: ""}.fa-link-slash,.fa-chain-broken,.fa-chain-slash,.fa-unlink{--fa: ""}.fa-clone{--fa: ""}.fa-person-walking-arrow-loop-left{--fa: ""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa: ""}.fa-fire-flame-curved,.fa-fire-alt{--fa: ""}.fa-tornado{--fa: ""}.fa-file-circle-plus{--fa: ""}.fa-book-quran,.fa-quran{--fa: ""}.fa-anchor{--fa: ""}.fa-border-all{--fa: ""}.fa-face-angry,.fa-angry{--fa: ""}.fa-cookie-bite{--fa: ""}.fa-arrow-trend-down{--fa: ""}.fa-rss,.fa-feed{--fa: ""}.fa-draw-polygon{--fa: ""}.fa-scale-balanced,.fa-balance-scale{--fa: ""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa: ""}.fa-shower{--fa: ""}.fa-desktop,.fa-desktop-alt{--fa: ""}.fa-m{--fa: "M"}.fa-table-list,.fa-th-list{--fa: ""}.fa-comment-sms,.fa-sms{--fa: ""}.fa-book{--fa: ""}.fa-user-plus{--fa: ""}.fa-check{--fa: ""}.fa-battery-three-quarters,.fa-battery-4{--fa: ""}.fa-house-circle-check{--fa: ""}.fa-angle-left{--fa: ""}.fa-diagram-successor{--fa: ""}.fa-truck-arrow-right{--fa: ""}.fa-arrows-split-up-and-left{--fa: ""}.fa-hand-fist,.fa-fist-raised{--fa: ""}.fa-cloud-moon{--fa: ""}.fa-briefcase{--fa: ""}.fa-person-falling{--fa: ""}.fa-image-portrait,.fa-portrait{--fa: ""}.fa-user-tag{--fa: ""}.fa-rug{--fa: ""}.fa-earth-europe,.fa-globe-europe{--fa: ""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa: ""}.fa-rectangle-xmark,.fa-rectangle-times,.fa-times-rectangle,.fa-window-close{--fa: ""}.fa-baht-sign{--fa: ""}.fa-book-open{--fa: ""}.fa-book-journal-whills,.fa-journal-whills{--fa: ""}.fa-handcuffs{--fa: ""}.fa-triangle-exclamation,.fa-exclamation-triangle,.fa-warning{--fa: ""}.fa-database{--fa: ""}.fa-share,.fa-mail-forward{--fa: ""}.fa-bottle-droplet{--fa: ""}.fa-mask-face{--fa: ""}.fa-hill-rockslide{--fa: ""}.fa-right-left,.fa-exchange-alt{--fa: ""}.fa-paper-plane{--fa: ""}.fa-road-circle-exclamation{--fa: ""}.fa-dungeon{--fa: ""}.fa-align-right{--fa: ""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa: ""}.fa-life-ring{--fa: ""}.fa-hands,.fa-sign-language,.fa-signing{--fa: ""}.fa-calendar-day{--fa: ""}.fa-water-ladder,.fa-ladder-water,.fa-swimming-pool{--fa: ""}.fa-arrows-up-down,.fa-arrows-v{--fa: ""}.fa-face-grimace,.fa-grimace{--fa: ""}.fa-wheelchair-move,.fa-wheelchair-alt{--fa: ""}.fa-turn-down,.fa-level-down-alt{--fa: ""}.fa-person-walking-arrow-right{--fa: ""}.fa-square-envelope,.fa-envelope-square{--fa: ""}.fa-dice{--fa: ""}.fa-bowling-ball{--fa: ""}.fa-brain{--fa: ""}.fa-bandage,.fa-band-aid{--fa: ""}.fa-calendar-minus{--fa: ""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa: ""}.fa-gifts{--fa: ""}.fa-hotel{--fa: ""}.fa-earth-asia,.fa-globe-asia{--fa: ""}.fa-id-card-clip,.fa-id-card-alt{--fa: ""}.fa-magnifying-glass-plus,.fa-search-plus{--fa: ""}.fa-thumbs-up{--fa: ""}.fa-user-clock{--fa: ""}.fa-hand-dots,.fa-allergies{--fa: ""}.fa-file-invoice{--fa: ""}.fa-window-minimize{--fa: ""}.fa-mug-saucer,.fa-coffee{--fa: ""}.fa-brush{--fa: ""}.fa-file-half-dashed{--fa: ""}.fa-mask{--fa: ""}.fa-magnifying-glass-minus,.fa-search-minus{--fa: ""}.fa-ruler-vertical{--fa: ""}.fa-user-large,.fa-user-alt{--fa: ""}.fa-train-tram{--fa: ""}.fa-user-nurse{--fa: ""}.fa-syringe{--fa: ""}.fa-cloud-sun{--fa: ""}.fa-stopwatch-20{--fa: ""}.fa-square-full{--fa: ""}.fa-magnet{--fa: ""}.fa-jar{--fa: ""}.fa-note-sticky,.fa-sticky-note{--fa: ""}.fa-bug-slash{--fa: ""}.fa-arrow-up-from-water-pump{--fa: ""}.fa-bone{--fa: ""}.fa-table-cells-row-unlock{--fa: ""}.fa-user-injured{--fa: ""}.fa-face-sad-tear,.fa-sad-tear{--fa: ""}.fa-plane{--fa: ""}.fa-tent-arrows-down{--fa: ""}.fa-exclamation{--fa: "!"}.fa-arrows-spin{--fa: ""}.fa-print{--fa: ""}.fa-turkish-lira-sign,.fa-try,.fa-turkish-lira{--fa: ""}.fa-dollar-sign,.fa-dollar,.fa-usd{--fa: "$"}.fa-x{--fa: "X"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa: ""}.fa-users-gear,.fa-users-cog{--fa: ""}.fa-person-military-pointing{--fa: ""}.fa-building-columns,.fa-bank,.fa-institution,.fa-museum,.fa-university{--fa: ""}.fa-umbrella{--fa: ""}.fa-trowel{--fa: ""}.fa-d{--fa: "D"}.fa-stapler{--fa: ""}.fa-masks-theater,.fa-theater-masks{--fa: ""}.fa-kip-sign{--fa: ""}.fa-hand-point-left{--fa: ""}.fa-handshake-simple,.fa-handshake-alt{--fa: ""}.fa-jet-fighter,.fa-fighter-jet{--fa: ""}.fa-square-share-nodes,.fa-share-alt-square{--fa: ""}.fa-barcode{--fa: ""}.fa-plus-minus{--fa: ""}.fa-video,.fa-video-camera{--fa: ""}.fa-graduation-cap,.fa-mortar-board{--fa: ""}.fa-hand-holding-medical{--fa: ""}.fa-person-circle-check{--fa: ""}.fa-turn-up,.fa-level-up-alt{--fa: ""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero{--fa: ""}.fa-hooli{--fa: ""}.fa-yelp{--fa: ""}.fa-cc-visa{--fa: ""}.fa-lastfm{--fa: ""}.fa-shopware{--fa: ""}.fa-creative-commons-nc{--fa: ""}.fa-aws{--fa: ""}.fa-redhat{--fa: ""}.fa-yoast{--fa: ""}.fa-cloudflare{--fa: ""}.fa-ups{--fa: ""}.fa-pixiv{--fa: ""}.fa-wpexplorer{--fa: ""}.fa-dyalog{--fa: ""}.fa-bity{--fa: ""}.fa-stackpath{--fa: ""}.fa-buysellads{--fa: ""}.fa-first-order{--fa: ""}.fa-modx{--fa: ""}.fa-guilded{--fa: ""}.fa-vnv{--fa: ""}.fa-square-js,.fa-js-square{--fa: ""}.fa-microsoft{--fa: ""}.fa-qq{--fa: ""}.fa-orcid{--fa: ""}.fa-java{--fa: ""}.fa-invision{--fa: ""}.fa-creative-commons-pd-alt{--fa: ""}.fa-centercode{--fa: ""}.fa-glide-g{--fa: ""}.fa-drupal{--fa: ""}.fa-jxl{--fa: ""}.fa-dart-lang{--fa: ""}.fa-hire-a-helper{--fa: ""}.fa-creative-commons-by{--fa: ""}.fa-unity{--fa: ""}.fa-whmcs{--fa: ""}.fa-rocketchat{--fa: ""}.fa-vk{--fa: ""}.fa-untappd{--fa: ""}.fa-mailchimp{--fa: ""}.fa-css3-alt{--fa: ""}.fa-square-reddit,.fa-reddit-square{--fa: ""}.fa-vimeo-v{--fa: ""}.fa-contao{--fa: ""}.fa-square-font-awesome{--fa: ""}.fa-deskpro{--fa: ""}.fa-brave{--fa: ""}.fa-sistrix{--fa: ""}.fa-square-instagram,.fa-instagram-square{--fa: ""}.fa-battle-net{--fa: ""}.fa-the-red-yeti{--fa: ""}.fa-square-hacker-news,.fa-hacker-news-square{--fa: ""}.fa-edge{--fa: ""}.fa-threads{--fa: ""}.fa-napster{--fa: ""}.fa-square-snapchat,.fa-snapchat-square{--fa: ""}.fa-google-plus-g{--fa: ""}.fa-artstation{--fa: ""}.fa-markdown{--fa: ""}.fa-sourcetree{--fa: ""}.fa-google-plus{--fa: ""}.fa-diaspora{--fa: ""}.fa-foursquare{--fa: ""}.fa-stack-overflow{--fa: ""}.fa-github-alt{--fa: ""}.fa-phoenix-squadron{--fa: ""}.fa-pagelines{--fa: ""}.fa-algolia{--fa: ""}.fa-red-river{--fa: ""}.fa-creative-commons-sa{--fa: ""}.fa-safari{--fa: ""}.fa-google{--fa: ""}.fa-square-font-awesome-stroke,.fa-font-awesome-alt{--fa: ""}.fa-atlassian{--fa: ""}.fa-linkedin-in{--fa: ""}.fa-digital-ocean{--fa: ""}.fa-nimblr{--fa: ""}.fa-chromecast{--fa: ""}.fa-evernote{--fa: ""}.fa-hacker-news{--fa: ""}.fa-creative-commons-sampling{--fa: ""}.fa-adversal{--fa: ""}.fa-creative-commons{--fa: ""}.fa-watchman-monitoring{--fa: ""}.fa-fonticons{--fa: ""}.fa-weixin{--fa: ""}.fa-shirtsinbulk{--fa: ""}.fa-codepen{--fa: ""}.fa-git-alt{--fa: ""}.fa-lyft{--fa: ""}.fa-rev{--fa: ""}.fa-windows{--fa: ""}.fa-wizards-of-the-coast{--fa: ""}.fa-square-viadeo,.fa-viadeo-square{--fa: ""}.fa-meetup{--fa: ""}.fa-centos{--fa: ""}.fa-adn{--fa: ""}.fa-cloudsmith{--fa: ""}.fa-opensuse{--fa: ""}.fa-pied-piper-alt{--fa: ""}.fa-square-dribbble,.fa-dribbble-square{--fa: ""}.fa-codiepie{--fa: ""}.fa-node{--fa: ""}.fa-mix{--fa: ""}.fa-steam{--fa: ""}.fa-cc-apple-pay{--fa: ""}.fa-scribd{--fa: ""}.fa-debian{--fa: ""}.fa-openid{--fa: ""}.fa-instalod{--fa: ""}.fa-files-pinwheel{--fa: ""}.fa-expeditedssl{--fa: ""}.fa-sellcast{--fa: ""}.fa-square-twitter,.fa-twitter-square{--fa: ""}.fa-r-project{--fa: ""}.fa-delicious{--fa: ""}.fa-freebsd{--fa: ""}.fa-vuejs{--fa: ""}.fa-accusoft{--fa: ""}.fa-ioxhost{--fa: ""}.fa-fonticons-fi{--fa: ""}.fa-app-store{--fa: ""}.fa-cc-mastercard{--fa: ""}.fa-itunes-note{--fa: ""}.fa-golang{--fa: ""}.fa-kickstarter,.fa-square-kickstarter{--fa: ""}.fa-grav{--fa: ""}.fa-weibo{--fa: ""}.fa-uncharted{--fa: ""}.fa-firstdraft{--fa: ""}.fa-square-youtube,.fa-youtube-square{--fa: ""}.fa-wikipedia-w{--fa: ""}.fa-wpressr,.fa-rendact{--fa: ""}.fa-angellist{--fa: ""}.fa-galactic-republic{--fa: ""}.fa-nfc-directional{--fa: ""}.fa-skype{--fa: ""}.fa-joget{--fa: ""}.fa-fedora{--fa: ""}.fa-stripe-s{--fa: ""}.fa-meta{--fa: ""}.fa-laravel{--fa: ""}.fa-hotjar{--fa: ""}.fa-bluetooth-b{--fa: ""}.fa-square-letterboxd{--fa: ""}.fa-sticker-mule{--fa: ""}.fa-creative-commons-zero{--fa: ""}.fa-hips{--fa: ""}.fa-css{--fa: ""}.fa-behance{--fa: ""}.fa-reddit{--fa: ""}.fa-discord{--fa: ""}.fa-chrome{--fa: ""}.fa-app-store-ios{--fa: ""}.fa-cc-discover{--fa: ""}.fa-wpbeginner{--fa: ""}.fa-confluence{--fa: ""}.fa-shoelace{--fa: ""}.fa-mdb{--fa: ""}.fa-dochub{--fa: ""}.fa-accessible-icon{--fa: ""}.fa-ebay{--fa: ""}.fa-amazon{--fa: ""}.fa-unsplash{--fa: ""}.fa-yarn{--fa: ""}.fa-square-steam,.fa-steam-square{--fa: ""}.fa-500px{--fa: ""}.fa-square-vimeo,.fa-vimeo-square{--fa: ""}.fa-asymmetrik{--fa: ""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa: ""}.fa-gratipay{--fa: ""}.fa-apple{--fa: ""}.fa-hive{--fa: ""}.fa-gitkraken{--fa: ""}.fa-keybase{--fa: ""}.fa-apple-pay{--fa: ""}.fa-padlet{--fa: ""}.fa-amazon-pay{--fa: ""}.fa-square-github,.fa-github-square{--fa: ""}.fa-stumbleupon{--fa: ""}.fa-fedex{--fa: ""}.fa-phoenix-framework{--fa: ""}.fa-shopify{--fa: ""}.fa-neos{--fa: ""}.fa-square-threads{--fa: ""}.fa-hackerrank{--fa: ""}.fa-researchgate{--fa: ""}.fa-swift{--fa: ""}.fa-angular{--fa: ""}.fa-speakap{--fa: ""}.fa-angrycreative{--fa: ""}.fa-y-combinator{--fa: ""}.fa-empire{--fa: ""}.fa-envira{--fa: ""}.fa-google-scholar{--fa: ""}.fa-square-gitlab,.fa-gitlab-square{--fa: ""}.fa-studiovinari{--fa: ""}.fa-pied-piper{--fa: ""}.fa-wordpress{--fa: ""}.fa-product-hunt{--fa: ""}.fa-firefox{--fa: ""}.fa-linode{--fa: ""}.fa-goodreads{--fa: ""}.fa-square-odnoklassniki,.fa-odnoklassniki-square{--fa: ""}.fa-jsfiddle{--fa: ""}.fa-sith{--fa: ""}.fa-themeisle{--fa: ""}.fa-page4{--fa: ""}.fa-hashnode{--fa: ""}.fa-react{--fa: ""}.fa-cc-paypal{--fa: ""}.fa-squarespace{--fa: ""}.fa-cc-stripe{--fa: ""}.fa-creative-commons-share{--fa: ""}.fa-bitcoin{--fa: ""}.fa-keycdn{--fa: ""}.fa-opera{--fa: ""}.fa-itch-io{--fa: ""}.fa-umbraco{--fa: ""}.fa-galactic-senate{--fa: ""}.fa-ubuntu{--fa: ""}.fa-draft2digital{--fa: ""}.fa-stripe{--fa: ""}.fa-houzz{--fa: ""}.fa-gg{--fa: ""}.fa-dhl{--fa: ""}.fa-square-pinterest,.fa-pinterest-square{--fa: ""}.fa-xing{--fa: ""}.fa-blackberry{--fa: ""}.fa-creative-commons-pd{--fa: ""}.fa-playstation{--fa: ""}.fa-quinscape{--fa: ""}.fa-less{--fa: ""}.fa-blogger-b{--fa: ""}.fa-opencart{--fa: ""}.fa-vine{--fa: ""}.fa-signal-messenger{--fa: ""}.fa-paypal{--fa: ""}.fa-gitlab{--fa: ""}.fa-typo3{--fa: ""}.fa-reddit-alien{--fa: ""}.fa-yahoo{--fa: ""}.fa-dailymotion{--fa: ""}.fa-affiliatetheme{--fa: ""}.fa-pied-piper-pp{--fa: ""}.fa-bootstrap{--fa: ""}.fa-odnoklassniki{--fa: ""}.fa-nfc-symbol{--fa: ""}.fa-mintbit{--fa: ""}.fa-ethereum{--fa: ""}.fa-speaker-deck{--fa: ""}.fa-creative-commons-nc-eu{--fa: ""}.fa-patreon{--fa: ""}.fa-avianex{--fa: ""}.fa-ello{--fa: ""}.fa-gofore{--fa: ""}.fa-bimobject{--fa: ""}.fa-brave-reverse{--fa: ""}.fa-facebook-f{--fa: ""}.fa-square-google-plus,.fa-google-plus-square{--fa: ""}.fa-web-awesome{--fa: ""}.fa-mandalorian{--fa: ""}.fa-first-order-alt{--fa: ""}.fa-osi{--fa: ""}.fa-google-wallet{--fa: ""}.fa-d-and-d-beyond{--fa: ""}.fa-periscope{--fa: ""}.fa-fulcrum{--fa: ""}.fa-cloudscale{--fa: ""}.fa-forumbee{--fa: ""}.fa-mizuni{--fa: ""}.fa-schlix{--fa: ""}.fa-square-xing,.fa-xing-square{--fa: ""}.fa-bandcamp{--fa: ""}.fa-wpforms{--fa: ""}.fa-cloudversify{--fa: ""}.fa-usps{--fa: ""}.fa-megaport{--fa: ""}.fa-magento{--fa: ""}.fa-spotify{--fa: ""}.fa-optin-monster{--fa: ""}.fa-fly{--fa: ""}.fa-square-bluesky{--fa: ""}.fa-aviato{--fa: ""}.fa-itunes{--fa: ""}.fa-cuttlefish{--fa: ""}.fa-blogger{--fa: ""}.fa-flickr{--fa: ""}.fa-viber{--fa: ""}.fa-soundcloud{--fa: ""}.fa-digg{--fa: ""}.fa-tencent-weibo{--fa: ""}.fa-letterboxd{--fa: ""}.fa-symfony{--fa: ""}.fa-maxcdn{--fa: ""}.fa-etsy{--fa: ""}.fa-facebook-messenger{--fa: ""}.fa-audible{--fa: ""}.fa-think-peaks{--fa: ""}.fa-bilibili{--fa: ""}.fa-erlang{--fa: ""}.fa-x-twitter{--fa: ""}.fa-cotton-bureau{--fa: ""}.fa-dashcube{--fa: ""}.fa-42-group,.fa-innosoft{--fa: ""}.fa-stack-exchange{--fa: ""}.fa-elementor{--fa: ""}.fa-square-pied-piper,.fa-pied-piper-square{--fa: ""}.fa-creative-commons-nd{--fa: ""}.fa-palfed{--fa: ""}.fa-superpowers{--fa: ""}.fa-resolving{--fa: ""}.fa-xbox{--fa: ""}.fa-square-web-awesome-stroke{--fa: ""}.fa-searchengin{--fa: ""}.fa-tiktok{--fa: ""}.fa-square-facebook,.fa-facebook-square{--fa: ""}.fa-renren{--fa: ""}.fa-linux{--fa: ""}.fa-glide{--fa: ""}.fa-linkedin{--fa: ""}.fa-hubspot{--fa: ""}.fa-deploydog{--fa: ""}.fa-twitch{--fa: ""}.fa-flutter{--fa: ""}.fa-ravelry{--fa: ""}.fa-mixer{--fa: ""}.fa-square-lastfm,.fa-lastfm-square{--fa: ""}.fa-vimeo{--fa: ""}.fa-mendeley{--fa: ""}.fa-uniregistry{--fa: ""}.fa-figma{--fa: ""}.fa-creative-commons-remix{--fa: ""}.fa-cc-amazon-pay{--fa: ""}.fa-dropbox{--fa: ""}.fa-instagram{--fa: ""}.fa-cmplid{--fa: ""}.fa-upwork{--fa: ""}.fa-facebook{--fa: ""}.fa-gripfire{--fa: ""}.fa-jedi-order{--fa: ""}.fa-uikit{--fa: ""}.fa-fort-awesome-alt{--fa: ""}.fa-phabricator{--fa: ""}.fa-ussunnah{--fa: ""}.fa-earlybirds{--fa: ""}.fa-trade-federation{--fa: ""}.fa-autoprefixer{--fa: ""}.fa-whatsapp{--fa: ""}.fa-square-upwork{--fa: ""}.fa-slideshare{--fa: ""}.fa-google-play{--fa: ""}.fa-viadeo{--fa: ""}.fa-line{--fa: ""}.fa-google-drive{--fa: ""}.fa-servicestack{--fa: ""}.fa-simplybuilt{--fa: ""}.fa-bitbucket{--fa: ""}.fa-imdb{--fa: ""}.fa-deezer{--fa: ""}.fa-raspberry-pi{--fa: ""}.fa-jira{--fa: ""}.fa-docker{--fa: ""}.fa-screenpal{--fa: ""}.fa-bluetooth{--fa: ""}.fa-gitter{--fa: ""}.fa-d-and-d{--fa: ""}.fa-microblog{--fa: ""}.fa-cc-diners-club{--fa: ""}.fa-gg-circle{--fa: ""}.fa-pied-piper-hat{--fa: ""}.fa-kickstarter-k{--fa: ""}.fa-yandex{--fa: ""}.fa-readme{--fa: ""}.fa-html5{--fa: ""}.fa-sellsy{--fa: ""}.fa-square-web-awesome{--fa: ""}.fa-sass{--fa: ""}.fa-wirsindhandwerk,.fa-wsh{--fa: ""}.fa-buromobelexperte{--fa: ""}.fa-salesforce{--fa: ""}.fa-octopus-deploy{--fa: ""}.fa-medapps{--fa: ""}.fa-ns8{--fa: ""}.fa-pinterest-p{--fa: ""}.fa-apper{--fa: ""}.fa-fort-awesome{--fa: ""}.fa-waze{--fa: ""}.fa-bluesky{--fa: ""}.fa-cc-jcb{--fa: ""}.fa-snapchat,.fa-snapchat-ghost{--fa: ""}.fa-fantasy-flight-games{--fa: ""}.fa-rust{--fa: ""}.fa-wix{--fa: ""}.fa-square-behance,.fa-behance-square{--fa: ""}.fa-supple{--fa: ""}.fa-webflow{--fa: ""}.fa-rebel{--fa: ""}.fa-css3{--fa: ""}.fa-staylinked{--fa: ""}.fa-kaggle{--fa: ""}.fa-space-awesome{--fa: ""}.fa-deviantart{--fa: ""}.fa-cpanel{--fa: ""}.fa-goodreads-g{--fa: ""}.fa-square-git,.fa-git-square{--fa: ""}.fa-square-tumblr,.fa-tumblr-square{--fa: ""}.fa-trello{--fa: ""}.fa-creative-commons-nc-jp{--fa: ""}.fa-get-pocket{--fa: ""}.fa-perbyte{--fa: ""}.fa-grunt{--fa: ""}.fa-weebly{--fa: ""}.fa-connectdevelop{--fa: ""}.fa-leanpub{--fa: ""}.fa-black-tie{--fa: ""}.fa-themeco{--fa: ""}.fa-python{--fa: ""}.fa-android{--fa: ""}.fa-bots{--fa: ""}.fa-free-code-camp{--fa: ""}.fa-hornbill{--fa: ""}.fa-js{--fa: ""}.fa-ideal{--fa: ""}.fa-git{--fa: ""}.fa-dev{--fa: ""}.fa-sketch{--fa: ""}.fa-yandex-international{--fa: ""}.fa-cc-amex{--fa: ""}.fa-uber{--fa: ""}.fa-github{--fa: ""}.fa-php{--fa: ""}.fa-alipay{--fa: ""}.fa-youtube{--fa: ""}.fa-skyatlas{--fa: ""}.fa-firefox-browser{--fa: ""}.fa-replyd{--fa: ""}.fa-suse{--fa: ""}.fa-jenkins{--fa: ""}.fa-twitter{--fa: ""}.fa-rockrms{--fa: ""}.fa-pinterest{--fa: ""}.fa-buffer{--fa: ""}.fa-npm{--fa: ""}.fa-yammer{--fa: ""}.fa-btc{--fa: ""}.fa-dribbble{--fa: ""}.fa-stumbleupon-circle{--fa: ""}.fa-internet-explorer{--fa: ""}.fa-stubber{--fa: ""}.fa-telegram,.fa-telegram-plane{--fa: ""}.fa-old-republic{--fa: ""}.fa-odysee{--fa: ""}.fa-square-whatsapp,.fa-whatsapp-square{--fa: ""}.fa-node-js{--fa: ""}.fa-edge-legacy{--fa: ""}.fa-slack,.fa-slack-hash{--fa: ""}.fa-medrt{--fa: ""}.fa-usb{--fa: ""}.fa-tumblr{--fa: ""}.fa-vaadin{--fa: ""}.fa-quora{--fa: ""}.fa-square-x-twitter{--fa: ""}.fa-reacteurope{--fa: ""}.fa-medium,.fa-medium-m{--fa: ""}.fa-amilia{--fa: ""}.fa-mixcloud{--fa: ""}.fa-flipboard{--fa: ""}.fa-viacoin{--fa: ""}.fa-critical-role{--fa: ""}.fa-sitrox{--fa: ""}.fa-discourse{--fa: ""}.fa-joomla{--fa: ""}.fa-mastodon{--fa: ""}.fa-airbnb{--fa: ""}.fa-wolf-pack-battalion{--fa: ""}.fa-buy-n-large{--fa: ""}.fa-gulp{--fa: ""}.fa-creative-commons-sampling-plus{--fa: ""}.fa-strava{--fa: ""}.fa-ember{--fa: ""}.fa-canadian-maple-leaf{--fa: ""}.fa-teamspeak{--fa: ""}.fa-pushed{--fa: ""}.fa-wordpress-simple{--fa: ""}.fa-nutritionix{--fa: ""}.fa-wodu{--fa: ""}.fa-google-pay{--fa: ""}.fa-intercom{--fa: ""}.fa-zhihu{--fa: ""}.fa-korvue{--fa: ""}.fa-pix{--fa: ""}.fa-steam-symbol{--fa: ""}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}.far,.fa-regular{font-weight:400}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype");unicode-range:U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-v4compatibility-C9RhG_FT.woff2) format("woff2"),url(/admin-next/assets/fa-v4compatibility-CCth-dXg.ttf) format("truetype");unicode-range:U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 50%,var(--accent-color) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden}body,div,button,input,select,textarea,table,tr,td,th,span,p,h1,h2,h3,h4,h5,h6{transition:all .3s cubic-bezier(.4,0,.2,1)}.el-button--primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:transparent}.el-button--primary:hover,.el-button--primary:focus{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);opacity:.9}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:shadow-sm:after{content:var(--tw-content);--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:transition-transform:after{content:var(--tw-content);transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:duration-200:after{content:var(--tw-content);transition-duration:.2s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-amber-400:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.hover\:border-blue-300:hover{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.hover\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.hover\:border-cyan-300:hover{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.hover\:border-cyan-400:hover{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.hover\:border-emerald-300:hover{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.hover\:border-emerald-400:hover{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-indigo-300:hover{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.hover\:border-indigo-400:hover{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.hover\:border-orange-400:hover{--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.hover\:border-purple-300:hover{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.hover\:border-purple-400:hover{--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.hover\:border-red-300:hover{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.hover\:border-rose-300:hover{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.hover\:border-rose-400:hover{--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.hover\:border-teal-400:hover{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-200:hover{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-50\/50:hover{background-color:#fffbeb80}.hover\:bg-amber-700:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}.hover\:bg-blue-50\/60:hover{background-color:#eff6ff99}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-100:hover{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50:hover{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50\/50:hover{background-color:#ecfeff80}.hover\:bg-emerald-200:hover{--tw-bg-opacity: 1;background-color:rgb(167 243 208 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-50\/50:hover{background-color:#ecfdf580}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-green-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-200:hover{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}.hover\:bg-indigo-700:hover{--tw-bg-opacity: 1;background-color:rgb(67 56 202 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-100:hover{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50:hover{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}.hover\:bg-pink-200:hover{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-200:hover{--tw-bg-opacity: 1;background-color:rgb(233 213 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-50\/50:hover{background-color:#fff1f280}.hover\:bg-teal-200:hover{--tw-bg-opacity: 1;background-color:rgb(153 246 228 / var(--tw-bg-opacity, 1))}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/50:hover{background-color:#ffffff80}.hover\:bg-yellow-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 240 138 / var(--tw-bg-opacity, 1))}.hover\:from-blue-600:hover{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-blue-700:hover{--tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-green-600:hover{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-600:hover{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-700:hover{--tw-gradient-from: #b91c1c var(--tw-gradient-from-position);--tw-gradient-to: rgb(185 28 28 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-yellow-600:hover{--tw-gradient-from: #ca8a04 var(--tw-gradient-from-position);--tw-gradient-to: rgb(202 138 4 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-700:hover{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.hover\:to-blue-800:hover{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.hover\:to-green-700:hover{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.hover\:to-indigo-600:hover{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.hover\:to-indigo-700:hover{--tw-gradient-to: #4338ca var(--tw-gradient-to-position)}.hover\:to-orange-600:hover{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.hover\:to-red-700:hover{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.hover\:to-red-800:hover{--tw-gradient-to: #991b1b var(--tw-gradient-to-position)}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-cyan-700:hover{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-green-900:hover{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity, 1))}.hover\:text-orange-700:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.hover\:text-orange-900:hover{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.hover\:text-purple-700:hover{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.hover\:text-purple-900:hover{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-red-900:hover{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-yellow-700:hover{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow:hover{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.focus\:border-green-500:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.focus\:border-indigo-400:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.focus\:border-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.focus\:border-teal-500:focus{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500\/20:focus{--tw-ring-color: rgb(59 130 246 / .2)}.focus\:ring-cyan-500\/20:focus{--tw-ring-color: rgb(6 182 212 / .2)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-green-500\/20:focus{--tw-ring-color: rgb(34 197 94 / .2)}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(233 213 255 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-500\/20:focus{--tw-ring-color: rgb(168 85 247 / .2)}.focus\:ring-red-500\/20:focus{--tw-ring-color: rgb(239 68 68 / .2)}.focus\:ring-teal-500\/20:focus{--tw-ring-color: rgb(20 184 166 / .2)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-purple-500\/60:focus-visible{--tw-ring-color: rgb(168 85 247 / .6)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:from-gray-400:disabled{--tw-gradient-from: #9ca3af var(--tw-gradient-from-position);--tw-gradient-to: rgb(156 163 175 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.disabled\:to-gray-500:disabled{--tw-gradient-to: #6b7280 var(--tw-gradient-to-position)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:shadow-sm:hover:disabled{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-20{opacity:.2}.group:hover .group-hover\:opacity-30{opacity:.3}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(139\,92\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(139,92,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(148\,163\,184\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(148,163,184,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(16\,185\,129\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(16,185,129,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(56\,189\,248\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(56,189,248,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(59\,130\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(59,130,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-4:after{content:var(--tw-content);--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus~.peer-focus\:ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-blue-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-orange-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(253 186 116 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-purple-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-teal-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(94 234 212 / var(--tw-ring-opacity, 1))}.dark\:divide-gray-600:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(75 85 99 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-600\/50:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#4b556380}.dark\:divide-gray-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-800:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.dark\:border:is(.dark *){border-width:1px}.dark\:border-amber-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.dark\:border-amber-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-amber-500\/20:is(.dark *){border-color:#f59e0b33}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:border-blue-500\/20:is(.dark *){border-color:#3b82f633}.dark\:border-blue-500\/30:is(.dark *){border-color:#3b82f64d}.dark\:border-blue-500\/40:is(.dark *){border-color:#3b82f666}.dark\:border-blue-500\/50:is(.dark *){border-color:#3b82f680}.dark\:border-blue-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-cyan-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:border-cyan-500\/40:is(.dark *){border-color:#06b6d466}.dark\:border-cyan-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(8 145 178 / var(--tw-border-opacity, 1))}.dark\:border-cyan-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(14 116 144 / var(--tw-border-opacity, 1))}.dark\:border-emerald-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.dark\:border-emerald-500\/20:is(.dark *){border-color:#10b98133}.dark\:border-emerald-500\/40:is(.dark *){border-color:#10b98166}.dark\:border-gray-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-600\/30:is(.dark *){border-color:#4b55634d}.dark\:border-gray-600\/50:is(.dark *){border-color:#4b556380}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/50:is(.dark *){border-color:#37415180}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-gray-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-green-500\/30:is(.dark *){border-color:#22c55e4d}.dark\:border-green-500\/40:is(.dark *){border-color:#22c55e66}.dark\:border-green-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-indigo-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.dark\:border-indigo-500\/40:is(.dark *){border-color:#6366f166}.dark\:border-indigo-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(67 56 202 / var(--tw-border-opacity, 1))}.dark\:border-orange-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.dark\:border-orange-500\/40:is(.dark *){border-color:#f9731666}.dark\:border-orange-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(234 88 12 / var(--tw-border-opacity, 1))}.dark\:border-orange-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(194 65 12 / var(--tw-border-opacity, 1))}.dark\:border-purple-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:border-purple-500\/40:is(.dark *){border-color:#a855f766}.dark\:border-purple-600\/60:is(.dark *){border-color:#9333ea99}.dark\:border-purple-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.dark\:border-purple-700\/70:is(.dark *){border-color:#7e22ceb3}.dark\:border-red-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.dark\:border-red-500\/20:is(.dark *){border-color:#ef444433}.dark\:border-red-500\/30:is(.dark *){border-color:#ef44444d}.dark\:border-red-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/60:is(.dark *){border-color:#7f1d1d99}.dark\:border-rose-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.dark\:border-rose-500\/40:is(.dark *){border-color:#f43f5e66}.dark\:border-sky-500\/40:is(.dark *){border-color:#0ea5e966}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-slate-700\/60:is(.dark *){border-color:#33415599}.dark\:border-teal-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.dark\:border-teal-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(15 118 110 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/40:is(.dark *){border-color:#8b5cf666}.dark\:border-white\/10:is(.dark *){border-color:#ffffff1a}.dark\:border-yellow-500\/40:is(.dark *){border-color:#eab30866}.dark\:border-yellow-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(161 98 7 / var(--tw-border-opacity, 1))}.dark\:bg-amber-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-amber-900\/40:is(.dark *){background-color:#78350f66}.dark\:bg-blue-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/20:is(.dark *){background-color:#3b82f633}.dark\:bg-blue-500\/30:is(.dark *){background-color:#3b82f64d}.dark\:bg-blue-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-blue-900\/50:is(.dark *){background-color:#1e3a8a80}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-blue-950\/40:is(.dark *){background-color:#17255466}.dark\:bg-cyan-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-900\/30:is(.dark *){background-color:#164e634d}.dark\:bg-cyan-900\/40:is(.dark *){background-color:#164e6366}.dark\:bg-emerald-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-500\/20:is(.dark *){background-color:#10b98133}.dark\:bg-emerald-900\/20:is(.dark *){background-color:#064e3b33}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#064e3b4d}.dark\:bg-emerald-900\/40:is(.dark *){background-color:#064e3b66}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#022c2266}.dark\:bg-gray-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600\/50:is(.dark *){background-color:#4b556380}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700\/30:is(.dark *){background-color:#3741514d}.dark\:bg-gray-700\/50:is(.dark *){background-color:#37415180}.dark\:bg-gray-700\/60:is(.dark *){background-color:#37415199}.dark\:bg-gray-700\/70:is(.dark *){background-color:#374151b3}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/20:is(.dark *){background-color:#1f293733}.dark\:bg-gray-800\/40:is(.dark *){background-color:#1f293766}.dark\:bg-gray-800\/50:is(.dark *){background-color:#1f293780}.dark\:bg-gray-800\/60:is(.dark *){background-color:#1f293799}.dark\:bg-gray-800\/80:is(.dark *){background-color:#1f2937cc}.dark\:bg-gray-800\/90:is(.dark *){background-color:#1f2937e6}.dark\:bg-gray-800\/95:is(.dark *){background-color:#1f2937f2}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/50:is(.dark *){background-color:#11182780}.dark\:bg-gray-900\/70:is(.dark *){background-color:#111827b3}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-gray-900\/95:is(.dark *){background-color:#111827f2}.dark\:bg-green-500\/30:is(.dark *){background-color:#22c55e4d}.dark\:bg-green-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-green-900\/50:is(.dark *){background-color:#14532d80}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-indigo-500\/20:is(.dark *){background-color:#6366f133}.dark\:bg-indigo-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.dark\:bg-indigo-900\/20:is(.dark *){background-color:#312e8133}.dark\:bg-indigo-900\/30:is(.dark *){background-color:#312e814d}.dark\:bg-indigo-950\/30:is(.dark *){background-color:#1e1b4b4d}.dark\:bg-orange-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity, 1))}.dark\:bg-orange-900\/30:is(.dark *){background-color:#7c2d124d}.dark\:bg-orange-950\/30:is(.dark *){background-color:#4314074d}.dark\:bg-pink-900\/30:is(.dark *){background-color:#8318434d}.dark\:bg-purple-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500\/10:is(.dark *){background-color:#a855f71a}.dark\:bg-purple-500\/20:is(.dark *){background-color:#a855f733}.dark\:bg-purple-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-800\/20:is(.dark *){background-color:#6b21a833}.dark\:bg-purple-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-purple-950\/20:is(.dark *){background-color:#3b076433}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-500\/30:is(.dark *){background-color:#ef44444d}.dark\:bg-red-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-red-900\/40:is(.dark *){background-color:#7f1d1d66}.dark\:bg-rose-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-900\/30:is(.dark *){background-color:#8813374d}.dark\:bg-rose-900\/40:is(.dark *){background-color:#88133766}.dark\:bg-sky-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-500\/20:is(.dark *){background-color:#0ea5e933}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-slate-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900\/70:is(.dark *){background-color:#0f172ab3}.dark\:bg-teal-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 94 89 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-900\/20:is(.dark *){background-color:#134e4a33}.dark\:bg-teal-900\/30:is(.dark *){background-color:#134e4a4d}.dark\:bg-violet-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2e106566}.dark\:bg-yellow-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:bg-yellow-900\/40:is(.dark *){background-color:#713f1266}.dark\:bg-yellow-950\/30:is(.dark *){background-color:#4220064d}.dark\:from-amber-400:is(.dark *){--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-amber-900\/20:is(.dark *){--tw-gradient-from: rgb(120 53 15 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(120 53 15 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-600\/20:is(.dark *){--tw-gradient-from: rgb(37 99 235 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/20:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/40:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-950\/30:is(.dark *){--tw-gradient-from: rgb(23 37 84 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(23 37 84 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-cyan-900\/20:is(.dark *){--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-400:is(.dark *){--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/20:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/40:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-700:is(.dark *){--tw-gradient-from: #374151 var(--tw-gradient-from-position);--tw-gradient-to: rgb(55 65 81 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-800:is(.dark *){--tw-gradient-from: #1f2937 var(--tw-gradient-from-position);--tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-900\/30:is(.dark *){--tw-gradient-from: rgb(17 24 39 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-900\/20:is(.dark *){--tw-gradient-from: rgb(20 83 45 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 83 45 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-950\/30:is(.dark *){--tw-gradient-from: rgb(5 46 22 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(5 46 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-indigo-900\/20:is(.dark *){--tw-gradient-from: rgb(49 46 129 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(49 46 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-orange-950\/30:is(.dark *){--tw-gradient-from: rgb(67 20 7 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(67 20 7 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-500\/70:is(.dark *){--tw-gradient-from: rgb(168 85 247 / .7) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/20:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/40:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-950\/30:is(.dark *){--tw-gradient-from: rgb(59 7 100 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-500:is(.dark *){--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-900\/20:is(.dark *){--tw-gradient-from: rgb(136 19 55 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(136 19 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-400:is(.dark *){--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-500:is(.dark *){--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-900\/40:is(.dark *){--tw-gradient-from: rgb(12 74 110 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-teal-900\/20:is(.dark *){--tw-gradient-from: rgb(19 78 74 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(19 78 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-400:is(.dark *){--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-900\/40:is(.dark *){--tw-gradient-from: rgb(76 29 149 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-900\/20:is(.dark *){--tw-gradient-from: rgb(113 63 18 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(113 63 18 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-950\/30:is(.dark *){--tw-gradient-from: rgb(66 32 6 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(66 32 6 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-blue-500:is(.dark *){--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-blue-900\/20:is(.dark *){--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(30 58 138 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-cyan-400:is(.dark *){--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-500:is(.dark *){--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(6 78 59 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-600:is(.dark *){--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #4b5563 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-900\/10:is(.dark *){--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(17 24 39 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-orange-400:is(.dark *){--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-500:is(.dark *){--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-600\/70:is(.dark *){--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(147 51 234 / .7) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(88 28 135 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-red-500:is(.dark *){--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(12 74 110 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-violet-900\/20:is(.dark *){--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(76 29 149 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-amber-500:is(.dark *){--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.dark\:to-amber-950\/30:is(.dark *){--tw-gradient-to: rgb(69 26 3 / .3) var(--tw-gradient-to-position)}.dark\:to-blue-500:is(.dark *){--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.dark\:to-blue-800\/20:is(.dark *){--tw-gradient-to: rgb(30 64 175 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-500:is(.dark *){--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.dark\:to-cyan-900\/20:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-900\/30:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-800\/30:is(.dark *){--tw-gradient-to: rgb(6 95 70 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .2) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/30:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-950\/30:is(.dark *){--tw-gradient-to: rgb(2 44 34 / .3) var(--tw-gradient-to-position)}.dark\:to-fuchsia-500:is(.dark *){--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.dark\:to-fuchsia-900\/30:is(.dark *){--tw-gradient-to: rgb(112 26 117 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-700:is(.dark *){--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-gray-800\/30:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-800\/90:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .9) var(--tw-gradient-to-position)}.dark\:to-green-800\/20:is(.dark *){--tw-gradient-to: rgb(22 101 52 / .2) var(--tw-gradient-to-position)}.dark\:to-green-900\/20:is(.dark *){--tw-gradient-to: rgb(20 83 45 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-500\/70:is(.dark *){--tw-gradient-to: rgb(99 102 241 / .7) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/20:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/30:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .3) var(--tw-gradient-to-position)}.dark\:to-indigo-950\/30:is(.dark *){--tw-gradient-to: rgb(30 27 75 / .3) var(--tw-gradient-to-position)}.dark\:to-orange-900\/20:is(.dark *){--tw-gradient-to: rgb(124 45 18 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-900\/20:is(.dark *){--tw-gradient-to: rgb(131 24 67 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-950\/30:is(.dark *){--tw-gradient-to: rgb(80 7 36 / .3) var(--tw-gradient-to-position)}.dark\:to-purple-600\/20:is(.dark *){--tw-gradient-to: rgb(147 51 234 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-800\/20:is(.dark *){--tw-gradient-to: rgb(107 33 168 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/40:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .4) var(--tw-gradient-to-position)}.dark\:to-red-950\/30:is(.dark *){--tw-gradient-to: rgb(69 10 10 / .3) var(--tw-gradient-to-position)}.dark\:to-rose-600:is(.dark *){--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.dark\:to-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .2) var(--tw-gradient-to-position)}.dark\:to-sky-900\/30:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .3) var(--tw-gradient-to-position)}.dark\:to-slate-800:is(.dark *){--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.dark\:to-teal-500:is(.dark *){--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.dark\:to-teal-900\/20:is(.dark *){--tw-gradient-to: rgb(19 78 74 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-800\/20:is(.dark *){--tw-gradient-to: rgb(133 77 14 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-900\/20:is(.dark *){--tw-gradient-to: rgb(113 63 18 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-950\/30:is(.dark *){--tw-gradient-to: rgb(66 32 6 / .3) var(--tw-gradient-to-position)}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-100:is(.dark *){--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-200:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is(.dark *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.dark\:text-gray-900:is(.dark *){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300:is(.dark *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-indigo-400:is(.dark *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-purple-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200\/70:is(.dark *){color:#e9d5ffb3}.dark\:text-purple-300:is(.dark *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-teal-300:is(.dark *){--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.dark\:text-teal-400:is(.dark *){--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-2xl:is(.dark *){--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){--tw-shadow: 0 12px 28px rgba(0,0,0,.45);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-xl:is(.dark *){--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-blue-500\/40:is(.dark *){--tw-shadow-color: rgb(59 130 246 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:ring-amber-500\/20:is(.dark *){--tw-ring-color: rgb(245 158 11 / .2)}.dark\:ring-blue-500\/20:is(.dark *){--tw-ring-color: rgb(59 130 246 / .2)}.dark\:ring-emerald-500\/20:is(.dark *){--tw-ring-color: rgb(16 185 129 / .2)}.dark\:ring-purple-400\/30:is(.dark *){--tw-ring-color: rgb(192 132 252 / .3)}.dark\:ring-white\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:after\:bg-gray-300:is(.dark *):after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.dark\:hover\:border-amber-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:hover\:border-cyan-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(5 150 105 / var(--tw-border-opacity, 1))}.dark\:hover\:border-gray-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.dark\:hover\:border-orange-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.dark\:hover\:border-purple-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(225 29 72 / var(--tw-border-opacity, 1))}.dark\:hover\:border-teal-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-amber-800\/50:hover:is(.dark *){background-color:#92400e80}.dark\:hover\:bg-amber-900\/20:hover:is(.dark *){background-color:#78350f33}.dark\:hover\:bg-amber-900\/50:hover:is(.dark *){background-color:#78350f80}.dark\:hover\:bg-blue-500\/20:hover:is(.dark *){background-color:#3b82f633}.dark\:hover\:bg-blue-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-900\/20:hover:is(.dark *){background-color:#1e3a8a33}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-blue-900\/50:hover:is(.dark *){background-color:#1e3a8a80}.dark\:hover\:bg-blue-900\/70:hover:is(.dark *){background-color:#1e3a8ab3}.dark\:hover\:bg-cyan-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-cyan-800\/50:hover:is(.dark *){background-color:#155e7580}.dark\:hover\:bg-cyan-900\/20:hover:is(.dark *){background-color:#164e6333}.dark\:hover\:bg-cyan-900\/50:hover:is(.dark *){background-color:#164e6380}.dark\:hover\:bg-cyan-900\/60:hover:is(.dark *){background-color:#164e6399}.dark\:hover\:bg-emerald-900\/20:hover:is(.dark *){background-color:#064e3b33}.dark\:hover\:bg-emerald-900\/50:hover:is(.dark *){background-color:#064e3b80}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700\/30:hover:is(.dark *){background-color:#3741514d}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/50:hover:is(.dark *){background-color:#14532d80}.dark\:hover\:bg-indigo-900\/20:hover:is(.dark *){background-color:#312e8133}.dark\:hover\:bg-indigo-900\/50:hover:is(.dark *){background-color:#312e8180}.dark\:hover\:bg-orange-900\/20:hover:is(.dark *){background-color:#7c2d1233}.dark\:hover\:bg-orange-900\/50:hover:is(.dark *){background-color:#7c2d1280}.dark\:hover\:bg-pink-900\/50:hover:is(.dark *){background-color:#83184380}.dark\:hover\:bg-purple-500\/20:hover:is(.dark *){background-color:#a855f733}.dark\:hover\:bg-purple-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-purple-900\/20:hover:is(.dark *){background-color:#581c8733}.dark\:hover\:bg-purple-900\/40:hover:is(.dark *){background-color:#581c8766}.dark\:hover\:bg-purple-900\/50:hover:is(.dark *){background-color:#581c8780}.dark\:hover\:bg-red-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-900\/20:hover:is(.dark *){background-color:#7f1d1d33}.dark\:hover\:bg-red-900\/50:hover:is(.dark *){background-color:#7f1d1d80}.dark\:hover\:bg-rose-900\/20:hover:is(.dark *){background-color:#88133733}.dark\:hover\:bg-teal-900\/20:hover:is(.dark *){background-color:#134e4a33}.dark\:hover\:bg-teal-900\/50:hover:is(.dark *){background-color:#134e4a80}.dark\:hover\:text-blue-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:hover\:text-cyan-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:hover\:text-orange-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:hover\:text-purple-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-600:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-yellow-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:focus\:border-blue-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:focus\:border-indigo-500:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:focus\:border-purple-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:focus\:bg-gray-800:focus:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:focus\:ring-blue-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-indigo-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-purple-500\/40:focus:is(.dark *){--tw-ring-color: rgb(168 85 247 / .4)}.dark\:focus\:ring-offset-gray-800:focus:is(.dark *){--tw-ring-offset-color: #1f2937}.dark\:focus-visible\:ring-purple-400\/60:focus-visible:is(.dark *){--tw-ring-color: rgb(192 132 252 / .6)}.peer:focus~.dark\:peer-focus\:ring-blue-600:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-blue-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-orange-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(154 52 18 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-purple-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(107 33 168 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-teal-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(17 94 89 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-16{margin-left:4rem}.sm\:ml-2{margin-left:.5rem}.sm\:ml-4{margin-left:1rem}.sm\:mr-2{margin-right:.5rem}.sm\:mr-3{margin-right:.75rem}.sm\:mt-0{margin-top:0}.sm\:mt-2{margin-top:.5rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-20{height:5rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:max-h-\[300px\]{max-height:300px}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-20{width:5rem}.sm\:w-44{width:11rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-8{width:2rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:.5rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:mb-3{margin-bottom:.75rem}.md\:mb-4{margin-bottom:1rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-2{margin-right:.5rem}.md\:mr-3{margin-right:.75rem}.md\:mt-3{margin-top:.75rem}.md\:mt-4{margin-top:1rem}.md\:mt-8{margin-top:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:max-h-80{max-height:20rem}.md\:w-auto{width:auto}.md\:flex-none{flex:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:gap-2{gap:.5rem}.md\:gap-3{gap:.75rem}.md\:gap-4{gap:1rem}.md\:gap-6{gap:1.5rem}.md\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.md\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.md\:space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.md\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.md\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.md\:rounded-3xl{border-radius:1.5rem}.md\:p-10{padding:2.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pt-4{padding-top:1rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:w-auto{width:auto}.lg\:max-w-md{max-width:28rem}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:p-6{padding:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.xl\:items-stretch{align-items:stretch}}@media (min-width: 1536px){.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--glass-strong-color: rgba(255, 255, 255, .95);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2);--bg-gradient-start: #667eea;--bg-gradient-mid: #764ba2;--bg-gradient-end: #f093fb;--input-bg: rgba(255, 255, 255, .9);--input-border: rgba(209, 213, 219, .8);--modal-bg: rgba(0, 0, 0, .4);--table-bg: rgba(255, 255, 255, .95);--table-hover: rgba(102, 126, 234, .05)}.dark{--primary-color: #818cf8;--secondary-color: #a78bfa;--accent-color: #c084fc;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(31, 41, 55, .95);--glass-color: rgba(0, 0, 0, .2);--glass-strong-color: rgba(31, 41, 55, .95);--text-primary: #f3f4f6;--text-secondary: #9ca3af;--border-color: rgba(75, 85, 99, .3);--bg-gradient-start: #1f2937;--bg-gradient-mid: #374151;--bg-gradient-end: #4b5563;--input-bg: rgba(31, 41, 55, .9);--input-border: rgba(75, 85, 99, .5);--modal-bg: rgba(0, 0, 0, .6);--table-bg: rgba(31, 41, 55, .95);--table-hover: rgba(129, 140, 248, .1)}button,input,select,textarea{transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease,transform .2s ease}.transition-colors{transition:color .3s ease,background-color .3s ease,border-color .3s ease}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden;color:var(--text-primary);transition:background .3s ease,color .3s ease}body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:-1}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;transition:background-color .3s ease,border-color .3s ease}.dark .glass{box-shadow:0 20px 25px -5px #00000040,0 10px 10px -5px #0000001a,inset 0 1px #ffffff0d}.glass-strong{background:var(--glass-strong-color);border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease,border-color .3s ease}.dark .glass-strong{box-shadow:0 25px 50px -12px #0006,0 0 0 1px #ffffff05,inset 0 1px #ffffff0d}.tab-btn{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em}.tab-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.tab-btn:hover:before{left:100%}.tab-btn.active{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.card{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:background-color .3s ease,border-color .3s ease}.dark .card{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.card:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.stat-card{background:linear-gradient(135deg,var(--surface-color) 0%,var(--glass-strong-color) 100%);border-radius:20px;border:1px solid var(--border-color);padding:24px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.dark .stat-card{background:linear-gradient(135deg,#1f2937f2,#111827cc)}.stat-card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle,rgba(255,255,255,.1) 0%,transparent 70%);opacity:0;transition:opacity .3s ease}.stat-card:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.stat-card:hover:before{opacity:1}.stat-icon{width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.btn{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:#fff3;border-radius:50%;transform:translate(-50%,-50%);transition:width .3s ease,height .3s ease}.btn:active:before{width:300px;height:300px}.btn-primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-success{background:linear-gradient(135deg,var(--success-color) 0%,#059669 100%);color:#fff;box-shadow:0 10px 15px -3px #10b9814d,0 4px 6px -2px #10b9810d}.btn-success:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #10b9814d,0 10px 10px -5px #10b9811a}.btn-danger{background:linear-gradient(135deg,var(--error-color) 0%,#dc2626 100%);color:#fff;box-shadow:0 10px 15px -3px #ef44444d,0 4px 6px -2px #ef44440d}.btn-danger:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #ef44444d,0 10px 10px -5px #ef44441a}.form-input{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:16px;font-size:16px;color:var(--text-primary);transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2;color:#1f2937}.dark .form-input:focus{box-shadow:0 0 0 3px #818cf833,0 10px 15px -3px #0003;background:#111827f2;color:#f3f4f6}.table-container{background:var(--table-bg);border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease}.dark .table-container{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.table-row{transition:background-color .2s ease,transform .2s ease}.table-row:hover{background:var(--table-hover);transform:scale(1.005)}.modal{background:var(--modal-bg);transition:background-color .3s ease}.modal-content{background:#fff;border-radius:24px;border:1px solid rgba(229,231,235,.8);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d;transition:background-color .3s ease,border-color .3s ease}.dark .modal-content{background:#1f2937;border:1px solid rgba(75,85,99,.5);box-shadow:0 25px 50px -12px #0009,0 0 0 1px #ffffff05}.header-title{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.loading-spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top:2px solid white;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-up-enter-active,.slide-up-leave-active{transition:all .3s ease}.slide-up-enter-from{opacity:0;transform:translateY(30px)}.slide-up-leave-to{opacity:0;transform:translateY(-30px)}.toast{position:fixed;top:80px;right:20px;z-index:1000;min-width:320px;max-width:500px;transform:translate(100%);transition:transform .3s ease-in-out}.toast.show{transform:translate(0)}.toast-success{background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:1px solid rgba(16,185,129,.3)}.toast-error{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border:1px solid rgba(239,68,68,.3)}.toast-info{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:1px solid rgba(59,130,246,.3)}.toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border:1px solid rgba(245,158,11,.3)}[v-cloak]{display:none}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(102,126,234,.3) rgba(102,126,234,.05)}.dark .custom-scrollbar{scrollbar-color:rgba(129,140,248,.3) rgba(129,140,248,.05)}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:#667eea0d;border-radius:10px}.dark .custom-scrollbar::-webkit-scrollbar-track{background:#818cf80d}.custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea66,#764ba266);border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease}.dark .custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#818cf866,#a78bfa66)}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#667eea99,#764ba299)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#818cf899,#a78bfa99)}.custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#667eeacc,#764ba2cc)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#818cf8cc,#a78bfacc)}.modal-scroll-content{max-height:calc(90vh - 160px);overflow-y:auto;padding-right:8px}@media (max-width: 768px){.glass,.glass-strong{margin:16px;border-radius:20px}.stat-card{padding:16px}.tab-btn{font-size:14px;padding:12px 8px}.modal-scroll-content{max-height:calc(85vh - 120px)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}to{transform:scale(1);opacity:1}}.animate-pulse{transition:transform .2s ease}.animate-pulse:hover{animation:pulse .3s ease}.user-menu-dropdown{min-width:240px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.tab-content{animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} diff --git a/assets/index-BAse2XU9.js b/assets/index-BAse2XU9.js new file mode 100644 index 00000000..27e90d6b --- /dev/null +++ b/assets/index-BAse2XU9.js @@ -0,0 +1,23 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-C_fN82yI.js","assets/vue-vendor-BVUySZOn.js","assets/chart-ChB167Jv.js","assets/vendor-Dr8jvgFu.js","assets/ThemeToggle-Btdau4yo.js","assets/ThemeToggle-BLLHl9nT.css","assets/element-plus-CKhypU-Q.js","assets/element-plus-BWHEPMNp.css","assets/LoginView-tn0RQdqM.css","assets/UserLoginView-COfwLqzh.js","assets/UserDashboardView-DyavPA36.js","assets/ConfirmModal-BGRLg47v.js","assets/ConfirmModal-BvCtxUSJ.css","assets/TutorialView-C0wjIk1C.js","assets/TutorialView-BjIHOtH3.css","assets/UserManagementView-CFT_Esng.js","assets/MainLayout-Bd5PtuA8.js","assets/LogoTitle-BKx-1OIz.js","assets/LogoTitle-DXipqypn.css","assets/MainLayout-CCQ2LruH.css","assets/DashboardView-L6RVGrpZ.js","assets/DashboardView-CJCkJ1Cw.css","assets/ApiKeysView-P3GV4oxx.js","assets/WindowCountdown-Cb_iHkvc.js","assets/ActionDropdown-XGihbnCH.js","assets/ActionDropdown-BAe-X9zd.css","assets/ApiKeysView-sn4JYbr5.css","assets/ApiKeyUsageRecordsView-2qB4i7ZK.js","assets/RecordDetailModal-CVWv3dXE.js","assets/RecordDetailModal-BqG3nD3p.css","assets/AccountsView-DXROeeN3.js","assets/AccountsView-ChRk8WT-.css","assets/AccountUsageRecordsView-CUkKidfm.js","assets/SettingsView-BuM-cxrS.js","assets/SettingsView-BrlNWmbu.css","assets/ApiStatsView-C428m7c6.js","assets/ApiStatsView-D5HJh2jj.css"])))=>i.map(i=>d[i]); +import{aP as M,aQ as Z,aR as ee,r as p,c as L,o as z,q as K,V as B,I as F,z as g,x as E,ac as te,Q as se,a5 as G,y as T,C as q,L as U,P,Y as W,B as oe,R as C,J as ae,T as re,O as ne,av as ie,aM as ce,aS as le}from"./vue-vendor-BVUySZOn.js";import{i as ue,z as de}from"./element-plus-CKhypU-Q.js";import{P as w}from"./vendor-Dr8jvgFu.js";import"./chart-ChB167Jv.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&a(r)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();const he="modulepreload",me=function(t){return"/admin-next/"+t},J={},y=function(e,s,a){let o=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),c=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));o=Promise.allSettled(s.map(l=>{if(l=me(l),l in J)return;J[l]=!0;const m=l.endsWith(".css"),f=m?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const n=document.createElement("link");if(n.rel=m?"stylesheet":he,m||(n.as="script"),n.crossOrigin="",n.href=l,c&&n.setAttribute("nonce",c),document.head.appendChild(n),m)return new Promise((d,h)=>{n.addEventListener("load",d),n.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(r){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=r,window.dispatchEvent(c),!c.defaultPrevented)throw r}return o.then(r=>{for(const c of r||[])c.status==="rejected"&&i(c.reason);return e().catch(i)})};let I=null,fe=0;function Q(t,e="info",s="",a=3e3){I||(I=document.createElement("div"),I.id="toast-container",I.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 10000;",document.body.appendChild(I));const o=++fe,i=document.createElement("div");i.className=`toast rounded-2xl p-4 shadow-2xl backdrop-blur-sm toast-${e}`,i.style.cssText=` + position: relative; + min-width: 320px; + max-width: 500px; + margin-bottom: 16px; + transform: translateX(100%); + transition: transform 0.3s ease-in-out; + `;const r={success:"fas fa-check-circle",error:"fas fa-times-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"},c=t.replace(/\n/g,"
");return i.innerHTML=` +
+
+ +
+
+ ${s?`

${s}

`:""} +

${c}

+
+ +
+ `,I.appendChild(i),setTimeout(()=>{i.style.transform="translateX(0)"},10),a>0&&setTimeout(()=>{i.style.transform="translateX(100%)",setTimeout(()=>{i.remove()},300)},a),o}const pe=Object.freeze(Object.defineProperty({__proto__:null,showToast:Q},Symbol.toStringTag,{value:"Module"})),D={basePath:"/admin-next/",apiPrefix:""};function ge(t=""){return t&&!t.startsWith("/")&&(t="/"+t),D.basePath+(t.startsWith("#")?t:"#"+t)}function ve(){return ge("/login")}const H=D.apiPrefix;function x(t){return t.startsWith("/")||(t="/"+t),H+t}class ye{constructor(){this.baseURL=H}getAuthToken(){return localStorage.getItem("authToken")||null}buildConfig(e={}){const s={headers:{"Content-Type":"application/json",...e.headers},...e},a=this.getAuthToken();return a&&(s.headers.Authorization=`Bearer ${a}`),s}async handleResponse(e){if(e.status===401){const a=window.location.pathname+window.location.hash;throw a.includes("/login")||a.endsWith("/")||(localStorage.removeItem("authToken"),window.location.href=ve()),new Error("Unauthorized")}const s=e.headers.get("content-type");if(s&&s.includes("application/json")){const a=await e.json();if(!e.ok){const o=new Error(a.message||`HTTP ${e.status}`);throw o.response={status:e.status,data:a},o.message=a.message||o.message,o}return a}if(!e.ok)throw new Error(`HTTP ${e.status}: ${e.statusText}`);return e}async get(e,s={}){let a=x(e);if(s.params){const c=new URLSearchParams(s.params);a+="?"+c.toString()}const{params:o,...i}=s,r=this.buildConfig({...i,method:"GET"});try{const c=await fetch(a,r);return await this.handleResponse(c)}catch(c){throw console.error("API GET Error:",c),c}}async post(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"POST",body:s?JSON.stringify(s):void 0});try{const r=await fetch(o,i);return await this.handleResponse(r)}catch(r){throw console.error("API POST Error:",r),r}}async put(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PUT",body:s?JSON.stringify(s):void 0});try{const r=await fetch(o,i);return await this.handleResponse(r)}catch(r){throw console.error("API PUT Error:",r),r}}async patch(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PATCH",body:s?JSON.stringify(s):void 0});try{const r=await fetch(o,i);return await this.handleResponse(r)}catch(r){throw console.error("API PATCH Error:",r),r}}async delete(e,s={}){const a=x(e),{data:o,...i}=s,r=this.buildConfig({...i,method:"DELETE",body:o?JSON.stringify(o):void 0});try{const c=await fetch(a,r);return await this.handleResponse(c)}catch(c){throw console.error("API DELETE Error:",c),c}}}const S=new ye,k=`${H}/users`,X=M("user",{state:()=>({user:null,isAuthenticated:!1,sessionToken:null,loading:!1,config:null}),getters:{isLoggedIn:t=>t.isAuthenticated&&t.user,userName:t=>{var e,s;return((e=t.user)==null?void 0:e.displayName)||((s=t.user)==null?void 0:s.username)},userRole:t=>{var e;return(e=t.user)==null?void 0:e.role}},actions:{async login(t){this.loading=!0;try{const e=await w.post(`${k}/login`,t);if(e.data.success)return this.user=e.data.user,this.sessionToken=e.data.sessionToken,this.isAuthenticated=!0,localStorage.setItem("userToken",this.sessionToken),localStorage.setItem("userData",JSON.stringify(this.user)),this.setAuthHeader(),e.data;throw new Error(e.data.message||"Login failed")}catch(e){throw this.clearAuth(),e}finally{this.loading=!1}},async logout(){try{this.sessionToken&&await w.post(`${k}/logout`,{},{headers:{"x-user-token":this.sessionToken}})}catch(t){console.error("Logout request failed:",t)}finally{this.clearAuth()}},async checkAuth(){const t=localStorage.getItem("userToken"),e=localStorage.getItem("userData"),s=localStorage.getItem("userConfig");if(!t||!e)return this.clearAuth(),!1;try{return this.sessionToken=t,this.user=JSON.parse(e),this.config=s?JSON.parse(s):null,this.isAuthenticated=!0,this.setAuthHeader(),await this.getUserProfile(),!0}catch(a){return console.error("Auth check failed:",a),this.clearAuth(),!1}},async getUserProfile(){var t,e,s,a;try{const o=await w.get(`${k}/profile`);if(o.data.success)return this.user=o.data.user,this.config=o.data.config,localStorage.setItem("userData",JSON.stringify(this.user)),localStorage.setItem("userConfig",JSON.stringify(this.config)),o.data.user}catch(o){throw(((t=o.response)==null?void 0:t.status)===401||((e=o.response)==null?void 0:e.status)===403)&&(this.clearAuth(),((s=o.response)==null?void 0:s.status)===403)?new Error(((a=o.response.data)==null?void 0:a.message)||"Your account has been disabled"):o}},async getUserApiKeys(t=!1){try{const e={};t&&(e.includeDeleted="true");const s=await w.get(`${k}/api-keys`,{params:e});return s.data.success?s.data.apiKeys:[]}catch(e){throw console.error("Failed to fetch API keys:",e),e}},async createApiKey(t){try{return(await w.post(`${k}/api-keys`,t)).data}catch(e){throw console.error("Failed to create API key:",e),e}},async deleteApiKey(t){try{return(await w.delete(`${k}/api-keys/${t}`)).data}catch(e){throw console.error("Failed to delete API key:",e),e}},async getUserUsageStats(t={}){try{const e=await w.get(`${k}/usage-stats`,{params:t});return e.data.success?e.data.stats:null}catch(e){throw console.error("Failed to fetch usage stats:",e),e}},clearAuth(){this.user=null,this.sessionToken=null,this.isAuthenticated=!1,this.config=null,localStorage.removeItem("userToken"),localStorage.removeItem("userData"),localStorage.removeItem("userConfig"),delete w.defaults.headers.common["x-user-token"]},setAuthHeader(){this.sessionToken&&(w.defaults.headers.common["x-user-token"]=this.sessionToken)},setupAxiosInterceptors(){w.interceptors.response.use(t=>t,t=>{var e,s;if(((e=t.response)==null?void 0:e.status)===403){const a=(s=t.response.data)==null?void 0:s.message;a&&(a.includes("disabled")||a.includes("Account disabled"))&&(this.clearAuth(),Q(a,"error"),window.location.pathname!=="/user-login"&&(window.location.href="/user-login"))}return Promise.reject(t)})}}}),_e=()=>y(()=>import("./LoginView-C_fN82yI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),we=()=>y(()=>import("./UserLoginView-COfwLqzh.js"),__vite__mapDeps([9,1,2,3,4,5,6,7,8])),Ae=()=>y(()=>import("./UserDashboardView-DyavPA36.js"),__vite__mapDeps([10,1,2,3,4,5,11,12,13,6,7,14,8])),Te=()=>y(()=>import("./UserManagementView-CFT_Esng.js"),__vite__mapDeps([15,1,2,3,11,12,6,7,8])),b=()=>y(()=>import("./MainLayout-Bd5PtuA8.js"),__vite__mapDeps([16,1,2,3,17,18,4,5,6,7,19])),be=()=>y(()=>import("./DashboardView-L6RVGrpZ.js"),__vite__mapDeps([20,6,1,2,3,7,21])),ke=()=>y(()=>import("./ApiKeysView-P3GV4oxx.js"),__vite__mapDeps([22,6,1,2,3,7,23,24,25,26])),Ee=()=>y(()=>import("./ApiKeyUsageRecordsView-2qB4i7ZK.js"),__vite__mapDeps([27,6,1,2,3,7,28,29])),Ie=()=>y(()=>import("./AccountsView-DXROeeN3.js"),__vite__mapDeps([30,6,1,2,3,7,11,12,24,25,31])),Pe=()=>y(()=>import("./AccountUsageRecordsView-CUkKidfm.js"),__vite__mapDeps([32,6,1,2,3,7,28,29])),xe=()=>y(()=>import("./TutorialView-C0wjIk1C.js"),__vite__mapDeps([13,1,2,3,6,7,14])),Se=()=>y(()=>import("./SettingsView-BuM-cxrS.js"),__vite__mapDeps([33,1,2,3,6,7,34])),Le=()=>y(()=>import("./ApiStatsView-C428m7c6.js"),__vite__mapDeps([35,1,2,3,17,18,4,5,23,13,6,7,14,36])),Oe=[{path:"/",redirect:()=>{const t=window.location.pathname,e=D.basePath.replace(/\/$/,"");return t===e||t===e+"/","/api-stats"}},{path:"/login",name:"Login",component:_e,meta:{requiresAuth:!1}},{path:"/admin-login",redirect:"/login"},{path:"/user-login",name:"UserLogin",component:we,meta:{requiresAuth:!1,userAuth:!0}},{path:"/user-dashboard",name:"UserDashboard",component:Ae,meta:{requiresUserAuth:!0}},{path:"/api-stats",name:"ApiStats",component:Le,meta:{requiresAuth:!1}},{path:"/dashboard",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"Dashboard",component:be}]},{path:"/api-keys",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeys",component:ke}]},{path:"/api-keys/:keyId/usage-records",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeyUsageRecords",component:Ee}]},{path:"/accounts",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"Accounts",component:Ie}]},{path:"/accounts/:accountId/usage-records",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"AccountUsageRecords",component:Pe}]},{path:"/tutorial",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"Tutorial",component:xe}]},{path:"/settings",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"Settings",component:Se}]},{path:"/user-management",component:b,meta:{requiresAuth:!0},children:[{path:"",name:"UserManagement",component:Te}]},{path:"/:pathMatch(.*)*",redirect:"/api-stats"}],R=Z({history:ee(D.basePath),routes:Oe});R.beforeEach(async(t,e,s)=>{const a=Y(),o=X();if(console.log("路由导航:",{to:t.path,from:e.path,fullPath:t.fullPath,requiresAuth:t.meta.requiresAuth,requiresUserAuth:t.meta.requiresUserAuth,isAuthenticated:a.isAuthenticated,isUserAuthenticated:o.isAuthenticated}),t.path===e.path&&t.fullPath===e.fullPath)return s();if(t.meta.requiresUserAuth){if(!o.isAuthenticated)try{if(!await o.checkAuth())return s("/user-login")}catch(i){if(i.message&&i.message.includes("disabled")){const{showToast:r}=await y(async()=>{const{showToast:c}=await Promise.resolve().then(()=>pe);return{showToast:c}},void 0);r(i.message,"error")}return s("/user-login")}return s()}t.path==="/api-stats"||t.path.startsWith("/api-stats")?s():t.path==="/user-login"?o.isAuthenticated?s("/user-dashboard"):s():t.meta.requiresAuth&&!a.isAuthenticated?s("/login"):t.path==="/login"&&a.isAuthenticated?s("/dashboard"):s()});const Y=M("auth",()=>{const t=p(!1),e=p(localStorage.getItem("authToken")||""),s=p(""),a=p(""),o=p(!1),i=p({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",faviconData:"",publicStatsEnabled:!1}),r=p(!0),c=p(null),l=p(!1),m=L(()=>!!e.value&&t.value),f=L(()=>e.value),n=L(()=>({username:s.value}));async function d(u){o.value=!0,a.value="";try{const _=await S.post("/web/auth/login",u);_.success?(e.value=_.token,s.value=_.username||u.username,t.value=!0,localStorage.setItem("authToken",_.token),await R.push("/dashboard")):a.value=_.message||"登录失败"}catch(_){a.value=_.message||"登录失败,请检查用户名和密码"}finally{o.value=!1}}function h(){t.value=!1,e.value="",s.value="",localStorage.removeItem("authToken"),R.push("/login")}function A(){e.value&&(t.value=!0,V())}async function V(){try{const u=await S.get("/web/auth/user");u.success&&u.user&&(s.value=u.user.username),(await S.get("/admin/dashboard")).success||h()}catch{h()}}async function N(){r.value=!0;try{const u=await S.get("/admin/oem-settings");if(u.success&&u.data){if(i.value={...i.value,...u.data},u.data.siteIconData||u.data.siteIcon){const _=document.querySelector("link[rel*='icon']")||document.createElement("link");_.type="image/x-icon",_.rel="shortcut icon",_.href=u.data.siteIconData||u.data.siteIcon,document.getElementsByTagName("head")[0].appendChild(_)}u.data.siteName&&(document.title=`${u.data.siteName} - 管理后台`),u.data.publicStatsEnabled&&O()}}catch(u){console.error("加载OEM设置失败:",u)}finally{r.value=!1}}async function O(){l.value=!0;try{const u=await S.get("/admin/public-stats");u.success&&u.enabled&&u.data?c.value=u.data:c.value=null}catch(u){console.error("加载公开统计失败:",u),c.value=null}finally{l.value=!1}}return{isLoggedIn:t,authToken:e,username:s,loginError:a,loginLoading:o,oemSettings:i,oemLoading:r,publicStats:c,publicStatsLoading:l,isAuthenticated:m,token:f,user:n,login:d,logout:h,checkAuth:A,loadOemSettings:N,loadPublicStats:O}}),v={LIGHT:"light",DARK:"dark",AUTO:"auto"},Ce=M("theme",()=>{const t=p(v.AUTO),e=p(!1),s=L(()=>t.value===v.DARK?!0:t.value===v.LIGHT?!1:e.value),a=L(()=>s.value?v.DARK:v.LIGHT),o=()=>{const n=window.matchMedia("(prefers-color-scheme: dark)");e.value=n.matches;const d=localStorage.getItem("themeMode");d&&Object.values(v).includes(d)?t.value=d:t.value=v.AUTO,i(),l()},i=()=>{const n=document.documentElement;s.value?n.classList.add("dark"):n.classList.remove("dark")},r=n=>{Object.values(v).includes(n)&&(t.value=n)},c=()=>{const n=[v.LIGHT,v.DARK,v.AUTO],h=(n.indexOf(t.value)+1)%n.length;t.value=n[h]};z(t,n=>{localStorage.setItem("themeMode",n),i()}),z(e,()=>{t.value===v.AUTO&&i()});const l=()=>{const n=window.matchMedia("(prefers-color-scheme: dark)"),d=h=>{e.value=h.matches};return e.value=n.matches,n.addEventListener("change",d),()=>{n.removeEventListener("change",d)}};return{themeMode:t,isDarkMode:s,currentTheme:a,systemPrefersDark:e,ThemeMode:v,initTheme:o,setThemeMode:r,cycleThemeMode:c,watchSystemTheme:l,toggleTheme:()=>{c()},setTheme:n=>{n==="dark"?r(v.DARK):n==="light"&&r(v.LIGHT)}}}),j=(t,e)=>{const s=t.__vccOpts||t;for(const[a,o]of e)s[a]=o;return s},Ue={class:"toast-container"},Re=["onClick"],De={class:"toast-content"},$e={class:"toast-icon"},Ve={class:"toast-body"},Ne={key:0,class:"toast-title"},qe={class:"toast-message"},Me=["onClick"],Ke={__name:"ToastNotification",setup(t,{expose:e}){const s=p([]);let a=0;const o=m=>{const f={success:"fas fa-check-circle",error:"fas fa-exclamation-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"};return f[m]||f.info},i=(m,f="info",n=null,d=5e3)=>{const h=++a,A={id:h,message:m,type:f,title:n,duration:d,isVisible:!1};return s.value.push(A),setTimeout(()=>{A.isVisible=!0},10),d>0&&setTimeout(()=>{r(h)},d),h},r=m=>{const f=s.value.findIndex(n=>n.id===m);if(f>-1){const n=s.value[f];n.isVisible=!1,setTimeout(()=>{const d=s.value.findIndex(h=>h.id===m);d>-1&&s.value.splice(d,1)},300)}},c=()=>{s.value.forEach(m=>{m.isVisible=!1}),setTimeout(()=>{s.value.length=0},300)},l=(m,f="info",n=null,d=5e3)=>i(m,f,n,d);return K(()=>{window.showToast=l}),B(()=>{window.showToast===l&&delete window.showToast}),e({showToast:l,removeToast:r,clearAllToasts:c}),(m,f)=>(T(),F(G,{to:"body"},[g("div",Ue,[(T(!0),E(se,null,te(s.value,n=>(T(),E("div",{key:n.id,class:q(["toast",`toast-${n.type}`,n.isVisible?"toast-show":"toast-hide"]),onClick:d=>r(n.id)},[g("div",De,[g("div",$e,[g("i",{class:q(o(n.type))},null,2)]),g("div",Ve,[n.title?(T(),E("div",Ne,P(n.title),1)):U("",!0),g("div",qe,P(n.message),1)]),g("button",{class:"toast-close",onClick:W(d=>r(n.id),["stop"])},f[0]||(f[0]=[g("i",{class:"fas fa-times"},null,-1)]),8,Me)]),n.duration>0?(T(),E("div",{key:0,class:"toast-progress",style:oe({animationDuration:`${n.duration}ms`})},null,4)):U("",!0)],10,Re))),128))])]))}},He=j(Ke,[["__scopeId","data-v-c8b24ff5"]]),je={class:"modal-content mx-auto w-full max-w-md p-6"},ze={class:"mb-6 flex items-start gap-4"},Je={class:"flex-1"},Be={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Fe={class:"whitespace-pre-line leading-relaxed text-gray-700 dark:text-gray-400"},Ge={class:"flex items-center justify-end gap-3"},We=["disabled"],Qe=["disabled"],Xe={key:0,class:"loading-spinner mr-2"},Ye={__name:"ConfirmDialog",setup(t,{expose:e}){const s=p(!1),a=p(!1),o=p(""),i=p(""),r=p("确认"),c=p("取消");let l=null;const m=(h,A,V="确认",N="取消")=>new Promise(O=>{o.value=h,i.value=A,r.value=V,c.value=N,s.value=!0,a.value=!1,l=O}),f=()=>{a.value||(a.value=!0,setTimeout(()=>{s.value=!1,a.value=!1,l&&(l(!0),l=null)},200))},n=()=>{a.value||(s.value=!1,l&&(l(!1),l=null))},d=h=>{s.value&&(h.key==="Escape"?n():h.key==="Enter"&&!h.shiftKey&&!h.ctrlKey&&!h.altKey&&f())};return K(()=>{window.showConfirm=m,document.addEventListener("keydown",d)}),B(()=>{window.showConfirm===m&&delete window.showConfirm,document.removeEventListener("keydown",d)}),e({showConfirm:m}),(h,A)=>(T(),F(G,{to:"body"},[C(re,{appear:"",name:"modal"},{default:ae(()=>[s.value?(T(),E("div",{key:0,class:"modal fixed inset-0 z-[100] flex items-center justify-center p-4",onClick:W(n,["self"])},[g("div",je,[g("div",ze,[A[0]||(A[0]=g("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-amber-600"},[g("i",{class:"fas fa-exclamation-triangle text-lg text-white"})],-1)),g("div",Je,[g("h3",Be,P(o.value),1),g("div",Fe,P(i.value),1)])]),g("div",Ge,[g("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:a.value,onClick:n},P(c.value),9,We),g("button",{class:q(["btn btn-warning px-6 py-3",{"cursor-not-allowed opacity-50":a.value}]),disabled:a.value,onClick:f},[a.value?(T(),E("div",Xe)):U("",!0),ne(" "+P(r.value),1)],10,Qe)])])])):U("",!0)]),_:1})]))}},Ze=j(Ye,[["__scopeId","data-v-6b3390a6"]]),et={id:"app"},tt={__name:"App",setup(t){const e=Y(),s=Ce(),a=p(),o=p();return K(()=>{s.initTheme(),s.watchSystemTheme(),e.checkAuth(),e.loadOemSettings()}),(i,r)=>{const c=ie("router-view");return T(),E("div",et,[C(c),C(He,{ref_key:"toastRef",ref:a},null,512),C(Ze,{ref_key:"confirmRef",ref:o},null,512)])}}},st=j(tt,[["__scopeId","data-v-dab04b7e"]]),$=ce(st),ot=le();$.use(ot);$.use(R);$.use(ue,{locale:de});const at=X();at.setupAxiosInterceptors();$.mount("#app");export{H as A,j as _,Ce as a,X as b,S as c,Q as s,Y as u}; diff --git a/assets/index-Cr7hSgrN.js b/assets/index-Cr7hSgrN.js deleted file mode 100644 index a0e82257..00000000 --- a/assets/index-Cr7hSgrN.js +++ /dev/null @@ -1,23 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-Cqf_qBij.js","assets/vue-vendor-R8HMg95E.js","assets/ThemeToggle-Dkc-_0Ud.js","assets/ThemeToggle-BLLHl9nT.css","assets/element-plus-BUfCkBQO.js","assets/vendor-Dr8jvgFu.js","assets/element-plus-BWHEPMNp.css","assets/LoginView-tn0RQdqM.css","assets/UserLoginView-qdXph3b_.js","assets/UserDashboardView-C3u0eacX.js","assets/ConfirmModal-CZV4xGP-.js","assets/ConfirmModal-BvCtxUSJ.css","assets/TutorialView-DqwFkHUw.js","assets/TutorialView-BjIHOtH3.css","assets/UserManagementView-CUF5iwjE.js","assets/MainLayout-DM3nuiFe.js","assets/LogoTitle-CwgrPCRk.js","assets/LogoTitle-DXipqypn.css","assets/MainLayout-CCQ2LruH.css","assets/DashboardView-Dz8mMDNV.js","assets/chart-yFHxLHpB.js","assets/DashboardView-CJCkJ1Cw.css","assets/ApiKeysView-p16y4zjX.js","assets/WindowCountdown-DF7xS2EZ.js","assets/ActionDropdown-C3hc7yXw.js","assets/ActionDropdown-BAe-X9zd.css","assets/ApiKeysView-sn4JYbr5.css","assets/ApiKeyUsageRecordsView-BKxEbtcs.js","assets/RecordDetailModal-lW2AGtWL.js","assets/RecordDetailModal-BqG3nD3p.css","assets/AccountsView-2rnZ6KJ6.js","assets/AccountsView-ChRk8WT-.css","assets/AccountUsageRecordsView-DgdPiUJQ.js","assets/SettingsView-Ds_F7gAc.js","assets/SettingsView-CRb2BaAt.css","assets/ApiStatsView-7CsUPSAo.js","assets/ApiStatsView-CRlzwPqI.css"])))=>i.map(i=>d[i]); -import{aP as V,aQ as X,aR as Y,r as g,c as S,o as K,q as N,V as j,I as z,z as p,x as E,ac as Z,Q as ee,a5 as J,y as T,C as $,L as C,P,Y as B,B as te,R as O,J as se,T as oe,O as ae,av as re,aM as ne,aS as ie}from"./vue-vendor-R8HMg95E.js";import{i as ce,z as le}from"./element-plus-BUfCkBQO.js";import{P as w}from"./vendor-Dr8jvgFu.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const n of i.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&a(n)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();const ue="modulepreload",de=function(t){return"/admin-next/"+t},H={},v=function(e,s,a){let o=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),c=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));o=Promise.allSettled(s.map(l=>{if(l=de(l),l in H)return;H[l]=!0;const d=l.endsWith(".css"),f=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const r=document.createElement("link");if(r.rel=d?"stylesheet":ue,d||(r.as="script"),r.crossOrigin="",r.href=l,c&&r.setAttribute("nonce",c),document.head.appendChild(r),d)return new Promise((u,h)=>{r.addEventListener("load",u),r.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(n){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=n,window.dispatchEvent(c),!c.defaultPrevented)throw n}return o.then(n=>{for(const c of n||[])c.status==="rejected"&&i(c.reason);return e().catch(i)})};let I=null,he=0;function F(t,e="info",s="",a=3e3){I||(I=document.createElement("div"),I.id="toast-container",I.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 10000;",document.body.appendChild(I));const o=++he,i=document.createElement("div");i.className=`toast rounded-2xl p-4 shadow-2xl backdrop-blur-sm toast-${e}`,i.style.cssText=` - position: relative; - min-width: 320px; - max-width: 500px; - margin-bottom: 16px; - transform: translateX(100%); - transition: transform 0.3s ease-in-out; - `;const n={success:"fas fa-check-circle",error:"fas fa-times-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"},c=t.replace(/\n/g,"
");return i.innerHTML=` -
-
- -
-
- ${s?`

${s}

`:""} -

${c}

-
- -
- `,I.appendChild(i),setTimeout(()=>{i.style.transform="translateX(0)"},10),a>0&&setTimeout(()=>{i.style.transform="translateX(100%)",setTimeout(()=>{i.remove()},300)},a),o}const me=Object.freeze(Object.defineProperty({__proto__:null,showToast:F},Symbol.toStringTag,{value:"Module"})),R={basePath:"/admin-next/",apiPrefix:""};function fe(t=""){return t&&!t.startsWith("/")&&(t="/"+t),R.basePath+(t.startsWith("#")?t:"#"+t)}function pe(){return fe("/login")}const q=R.apiPrefix;function x(t){return t.startsWith("/")||(t="/"+t),q+t}class ge{constructor(){this.baseURL=q}getAuthToken(){return localStorage.getItem("authToken")||null}buildConfig(e={}){const s={headers:{"Content-Type":"application/json",...e.headers},...e},a=this.getAuthToken();return a&&(s.headers.Authorization=`Bearer ${a}`),s}async handleResponse(e){if(e.status===401){const a=window.location.pathname+window.location.hash;throw a.includes("/login")||a.endsWith("/")||(localStorage.removeItem("authToken"),window.location.href=pe()),new Error("Unauthorized")}const s=e.headers.get("content-type");if(s&&s.includes("application/json")){const a=await e.json();if(!e.ok){const o=new Error(a.message||`HTTP ${e.status}`);throw o.response={status:e.status,data:a},o.message=a.message||o.message,o}return a}if(!e.ok)throw new Error(`HTTP ${e.status}: ${e.statusText}`);return e}async get(e,s={}){let a=x(e);if(s.params){const c=new URLSearchParams(s.params);a+="?"+c.toString()}const{params:o,...i}=s,n=this.buildConfig({...i,method:"GET"});try{const c=await fetch(a,n);return await this.handleResponse(c)}catch(c){throw console.error("API GET Error:",c),c}}async post(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"POST",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API POST Error:",n),n}}async put(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PUT",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API PUT Error:",n),n}}async patch(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PATCH",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API PATCH Error:",n),n}}async delete(e,s={}){const a=x(e),{data:o,...i}=s,n=this.buildConfig({...i,method:"DELETE",body:o?JSON.stringify(o):void 0});try{const c=await fetch(a,n);return await this.handleResponse(c)}catch(c){throw console.error("API DELETE Error:",c),c}}}const L=new ge,b=`${q}/users`,G=V("user",{state:()=>({user:null,isAuthenticated:!1,sessionToken:null,loading:!1,config:null}),getters:{isLoggedIn:t=>t.isAuthenticated&&t.user,userName:t=>{var e,s;return((e=t.user)==null?void 0:e.displayName)||((s=t.user)==null?void 0:s.username)},userRole:t=>{var e;return(e=t.user)==null?void 0:e.role}},actions:{async login(t){this.loading=!0;try{const e=await w.post(`${b}/login`,t);if(e.data.success)return this.user=e.data.user,this.sessionToken=e.data.sessionToken,this.isAuthenticated=!0,localStorage.setItem("userToken",this.sessionToken),localStorage.setItem("userData",JSON.stringify(this.user)),this.setAuthHeader(),e.data;throw new Error(e.data.message||"Login failed")}catch(e){throw this.clearAuth(),e}finally{this.loading=!1}},async logout(){try{this.sessionToken&&await w.post(`${b}/logout`,{},{headers:{"x-user-token":this.sessionToken}})}catch(t){console.error("Logout request failed:",t)}finally{this.clearAuth()}},async checkAuth(){const t=localStorage.getItem("userToken"),e=localStorage.getItem("userData"),s=localStorage.getItem("userConfig");if(!t||!e)return this.clearAuth(),!1;try{return this.sessionToken=t,this.user=JSON.parse(e),this.config=s?JSON.parse(s):null,this.isAuthenticated=!0,this.setAuthHeader(),await this.getUserProfile(),!0}catch(a){return console.error("Auth check failed:",a),this.clearAuth(),!1}},async getUserProfile(){var t,e,s,a;try{const o=await w.get(`${b}/profile`);if(o.data.success)return this.user=o.data.user,this.config=o.data.config,localStorage.setItem("userData",JSON.stringify(this.user)),localStorage.setItem("userConfig",JSON.stringify(this.config)),o.data.user}catch(o){throw(((t=o.response)==null?void 0:t.status)===401||((e=o.response)==null?void 0:e.status)===403)&&(this.clearAuth(),((s=o.response)==null?void 0:s.status)===403)?new Error(((a=o.response.data)==null?void 0:a.message)||"Your account has been disabled"):o}},async getUserApiKeys(t=!1){try{const e={};t&&(e.includeDeleted="true");const s=await w.get(`${b}/api-keys`,{params:e});return s.data.success?s.data.apiKeys:[]}catch(e){throw console.error("Failed to fetch API keys:",e),e}},async createApiKey(t){try{return(await w.post(`${b}/api-keys`,t)).data}catch(e){throw console.error("Failed to create API key:",e),e}},async deleteApiKey(t){try{return(await w.delete(`${b}/api-keys/${t}`)).data}catch(e){throw console.error("Failed to delete API key:",e),e}},async getUserUsageStats(t={}){try{const e=await w.get(`${b}/usage-stats`,{params:t});return e.data.success?e.data.stats:null}catch(e){throw console.error("Failed to fetch usage stats:",e),e}},clearAuth(){this.user=null,this.sessionToken=null,this.isAuthenticated=!1,this.config=null,localStorage.removeItem("userToken"),localStorage.removeItem("userData"),localStorage.removeItem("userConfig"),delete w.defaults.headers.common["x-user-token"]},setAuthHeader(){this.sessionToken&&(w.defaults.headers.common["x-user-token"]=this.sessionToken)},setupAxiosInterceptors(){w.interceptors.response.use(t=>t,t=>{var e,s;if(((e=t.response)==null?void 0:e.status)===403){const a=(s=t.response.data)==null?void 0:s.message;a&&(a.includes("disabled")||a.includes("Account disabled"))&&(this.clearAuth(),F(a,"error"),window.location.pathname!=="/user-login"&&(window.location.href="/user-login"))}return Promise.reject(t)})}}}),_e=()=>v(()=>import("./LoginView-Cqf_qBij.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])),ye=()=>v(()=>import("./UserLoginView-qdXph3b_.js"),__vite__mapDeps([8,1,2,3,4,5,6,7])),ve=()=>v(()=>import("./UserDashboardView-C3u0eacX.js"),__vite__mapDeps([9,1,2,3,10,11,12,4,5,6,13,7])),we=()=>v(()=>import("./UserManagementView-CUF5iwjE.js"),__vite__mapDeps([14,1,10,11,5,4,6,7])),k=()=>v(()=>import("./MainLayout-DM3nuiFe.js"),__vite__mapDeps([15,1,16,17,2,3,4,5,6,18])),Ae=()=>v(()=>import("./DashboardView-Dz8mMDNV.js"),__vite__mapDeps([19,4,1,5,6,20,21])),Te=()=>v(()=>import("./ApiKeysView-p16y4zjX.js"),__vite__mapDeps([22,4,1,5,6,23,24,25,26])),ke=()=>v(()=>import("./ApiKeyUsageRecordsView-BKxEbtcs.js"),__vite__mapDeps([27,4,1,5,6,28,29])),be=()=>v(()=>import("./AccountsView-2rnZ6KJ6.js"),__vite__mapDeps([30,4,1,5,6,10,11,20,24,25,31])),Ee=()=>v(()=>import("./AccountUsageRecordsView-DgdPiUJQ.js"),__vite__mapDeps([32,4,1,5,6,28,29])),Ie=()=>v(()=>import("./TutorialView-DqwFkHUw.js"),__vite__mapDeps([12,1,4,5,6,13])),Pe=()=>v(()=>import("./SettingsView-Ds_F7gAc.js"),__vite__mapDeps([33,1,4,5,6,34])),xe=()=>v(()=>import("./ApiStatsView-7CsUPSAo.js"),__vite__mapDeps([35,1,16,17,2,3,5,23,12,4,6,13,36])),Se=[{path:"/",redirect:()=>{const t=window.location.pathname,e=R.basePath.replace(/\/$/,"");return t===e||t===e+"/","/api-stats"}},{path:"/login",name:"Login",component:_e,meta:{requiresAuth:!1}},{path:"/admin-login",redirect:"/login"},{path:"/user-login",name:"UserLogin",component:ye,meta:{requiresAuth:!1,userAuth:!0}},{path:"/user-dashboard",name:"UserDashboard",component:ve,meta:{requiresUserAuth:!0}},{path:"/api-stats",name:"ApiStats",component:xe,meta:{requiresAuth:!1}},{path:"/dashboard",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Dashboard",component:Ae}]},{path:"/api-keys",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeys",component:Te}]},{path:"/api-keys/:keyId/usage-records",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeyUsageRecords",component:ke}]},{path:"/accounts",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Accounts",component:be}]},{path:"/accounts/:accountId/usage-records",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"AccountUsageRecords",component:Ee}]},{path:"/tutorial",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Tutorial",component:Ie}]},{path:"/settings",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Settings",component:Pe}]},{path:"/user-management",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"UserManagement",component:we}]},{path:"/:pathMatch(.*)*",redirect:"/api-stats"}],U=X({history:Y(R.basePath),routes:Se});U.beforeEach(async(t,e,s)=>{const a=W(),o=G();if(console.log("路由导航:",{to:t.path,from:e.path,fullPath:t.fullPath,requiresAuth:t.meta.requiresAuth,requiresUserAuth:t.meta.requiresUserAuth,isAuthenticated:a.isAuthenticated,isUserAuthenticated:o.isAuthenticated}),t.path===e.path&&t.fullPath===e.fullPath)return s();if(t.meta.requiresUserAuth){if(!o.isAuthenticated)try{if(!await o.checkAuth())return s("/user-login")}catch(i){if(i.message&&i.message.includes("disabled")){const{showToast:n}=await v(async()=>{const{showToast:c}=await Promise.resolve().then(()=>me);return{showToast:c}},void 0);n(i.message,"error")}return s("/user-login")}return s()}t.path==="/api-stats"||t.path.startsWith("/api-stats")?s():t.path==="/user-login"?o.isAuthenticated?s("/user-dashboard"):s():t.meta.requiresAuth&&!a.isAuthenticated?s("/login"):t.path==="/login"&&a.isAuthenticated?s("/dashboard"):s()});const W=V("auth",()=>{const t=g(!1),e=g(localStorage.getItem("authToken")||""),s=g(""),a=g(""),o=g(!1),i=g({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",faviconData:""}),n=g(!0),c=S(()=>!!e.value&&t.value),l=S(()=>e.value),d=S(()=>({username:s.value}));async function f(m){o.value=!0,a.value="";try{const _=await L.post("/web/auth/login",m);_.success?(e.value=_.token,s.value=_.username||m.username,t.value=!0,localStorage.setItem("authToken",_.token),await U.push("/dashboard")):a.value=_.message||"登录失败"}catch(_){a.value=_.message||"登录失败,请检查用户名和密码"}finally{o.value=!1}}function r(){t.value=!1,e.value="",s.value="",localStorage.removeItem("authToken"),U.push("/login")}function u(){e.value&&(t.value=!0,h())}async function h(){try{const m=await L.get("/web/auth/user");m.success&&m.user&&(s.value=m.user.username),(await L.get("/admin/dashboard")).success||r()}catch{r()}}async function A(){n.value=!0;try{const m=await L.get("/admin/oem-settings");if(m.success&&m.data){if(i.value={...i.value,...m.data},m.data.siteIconData||m.data.siteIcon){const _=document.querySelector("link[rel*='icon']")||document.createElement("link");_.type="image/x-icon",_.rel="shortcut icon",_.href=m.data.siteIconData||m.data.siteIcon,document.getElementsByTagName("head")[0].appendChild(_)}m.data.siteName&&(document.title=`${m.data.siteName} - 管理后台`)}}catch(m){console.error("加载OEM设置失败:",m)}finally{n.value=!1}}return{isLoggedIn:t,authToken:e,username:s,loginError:a,loginLoading:o,oemSettings:i,oemLoading:n,isAuthenticated:c,token:l,user:d,login:f,logout:r,checkAuth:u,loadOemSettings:A}}),y={LIGHT:"light",DARK:"dark",AUTO:"auto"},Le=V("theme",()=>{const t=g(y.AUTO),e=g(!1),s=S(()=>t.value===y.DARK?!0:t.value===y.LIGHT?!1:e.value),a=S(()=>s.value?y.DARK:y.LIGHT),o=()=>{const r=window.matchMedia("(prefers-color-scheme: dark)");e.value=r.matches;const u=localStorage.getItem("themeMode");u&&Object.values(y).includes(u)?t.value=u:t.value=y.AUTO,i(),l()},i=()=>{const r=document.documentElement;s.value?r.classList.add("dark"):r.classList.remove("dark")},n=r=>{Object.values(y).includes(r)&&(t.value=r)},c=()=>{const r=[y.LIGHT,y.DARK,y.AUTO],h=(r.indexOf(t.value)+1)%r.length;t.value=r[h]};K(t,r=>{localStorage.setItem("themeMode",r),i()}),K(e,()=>{t.value===y.AUTO&&i()});const l=()=>{const r=window.matchMedia("(prefers-color-scheme: dark)"),u=h=>{e.value=h.matches};return e.value=r.matches,r.addEventListener("change",u),()=>{r.removeEventListener("change",u)}};return{themeMode:t,isDarkMode:s,currentTheme:a,systemPrefersDark:e,ThemeMode:y,initTheme:o,setThemeMode:n,cycleThemeMode:c,watchSystemTheme:l,toggleTheme:()=>{c()},setTheme:r=>{r==="dark"?n(y.DARK):r==="light"&&n(y.LIGHT)}}}),M=(t,e)=>{const s=t.__vccOpts||t;for(const[a,o]of e)s[a]=o;return s},Oe={class:"toast-container"},Ce=["onClick"],Ue={class:"toast-content"},Re={class:"toast-icon"},De={class:"toast-body"},$e={key:0,class:"toast-title"},Ve={class:"toast-message"},Ne=["onClick"],qe={__name:"ToastNotification",setup(t,{expose:e}){const s=g([]);let a=0;const o=d=>{const f={success:"fas fa-check-circle",error:"fas fa-exclamation-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"};return f[d]||f.info},i=(d,f="info",r=null,u=5e3)=>{const h=++a,A={id:h,message:d,type:f,title:r,duration:u,isVisible:!1};return s.value.push(A),setTimeout(()=>{A.isVisible=!0},10),u>0&&setTimeout(()=>{n(h)},u),h},n=d=>{const f=s.value.findIndex(r=>r.id===d);if(f>-1){const r=s.value[f];r.isVisible=!1,setTimeout(()=>{const u=s.value.findIndex(h=>h.id===d);u>-1&&s.value.splice(u,1)},300)}},c=()=>{s.value.forEach(d=>{d.isVisible=!1}),setTimeout(()=>{s.value.length=0},300)},l=(d,f="info",r=null,u=5e3)=>i(d,f,r,u);return N(()=>{window.showToast=l}),j(()=>{window.showToast===l&&delete window.showToast}),e({showToast:l,removeToast:n,clearAllToasts:c}),(d,f)=>(T(),z(J,{to:"body"},[p("div",Oe,[(T(!0),E(ee,null,Z(s.value,r=>(T(),E("div",{key:r.id,class:$(["toast",`toast-${r.type}`,r.isVisible?"toast-show":"toast-hide"]),onClick:u=>n(r.id)},[p("div",Ue,[p("div",Re,[p("i",{class:$(o(r.type))},null,2)]),p("div",De,[r.title?(T(),E("div",$e,P(r.title),1)):C("",!0),p("div",Ve,P(r.message),1)]),p("button",{class:"toast-close",onClick:B(u=>n(r.id),["stop"])},f[0]||(f[0]=[p("i",{class:"fas fa-times"},null,-1)]),8,Ne)]),r.duration>0?(T(),E("div",{key:0,class:"toast-progress",style:te({animationDuration:`${r.duration}ms`})},null,4)):C("",!0)],10,Ce))),128))])]))}},Me=M(qe,[["__scopeId","data-v-c8b24ff5"]]),Ke={class:"modal-content mx-auto w-full max-w-md p-6"},He={class:"mb-6 flex items-start gap-4"},je={class:"flex-1"},ze={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Je={class:"whitespace-pre-line leading-relaxed text-gray-700 dark:text-gray-400"},Be={class:"flex items-center justify-end gap-3"},Fe=["disabled"],Ge=["disabled"],We={key:0,class:"loading-spinner mr-2"},Qe={__name:"ConfirmDialog",setup(t,{expose:e}){const s=g(!1),a=g(!1),o=g(""),i=g(""),n=g("确认"),c=g("取消");let l=null;const d=(h,A,m="确认",_="取消")=>new Promise(Q=>{o.value=h,i.value=A,n.value=m,c.value=_,s.value=!0,a.value=!1,l=Q}),f=()=>{a.value||(a.value=!0,setTimeout(()=>{s.value=!1,a.value=!1,l&&(l(!0),l=null)},200))},r=()=>{a.value||(s.value=!1,l&&(l(!1),l=null))},u=h=>{s.value&&(h.key==="Escape"?r():h.key==="Enter"&&!h.shiftKey&&!h.ctrlKey&&!h.altKey&&f())};return N(()=>{window.showConfirm=d,document.addEventListener("keydown",u)}),j(()=>{window.showConfirm===d&&delete window.showConfirm,document.removeEventListener("keydown",u)}),e({showConfirm:d}),(h,A)=>(T(),z(J,{to:"body"},[O(oe,{appear:"",name:"modal"},{default:se(()=>[s.value?(T(),E("div",{key:0,class:"modal fixed inset-0 z-[100] flex items-center justify-center p-4",onClick:B(r,["self"])},[p("div",Ke,[p("div",He,[A[0]||(A[0]=p("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-amber-600"},[p("i",{class:"fas fa-exclamation-triangle text-lg text-white"})],-1)),p("div",je,[p("h3",ze,P(o.value),1),p("div",Je,P(i.value),1)])]),p("div",Be,[p("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:a.value,onClick:r},P(c.value),9,Fe),p("button",{class:$(["btn btn-warning px-6 py-3",{"cursor-not-allowed opacity-50":a.value}]),disabled:a.value,onClick:f},[a.value?(T(),E("div",We)):C("",!0),ae(" "+P(n.value),1)],10,Ge)])])])):C("",!0)]),_:1})]))}},Xe=M(Qe,[["__scopeId","data-v-6b3390a6"]]),Ye={id:"app"},Ze={__name:"App",setup(t){const e=W(),s=Le(),a=g(),o=g();return N(()=>{s.initTheme(),s.watchSystemTheme(),e.checkAuth(),e.loadOemSettings()}),(i,n)=>{const c=re("router-view");return T(),E("div",Ye,[O(c),O(Me,{ref_key:"toastRef",ref:a},null,512),O(Xe,{ref_key:"confirmRef",ref:o},null,512)])}}},et=M(Ze,[["__scopeId","data-v-dab04b7e"]]),D=ne(et),tt=ie();D.use(tt);D.use(U);D.use(ce,{locale:le});const st=G();st.setupAxiosInterceptors();D.mount("#app");export{q as A,M as _,Le as a,G as b,L as c,F as s,W as u}; diff --git a/assets/vue-vendor-BVUySZOn.js b/assets/vue-vendor-BVUySZOn.js new file mode 100644 index 00000000..2b894153 --- /dev/null +++ b/assets/vue-vendor-BVUySZOn.js @@ -0,0 +1,25 @@ +import{C as ei,L as Jl,D as Yl}from"./chart-ChB167Jv.js";/** +* @vue/shared v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function lr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ie={},Wt=[],ke=()=>{},Xl=()=>!1,rs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),cr=e=>e.startsWith("onUpdate:"),he=Object.assign,ar=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Zl=Object.prototype.hasOwnProperty,te=(e,t)=>Zl.call(e,t),j=Array.isArray,Gt=e=>Tn(e)==="[object Map]",tn=e=>Tn(e)==="[object Set]",Dr=e=>Tn(e)==="[object Date]",W=e=>typeof e=="function",ue=e=>typeof e=="string",Ke=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",ti=e=>(se(e)||W(e))&&W(e.then)&&W(e.catch),ni=Object.prototype.toString,Tn=e=>ni.call(e),ec=e=>Tn(e).slice(8,-1),si=e=>Tn(e)==="[object Object]",ur=e=>ue(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,un=lr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),os=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},tc=/-(\w)/g,Ve=os(e=>e.replace(tc,(t,n)=>n?n.toUpperCase():"")),nc=/\B([A-Z])/g,Pt=os(e=>e.replace(nc,"-$1").toLowerCase()),is=os(e=>e.charAt(0).toUpperCase()+e.slice(1)),kn=os(e=>e?`on${is(e)}`:""),wt=(e,t)=>!Object.is(e,t),Bn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},zn=e=>{const t=parseFloat(e);return isNaN(t)?e:t},sc=e=>{const t=ue(e)?Number(e):NaN;return isNaN(t)?e:t};let $r;const ls=()=>$r||($r=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function cs(e){if(j(e)){const t={};for(let n=0;n{if(n){const s=n.split(oc);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function as(e){let t="";if(ue(e))t=e;else if(j(e))for(let n=0;nDt(n,t))}const oi=e=>!!(e&&e.__v_isRef===!0),fc=e=>ue(e)?e:e==null?"":j(e)||se(e)&&(e.toString===ni||!W(e.toString))?oi(e)?fc(e.value):JSON.stringify(e,ii,2):String(e),ii=(e,t)=>oi(t)?ii(e,t.value):Gt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[Os(s,o)+" =>"]=r,n),{})}:tn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Os(n))}:Ke(t)?Os(t):se(t)&&!j(t)&&!si(t)?String(t):t,Os=(e,t="")=>{var n;return Ke(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ve;class li{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ve=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(dn){let t=dn;for(dn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;fn;){let t=fn;for(fn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function hi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function pi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),gr(s),dc(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Bs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(gi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function gi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===bn)||(e.globalVersion=bn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Bs(e))))return;e.flags|=2;const t=e.dep,n=ae,s=Be;ae=e,Be=!0;try{hi(e);const r=e.fn(e._value);(t.version===0||wt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ae=n,Be=s,pi(e),e.flags&=-3}}function gr(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)gr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function dc(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Be=!0;const mi=[];function ct(){mi.push(Be),Be=!1}function at(){const e=mi.pop();Be=e===void 0?!0:e}function Fr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ae;ae=void 0;try{t()}finally{ae=n}}}let bn=0;class hc{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class us{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ae||!Be||ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ae)n=this.activeLink=new hc(ae,this),ae.deps?(n.prevDep=ae.depsTail,ae.depsTail.nextDep=n,ae.depsTail=n):ae.deps=ae.depsTail=n,vi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ae.depsTail,n.nextDep=void 0,ae.depsTail.nextDep=n,ae.depsTail=n,ae.deps===n&&(ae.deps=s)}return n}trigger(t){this.version++,bn++,this.notify(t)}notify(t){hr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{pr()}}}function vi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)vi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Qn=new WeakMap,Mt=Symbol(""),Ks=Symbol(""),wn=Symbol("");function ye(e,t,n){if(Be&&ae){let s=Qn.get(e);s||Qn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new us),r.map=s,r.key=n),r.track()}}function rt(e,t,n,s,r,o){const i=Qn.get(e);if(!i){bn++;return}const l=c=>{c&&c.trigger()};if(hr(),t==="clear")i.forEach(l);else{const c=j(e),u=c&&ur(n);if(c&&n==="length"){const a=Number(s);i.forEach((f,d)=>{(d==="length"||d===wn||!Ke(d)&&d>=a)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(wn)),t){case"add":c?u&&l(i.get("length")):(l(i.get(Mt)),Gt(e)&&l(i.get(Ks)));break;case"delete":c||(l(i.get(Mt)),Gt(e)&&l(i.get(Ks)));break;case"set":Gt(e)&&l(i.get(Mt));break}}pr()}function pc(e,t){const n=Qn.get(e);return n&&n.get(t)}function Vt(e){const t=z(e);return t===e?t:(ye(t,"iterate",wn),$e(e)?t:t.map(pe))}function fs(e){return ye(e=z(e),"iterate",wn),e}const gc={__proto__:null,[Symbol.iterator](){return Ts(this,Symbol.iterator,pe)},concat(...e){return Vt(this).concat(...e.map(t=>j(t)?Vt(t):t))},entries(){return Ts(this,"entries",e=>(e[1]=pe(e[1]),e))},every(e,t){return tt(this,"every",e,t,void 0,arguments)},filter(e,t){return tt(this,"filter",e,t,n=>n.map(pe),arguments)},find(e,t){return tt(this,"find",e,t,pe,arguments)},findIndex(e,t){return tt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return tt(this,"findLast",e,t,pe,arguments)},findLastIndex(e,t){return tt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return tt(this,"forEach",e,t,void 0,arguments)},includes(...e){return As(this,"includes",e)},indexOf(...e){return As(this,"indexOf",e)},join(e){return Vt(this).join(e)},lastIndexOf(...e){return As(this,"lastIndexOf",e)},map(e,t){return tt(this,"map",e,t,void 0,arguments)},pop(){return rn(this,"pop")},push(...e){return rn(this,"push",e)},reduce(e,...t){return jr(this,"reduce",e,t)},reduceRight(e,...t){return jr(this,"reduceRight",e,t)},shift(){return rn(this,"shift")},some(e,t){return tt(this,"some",e,t,void 0,arguments)},splice(...e){return rn(this,"splice",e)},toReversed(){return Vt(this).toReversed()},toSorted(e){return Vt(this).toSorted(e)},toSpliced(...e){return Vt(this).toSpliced(...e)},unshift(...e){return rn(this,"unshift",e)},values(){return Ts(this,"values",pe)}};function Ts(e,t,n){const s=fs(e),r=s[t]();return s!==e&&!$e(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.value&&(o.value=n(o.value)),o}),r}const mc=Array.prototype;function tt(e,t,n,s,r,o){const i=fs(e),l=i!==e&&!$e(e),c=i[t];if(c!==mc[t]){const f=c.apply(e,o);return l?pe(f):f}let u=n;i!==e&&(l?u=function(f,d){return n.call(this,pe(f),d,e)}:n.length>2&&(u=function(f,d){return n.call(this,f,d,e)}));const a=c.call(i,u,s);return l&&r?r(a):a}function jr(e,t,n,s){const r=fs(e);let o=n;return r!==e&&($e(e)?n.length>3&&(o=function(i,l,c){return n.call(this,i,l,c,e)}):o=function(i,l,c){return n.call(this,i,pe(l),c,e)}),r[t](o,...s)}function As(e,t,n){const s=z(e);ye(s,"iterate",wn);const r=s[t](...n);return(r===-1||r===!1)&&In(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function rn(e,t,n=[]){ct(),hr();const s=z(e)[t].apply(e,n);return pr(),at(),s}const vc=lr("__proto__,__v_isRef,__isVue"),yi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ke));function yc(e){Ke(e)||(e=String(e));const t=z(this);return ye(t,"has",e),t.hasOwnProperty(e)}class _i{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?Rc:Ei:o?Si:wi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=j(t);if(!r){let c;if(i&&(c=gc[n]))return c;if(n==="hasOwnProperty")return yc}const l=Reflect.get(t,n,fe(t)?t:s);return(Ke(n)?yi.has(n):vc(n))||(r||ye(t,"get",n),o)?l:fe(l)?i&&ur(n)?l:l.value:se(l)?r?ds(l):An(l):l}}class bi extends _i{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];if(!this._isShallow){const c=St(o);if(!$e(s)&&!St(s)&&(o=z(o),s=z(s)),!j(t)&&fe(o)&&!fe(s))return c?!1:(o.value=s,!0)}const i=j(t)&&ur(n)?Number(n)e,Dn=e=>Reflect.getPrototypeOf(e);function Ec(e,t,n){return function(...s){const r=this.__v_raw,o=z(r),i=Gt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=r[e](...s),a=n?Us:t?Jn:pe;return!t&&ye(o,"iterate",c?Ks:Mt),{next(){const{value:f,done:d}=u.next();return d?{value:f,done:d}:{value:l?[a(f[0]),a(f[1])]:a(f),done:d}},[Symbol.iterator](){return this}}}}function $n(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function xc(e,t){const n={get(r){const o=this.__v_raw,i=z(o),l=z(r);e||(wt(r,l)&&ye(i,"get",r),ye(i,"get",l));const{has:c}=Dn(i),u=t?Us:e?Jn:pe;if(c.call(i,r))return u(o.get(r));if(c.call(i,l))return u(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&ye(z(r),"iterate",Mt),Reflect.get(r,"size",r)},has(r){const o=this.__v_raw,i=z(o),l=z(r);return e||(wt(r,l)&&ye(i,"has",r),ye(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,c=z(l),u=t?Us:e?Jn:pe;return!e&&ye(c,"iterate",Mt),l.forEach((a,f)=>r.call(o,u(a),u(f),i))}};return he(n,e?{add:$n("add"),set:$n("set"),delete:$n("delete"),clear:$n("clear")}:{add(r){!t&&!$e(r)&&!St(r)&&(r=z(r));const o=z(this);return Dn(o).has.call(o,r)||(o.add(r),rt(o,"add",r,r)),this},set(r,o){!t&&!$e(o)&&!St(o)&&(o=z(o));const i=z(this),{has:l,get:c}=Dn(i);let u=l.call(i,r);u||(r=z(r),u=l.call(i,r));const a=c.call(i,r);return i.set(r,o),u?wt(o,a)&&rt(i,"set",r,o):rt(i,"add",r,o),this},delete(r){const o=z(this),{has:i,get:l}=Dn(o);let c=i.call(o,r);c||(r=z(r),c=i.call(o,r)),l&&l.call(o,r);const u=o.delete(r);return c&&rt(o,"delete",r,void 0),u},clear(){const r=z(this),o=r.size!==0,i=r.clear();return o&&rt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Ec(r,e,t)}),n}function mr(e,t){const n=xc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(te(n,r)&&r in s?n:s,r,o)}const Cc={get:mr(!1,!1)},Pc={get:mr(!1,!0)},Oc={get:mr(!0,!1)};const wi=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Rc=new WeakMap;function Tc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ac(e){return e.__v_skip||!Object.isExtensible(e)?0:Tc(ec(e))}function An(e){return St(e)?e:vr(e,!1,bc,Cc,wi)}function xi(e){return vr(e,!1,Sc,Pc,Si)}function ds(e){return vr(e,!0,wc,Oc,Ei)}function vr(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=Ac(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function lt(e){return St(e)?lt(e.__v_raw):!!(e&&e.__v_isReactive)}function St(e){return!!(e&&e.__v_isReadonly)}function $e(e){return!!(e&&e.__v_isShallow)}function In(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function yr(e){return!te(e,"__v_skip")&&Object.isExtensible(e)&&ks(e,"__v_skip",!0),e}const pe=e=>se(e)?An(e):e,Jn=e=>se(e)?ds(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function le(e){return Ci(e,!1)}function hs(e){return Ci(e,!0)}function Ci(e,t){return fe(e)?e:new Ic(e,t)}class Ic{constructor(t,n){this.dep=new us,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:pe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||$e(t)||St(t);t=s?t:z(t),wt(t,n)&&(this._rawValue=t,this._value=s?t:pe(t),this.dep.trigger())}}function Sd(e){e.dep&&e.dep.trigger()}function Lt(e){return fe(e)?e.value:e}const Mc={get:(e,t,n)=>t==="__v_raw"?e:Lt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Pi(e){return lt(e)?e:new Proxy(e,Mc)}class Lc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new us,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Nc(e){return new Lc(e)}function Dc(e){const t=j(e)?new Array(e.length):{};for(const n in e)t[n]=Oi(e,n);return t}class $c{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pc(z(this._object),this._key)}}class Fc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function jc(e,t,n){return fe(e)?e:W(e)?new Fc(e):se(e)&&arguments.length>1?Oi(e,t,n):le(e)}function Oi(e,t,n){const s=e[t];return fe(s)?s:new $c(e,t,n)}class Hc{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new us(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=bn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ae!==this)return di(this,!0),!0}get value(){const t=this.dep.track();return gi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Vc(e,t,n=!1){let s,r;return W(e)?s=e:(s=e.get,r=e.set),new Hc(s,r,n)}const Fn={},Yn=new WeakMap;let At;function kc(e,t=!1,n=At){if(n){let s=Yn.get(n);s||Yn.set(n,s=[]),s.push(e)}}function Bc(e,t,n=ie){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:c}=n,u=L=>r?L:$e(L)||r===!1||r===0?ot(L,1):ot(L);let a,f,d,g,v=!1,w=!1;if(fe(e)?(f=()=>e.value,v=$e(e)):lt(e)?(f=()=>u(e),v=!0):j(e)?(w=!0,v=e.some(L=>lt(L)||$e(L)),f=()=>e.map(L=>{if(fe(L))return L.value;if(lt(L))return u(L);if(W(L))return c?c(L,2):L()})):W(e)?t?f=c?()=>c(e,2):e:f=()=>{if(d){ct();try{d()}finally{at()}}const L=At;At=a;try{return c?c(e,3,[g]):e(g)}finally{At=L}}:f=ke,t&&r){const L=f,k=r===!0?1/0:r;f=()=>ot(L(),k)}const D=dr(),O=()=>{a.stop(),D&&D.active&&ar(D.effects,a)};if(o&&t){const L=t;t=(...k)=>{L(...k),O()}}let T=w?new Array(e.length).fill(Fn):Fn;const M=L=>{if(!(!(a.flags&1)||!a.dirty&&!L))if(t){const k=a.run();if(r||v||(w?k.some((Q,q)=>wt(Q,T[q])):wt(k,T))){d&&d();const Q=At;At=a;try{const q=[k,T===Fn?void 0:w&&T[0]===Fn?[]:T,g];T=k,c?c(t,3,q):t(...q)}finally{At=Q}}}else a.run()};return l&&l(M),a=new ui(f),a.scheduler=i?()=>i(M,!1):M,g=L=>kc(L,!1,a),d=a.onStop=()=>{const L=Yn.get(a);if(L){if(c)c(L,4);else for(const k of L)k();Yn.delete(a)}},t?s?M(!0):T=a.run():i?i(M.bind(null,!0),!0):a.run(),O.pause=a.pause.bind(a),O.resume=a.resume.bind(a),O.stop=O,O}function ot(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,fe(e))ot(e.value,t,n);else if(j(e))for(let s=0;s{ot(s,t,n)});else if(si(e)){for(const s in e)ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ot(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Mn(e,t,n,s){try{return s?e(...s):e()}catch(r){ps(r,t,n)}}function Ue(e,t,n,s){if(W(e)){const r=Mn(e,t,n,s);return r&&ti(r)&&r.catch(o=>{ps(o,t,n)}),r}if(j(e)){const r=[];for(let o=0;o>>1,r=Pe[s],o=Sn(r);o=Sn(n)?Pe.push(e):Pe.splice(Uc(t),0,e),e.flags|=1,Ti()}}function Ti(){Xn||(Xn=Ri.then(Ii))}function Wc(e){j(e)?qt.push(...e):vt&&e.id===-1?vt.splice(Kt+1,0,e):e.flags&1||(qt.push(e),e.flags|=1),Ti()}function Hr(e,t,n=Xe+1){for(;nSn(n)-Sn(s));if(qt.length=0,vt){vt.push(...t);return}for(vt=t,Kt=0;Kte.id==null?e.flags&2?-1:1/0:e.id;function Ii(e){try{for(Xe=0;Xe{s._d&&Zr(-1);const o=Zn(t);let i;try{i=e(...r)}finally{Zn(o),s._d&&Zr(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function Ed(e,t){if(ge===null)return e;const n=ws(ge),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,hn=e=>e&&(e.disabled||e.disabled===""),Vr=e=>e&&(e.defer||e.defer===""),kr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Br=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ws=(e,t)=>{const n=e&&e.to;return ue(n)?t?t(n):null:n},Di={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,c,u){const{mc:a,pc:f,pbc:d,o:{insert:g,querySelector:v,createText:w,createComment:D}}=u,O=hn(t.props);let{shapeFlag:T,children:M,dynamicChildren:L}=t;if(e==null){const k=t.el=w(""),Q=t.anchor=w("");g(k,n,s),g(Q,n,s);const q=(x,K)=>{T&16&&(r&&r.isCE&&(r.ce._teleportTarget=x),a(M,x,K,r,o,i,l,c))},B=()=>{const x=t.target=Ws(t.props,v),K=$i(x,t,w,g);x&&(i!=="svg"&&kr(x)?i="svg":i!=="mathml"&&Br(x)&&(i="mathml"),O||(q(x,K),Kn(t,!1)))};O&&(q(n,Q),Kn(t,!0)),Vr(t.props)?(t.el.__isMounted=!1,Ce(()=>{B(),delete t.el.__isMounted},o)):B()}else{if(Vr(t.props)&&e.el.__isMounted===!1){Ce(()=>{Di.process(e,t,n,s,r,o,i,l,c,u)},o);return}t.el=e.el,t.targetStart=e.targetStart;const k=t.anchor=e.anchor,Q=t.target=e.target,q=t.targetAnchor=e.targetAnchor,B=hn(e.props),x=B?n:Q,K=B?k:q;if(i==="svg"||kr(Q)?i="svg":(i==="mathml"||Br(Q))&&(i="mathml"),L?(d(e.dynamicChildren,L,x,r,o,i,l),Pr(e,t,!0)):c||f(e,t,x,K,r,o,i,l,!1),O)B?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):jn(t,n,k,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const J=t.target=Ws(t.props,v);J&&jn(t,J,null,u,0)}else B&&jn(t,Q,q,u,1);Kn(t,O)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:u,targetAnchor:a,target:f,props:d}=e;if(f&&(r(u),r(a)),o&&r(c),i&16){const g=o||!hn(d);for(let v=0;v{e.isMounted=!0}),Wi(()=>{e.isUnmounting=!0}),e}const De=[Function,Array],ji={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:De,onEnter:De,onAfterEnter:De,onEnterCancelled:De,onBeforeLeave:De,onLeave:De,onAfterLeave:De,onLeaveCancelled:De,onBeforeAppear:De,onAppear:De,onAfterAppear:De,onAppearCancelled:De},Hi=e=>{const t=e.subTree;return t.component?Hi(t.component):t},zc={name:"BaseTransition",props:ji,setup(e,{slots:t}){const n=Ft(),s=Fi();return()=>{const r=t.default&&br(t.default(),!0);if(!r||!r.length)return;const o=Vi(r),i=z(e),{mode:l}=i;if(s.isLeaving)return Is(o);const c=Kr(o);if(!c)return Is(o);let u=En(c,i,s,n,f=>u=f);c.type!==_e&&$t(c,u);let a=n.subTree&&Kr(n.subTree);if(a&&a.type!==_e&&!It(c,a)&&Hi(n).type!==_e){let f=En(a,i,s,n);if($t(a,f),l==="out-in"&&c.type!==_e)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,a=void 0},Is(o);l==="in-out"&&c.type!==_e?f.delayLeave=(d,g,v)=>{const w=ki(s,a);w[String(a.key)]=a,d[yt]=()=>{g(),d[yt]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{v(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return o}}};function Vi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==_e){t=n;break}}return t}const Qc=zc;function ki(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function En(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:f,onBeforeLeave:d,onLeave:g,onAfterLeave:v,onLeaveCancelled:w,onBeforeAppear:D,onAppear:O,onAfterAppear:T,onAppearCancelled:M}=t,L=String(e.key),k=ki(n,e),Q=(x,K)=>{x&&Ue(x,s,9,K)},q=(x,K)=>{const J=K[1];Q(x,K),j(x)?x.every(N=>N.length<=1)&&J():x.length<=1&&J()},B={mode:i,persisted:l,beforeEnter(x){let K=c;if(!n.isMounted)if(o)K=D||c;else return;x[yt]&&x[yt](!0);const J=k[L];J&&It(e,J)&&J.el[yt]&&J.el[yt](),Q(K,[x])},enter(x){let K=u,J=a,N=f;if(!n.isMounted)if(o)K=O||u,J=T||a,N=M||f;else return;let Y=!1;const de=x[Hn]=Ee=>{Y||(Y=!0,Ee?Q(N,[x]):Q(J,[x]),B.delayedLeave&&B.delayedLeave(),x[Hn]=void 0)};K?q(K,[x,de]):de()},leave(x,K){const J=String(e.key);if(x[Hn]&&x[Hn](!0),n.isUnmounting)return K();Q(d,[x]);let N=!1;const Y=x[yt]=de=>{N||(N=!0,K(),de?Q(w,[x]):Q(v,[x]),x[yt]=void 0,k[J]===e&&delete k[J])};k[J]=e,g?q(g,[x,Y]):Y()},clone(x){const K=En(x,t,n,s,r);return r&&r(K),K}};return B}function Is(e){if(ms(e))return e=Et(e),e.children=null,e}function Kr(e){if(!ms(e))return Ni(e.type)&&e.children?Vi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&W(n.default))return n.default()}}function $t(e,t){e.shapeFlag&6&&e.component?(e.transition=t,$t(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function br(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;opn(v,t&&(j(t)?t[w]:t),n,s,r));return}if(zt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&pn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?ws(s.component):s.el,i=r?null:o,{i:l,r:c}=e,u=t&&t.r,a=l.refs===ie?l.refs={}:l.refs,f=l.setupState,d=z(f),g=f===ie?()=>!1:v=>te(d,v);if(u!=null&&u!==c&&(ue(u)?(a[u]=null,g(u)&&(f[u]=null)):fe(u)&&(u.value=null)),W(c))Mn(c,l,12,[i,a]);else{const v=ue(c),w=fe(c);if(v||w){const D=()=>{if(e.f){const O=v?g(c)?f[c]:a[c]:c.value;r?j(O)&&ar(O,o):j(O)?O.includes(o)||O.push(o):v?(a[c]=[o],g(c)&&(f[c]=a[c])):(c.value=[o],e.k&&(a[e.k]=c.value))}else v?(a[c]=i,g(c)&&(f[c]=i)):w&&(c.value=i,e.k&&(a[e.k]=i))};i?(D.id=-1,Ce(D,n)):D()}}}ls().requestIdleCallback;ls().cancelIdleCallback;const zt=e=>!!e.type.__asyncLoader,ms=e=>e.type.__isKeepAlive;function Jc(e,t){Ki(e,"a",t)}function Yc(e,t){Ki(e,"da",t)}function Ki(e,t,n=be){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(vs(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ms(r.parent.vnode)&&Xc(s,t,n,r),r=r.parent}}function Xc(e,t,n,s){const r=vs(t,e,s,!0);wr(()=>{ar(s[t],r)},n)}function vs(e,t,n=be,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{ct();const l=Ln(n),c=Ue(t,n,e,i);return l(),at(),c});return s?r.unshift(o):r.push(o),o}}const ut=e=>(t,n=be)=>{(!Pn||e==="sp")&&vs(e,(...s)=>t(...s),n)},Zc=ut("bm"),ys=ut("m"),ea=ut("bu"),Ui=ut("u"),Wi=ut("bum"),wr=ut("um"),ta=ut("sp"),na=ut("rtg"),sa=ut("rtc");function ra(e,t=be){vs("ec",e,t)}const Sr="components",oa="directives";function Cd(e,t){return Er(Sr,e,!0,t)||e}const Gi=Symbol.for("v-ndc");function Pd(e){return ue(e)?Er(Sr,e,!1)||e:e||Gi}function Od(e){return Er(oa,e)}function Er(e,t,n=!0,s=!1){const r=ge||be;if(r){const o=r.type;if(e===Sr){const l=qa(o,!1);if(l&&(l===t||l===Ve(t)||l===is(Ve(t))))return o}const i=Ur(r[e]||o[e],t)||Ur(r.appContext[e],t);return!i&&s?o:i}}function Ur(e,t){return e&&(e[t]||e[Ve(t)]||e[is(Ve(t))])}function Rd(e,t,n,s){let r;const o=n,i=j(e);if(i||ue(e)){const l=i&<(e);let c=!1,u=!1;l&&(c=!$e(e),u=St(e),e=fs(e)),r=new Array(e.length);for(let a=0,f=e.length;at(l,c,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;c{const o=s.fn(...r);return o&&(o.key=s.key),o}:s.fn)}return e}function Ad(e,t,n={},s,r){if(ge.ce||ge.parent&&zt(ge.parent)&&ge.parent.ce)return t!=="default"&&(n.name=t),Js(),Ys(Ae,null,[Se("slot",n,s&&s())],64);let o=e[t];o&&o._c&&(o._d=!1),Js();const i=o&&qi(o(n)),l=n.key||i&&i.key,c=Ys(Ae,{key:(l&&!Ke(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),o&&o._c&&(o._d=!0),c}function qi(e){return e.some(t=>Cn(t)?!(t.type===_e||t.type===Ae&&!qi(t.children)):!0)?e:null}function Id(e,t){const n={};for(const s in e)n[kn(s)]=e[s];return n}const Gs=e=>e?hl(e)?ws(e):Gs(e.parent):null,gn=he(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Gs(e.parent),$root:e=>Gs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ji(e),$forceUpdate:e=>e.f||(e.f=()=>{_r(e.update)}),$nextTick:e=>e.n||(e.n=nn.bind(e.proxy)),$watch:e=>Ra.bind(e)}),Ms=(e,t)=>e!==ie&&!e.__isScriptSetup&&te(e,t),ia={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(Ms(s,t))return i[t]=1,s[t];if(r!==ie&&te(r,t))return i[t]=2,r[t];if((u=e.propsOptions[0])&&te(u,t))return i[t]=3,o[t];if(n!==ie&&te(n,t))return i[t]=4,n[t];qs&&(i[t]=0)}}const a=gn[t];let f,d;if(a)return t==="$attrs"&&ye(e.attrs,"get",""),a(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ie&&te(n,t))return i[t]=4,n[t];if(d=c.config.globalProperties,te(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return Ms(r,t)?(r[t]=n,!0):s!==ie&&te(s,t)?(s[t]=n,!0):te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:o}},i){let l;return!!n[i]||e!==ie&&te(e,i)||Ms(t,i)||(l=o[0])&&te(l,i)||te(s,i)||te(gn,i)||te(r.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Md(){return zi().slots}function Ld(){return zi().attrs}function zi(e){const t=Ft();return t.setupContext||(t.setupContext=gl(t))}function Wr(e){return j(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let qs=!0;function la(e){const t=Ji(e),n=e.proxy,s=e.ctx;qs=!1,t.beforeCreate&&Gr(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:c,inject:u,created:a,beforeMount:f,mounted:d,beforeUpdate:g,updated:v,activated:w,deactivated:D,beforeDestroy:O,beforeUnmount:T,destroyed:M,unmounted:L,render:k,renderTracked:Q,renderTriggered:q,errorCaptured:B,serverPrefetch:x,expose:K,inheritAttrs:J,components:N,directives:Y,filters:de}=t;if(u&&ca(u,s,null),i)for(const G in i){const Z=i[G];W(Z)&&(s[G]=Z.bind(n))}if(r){const G=r.call(n,n);se(G)&&(e.data=An(G))}if(qs=!0,o)for(const G in o){const Z=o[G],et=W(Z)?Z.bind(n,n):W(Z.get)?Z.get.bind(n,n):ke,dt=!W(Z)&&W(Z.set)?Z.set.bind(n):ke,Ge=we({get:et,set:dt});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:Oe=>Ge.value=Oe})}if(l)for(const G in l)Qi(l[G],s,n,G);if(c){const G=W(c)?c.call(n):c;Reflect.ownKeys(G).forEach(Z=>{Un(Z,G[Z])})}a&&Gr(a,e,"c");function re(G,Z){j(Z)?Z.forEach(et=>G(et.bind(n))):Z&&G(Z.bind(n))}if(re(Zc,f),re(ys,d),re(ea,g),re(Ui,v),re(Jc,w),re(Yc,D),re(ra,B),re(sa,Q),re(na,q),re(Wi,T),re(wr,L),re(ta,x),j(K))if(K.length){const G=e.exposed||(e.exposed={});K.forEach(Z=>{Object.defineProperty(G,Z,{get:()=>n[Z],set:et=>n[Z]=et,enumerable:!0})})}else e.exposed||(e.exposed={});k&&e.render===ke&&(e.render=k),J!=null&&(e.inheritAttrs=J),N&&(e.components=N),Y&&(e.directives=Y),x&&Bi(e)}function ca(e,t,n=ke){j(e)&&(e=zs(e));for(const s in e){const r=e[s];let o;se(r)?"default"in r?o=Fe(r.from||s,r.default,!0):o=Fe(r.from||s):o=Fe(r),fe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function Gr(e,t,n){Ue(j(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qi(e,t,n,s){let r=s.includes(".")?ll(n,s):()=>n[s];if(ue(e)){const o=t[e];W(o)&&me(r,o)}else if(W(e))me(r,e.bind(n));else if(se(e))if(j(e))e.forEach(o=>Qi(o,t,n,s));else{const o=W(e.handler)?e.handler.bind(n):t[e.handler];W(o)&&me(r,o,e)}}function Ji(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>es(c,u,i,!0)),es(c,t,i)),se(t)&&o.set(t,c),c}function es(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&es(e,o,n,!0),r&&r.forEach(i=>es(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=aa[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const aa={data:qr,props:zr,emits:zr,methods:an,computed:an,beforeCreate:xe,created:xe,beforeMount:xe,mounted:xe,beforeUpdate:xe,updated:xe,beforeDestroy:xe,beforeUnmount:xe,destroyed:xe,unmounted:xe,activated:xe,deactivated:xe,errorCaptured:xe,serverPrefetch:xe,components:an,directives:an,watch:fa,provide:qr,inject:ua};function qr(e,t){return t?e?function(){return he(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function ua(e,t){return an(zs(e),zs(t))}function zs(e){if(j(e)){const t={};for(let n=0;n1)return n&&W(t)?t.call(s&&s.proxy):t}}function pa(){return!!(Ft()||Nt)}const Xi={},Zi=()=>Object.create(Xi),el=e=>Object.getPrototypeOf(e)===Xi;function ga(e,t,n,s=!1){const r={},o=Zi();e.propsDefaults=Object.create(null),tl(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:xi(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function ma(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=z(r),[c]=e.propsOptions;let u=!1;if((s||i>0)&&!(i&16)){if(i&8){const a=e.vnode.dynamicProps;for(let f=0;f{c=!0;const[d,g]=nl(f,t,!0);he(i,d),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!o&&!c)return se(e)&&s.set(e,Wt),Wt;if(j(o))for(let a=0;ae==="_"||e==="__"||e==="_ctx"||e==="$stable",Cr=e=>j(e)?e.map(Ze):[Ze(e)],ya=(e,t,n)=>{if(t._n)return t;const s=Gc((...r)=>Cr(t(...r)),n);return s._c=!1,s},sl=(e,t,n)=>{const s=e._ctx;for(const r in e){if(xr(r))continue;const o=e[r];if(W(o))t[r]=ya(r,o,s);else if(o!=null){const i=Cr(o);t[r]=()=>i}}},rl=(e,t)=>{const n=Cr(t);e.slots.default=()=>n},ol=(e,t,n)=>{for(const s in t)(n||!xr(s))&&(e[s]=t[s])},_a=(e,t,n)=>{const s=e.slots=Zi();if(e.vnode.shapeFlag&32){const r=t.__;r&&ks(s,"__",r,!0);const o=t._;o?(ol(s,t,n),n&&ks(s,"_",o,!0)):sl(t,s)}else t&&rl(e,t)},ba=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ie;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:ol(r,t,n):(o=!t.$stable,sl(t,r)),i=t}else t&&(rl(e,t),i={default:1});if(o)for(const l in r)!xr(l)&&i[l]==null&&delete r[l]},Ce=Da;function wa(e){return Sa(e)}function Sa(e,t){const n=ls();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:a,parentNode:f,nextSibling:d,setScopeId:g=ke,insertStaticContent:v}=e,w=(h,p,m,y=null,S=null,b=null,R=void 0,P=null,C=!!p.dynamicChildren)=>{if(h===p)return;h&&!It(h,p)&&(y=_(h),Oe(h,S,b,!0),h=null),p.patchFlag===-2&&(C=!1,p.dynamicChildren=null);const{type:E,ref:V,shapeFlag:I}=p;switch(E){case bs:D(h,p,m,y);break;case _e:O(h,p,m,y);break;case Wn:h==null&&T(p,m,y,R);break;case Ae:N(h,p,m,y,S,b,R,P,C);break;default:I&1?k(h,p,m,y,S,b,R,P,C):I&6?Y(h,p,m,y,S,b,R,P,C):(I&64||I&128)&&E.process(h,p,m,y,S,b,R,P,C,F)}V!=null&&S?pn(V,h&&h.ref,b,p||h,!p):V==null&&h&&h.ref!=null&&pn(h.ref,null,b,h,!0)},D=(h,p,m,y)=>{if(h==null)s(p.el=l(p.children),m,y);else{const S=p.el=h.el;p.children!==h.children&&u(S,p.children)}},O=(h,p,m,y)=>{h==null?s(p.el=c(p.children||""),m,y):p.el=h.el},T=(h,p,m,y)=>{[h.el,h.anchor]=v(h.children,p,m,y,h.el,h.anchor)},M=({el:h,anchor:p},m,y)=>{let S;for(;h&&h!==p;)S=d(h),s(h,m,y),h=S;s(p,m,y)},L=({el:h,anchor:p})=>{let m;for(;h&&h!==p;)m=d(h),r(h),h=m;r(p)},k=(h,p,m,y,S,b,R,P,C)=>{p.type==="svg"?R="svg":p.type==="math"&&(R="mathml"),h==null?Q(p,m,y,S,b,R,P,C):x(h,p,S,b,R,P,C)},Q=(h,p,m,y,S,b,R,P)=>{let C,E;const{props:V,shapeFlag:I,transition:H,dirs:U}=h;if(C=h.el=i(h.type,b,V&&V.is,V),I&8?a(C,h.children):I&16&&B(h.children,C,null,y,S,Ls(h,b),R,P),U&&Ot(h,null,y,"created"),q(C,h,h.scopeId,R,y),V){for(const ce in V)ce!=="value"&&!un(ce)&&o(C,ce,null,V[ce],b,y);"value"in V&&o(C,"value",null,V.value,b),(E=V.onVnodeBeforeMount)&&Je(E,y,h)}U&&Ot(h,null,y,"beforeMount");const X=Ea(S,H);X&&H.beforeEnter(C),s(C,p,m),((E=V&&V.onVnodeMounted)||X||U)&&Ce(()=>{E&&Je(E,y,h),X&&H.enter(C),U&&Ot(h,null,y,"mounted")},S)},q=(h,p,m,y,S)=>{if(m&&g(h,m),y)for(let b=0;b{for(let E=C;E{const P=p.el=h.el;let{patchFlag:C,dynamicChildren:E,dirs:V}=p;C|=h.patchFlag&16;const I=h.props||ie,H=p.props||ie;let U;if(m&&Rt(m,!1),(U=H.onVnodeBeforeUpdate)&&Je(U,m,p,h),V&&Ot(p,h,m,"beforeUpdate"),m&&Rt(m,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(P,""),E?K(h.dynamicChildren,E,P,m,y,Ls(p,S),b):R||Z(h,p,P,null,m,y,Ls(p,S),b,!1),C>0){if(C&16)J(P,I,H,m,S);else if(C&2&&I.class!==H.class&&o(P,"class",null,H.class,S),C&4&&o(P,"style",I.style,H.style,S),C&8){const X=p.dynamicProps;for(let ce=0;ce{U&&Je(U,m,p,h),V&&Ot(p,h,m,"updated")},y)},K=(h,p,m,y,S,b,R)=>{for(let P=0;P{if(p!==m){if(p!==ie)for(const b in p)!un(b)&&!(b in m)&&o(h,b,p[b],null,S,y);for(const b in m){if(un(b))continue;const R=m[b],P=p[b];R!==P&&b!=="value"&&o(h,b,P,R,S,y)}"value"in m&&o(h,"value",p.value,m.value,S)}},N=(h,p,m,y,S,b,R,P,C)=>{const E=p.el=h?h.el:l(""),V=p.anchor=h?h.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:U}=p;U&&(P=P?P.concat(U):U),h==null?(s(E,m,y),s(V,m,y),B(p.children||[],m,V,S,b,R,P,C)):I>0&&I&64&&H&&h.dynamicChildren?(K(h.dynamicChildren,H,m,S,b,R,P),(p.key!=null||S&&p===S.subTree)&&Pr(h,p,!0)):Z(h,p,m,V,S,b,R,P,C)},Y=(h,p,m,y,S,b,R,P,C)=>{p.slotScopeIds=P,h==null?p.shapeFlag&512?S.ctx.activate(p,m,y,R,C):de(p,m,y,S,b,R,C):Ee(h,p,C)},de=(h,p,m,y,S,b,R)=>{const P=h.component=Ka(h,y,S);if(ms(h)&&(P.ctx.renderer=F),Ua(P,!1,R),P.asyncDep){if(S&&S.registerDep(P,re,R),!h.el){const C=P.subTree=Se(_e);O(null,C,p,m),h.placeholder=C.el}}else re(P,h,p,m,S,b,R)},Ee=(h,p,m)=>{const y=p.component=h.component;if(La(h,p,m))if(y.asyncDep&&!y.asyncResolved){G(y,p,m);return}else y.next=p,y.update();else p.el=h.el,y.vnode=p},re=(h,p,m,y,S,b,R)=>{const P=()=>{if(h.isMounted){let{next:I,bu:H,u:U,parent:X,vnode:ce}=h;{const ze=il(h);if(ze){I&&(I.el=ce.el,G(h,I,R)),ze.asyncDep.then(()=>{h.isUnmounted||P()});return}}let ne=I,Re;Rt(h,!1),I?(I.el=ce.el,G(h,I,R)):I=ce,H&&Bn(H),(Re=I.props&&I.props.onVnodeBeforeUpdate)&&Je(Re,X,I,ce),Rt(h,!0);const Te=Yr(h),qe=h.subTree;h.subTree=Te,w(qe,Te,f(qe.el),_(qe),h,S,b),I.el=Te.el,ne===null&&Na(h,Te.el),U&&Ce(U,S),(Re=I.props&&I.props.onVnodeUpdated)&&Ce(()=>Je(Re,X,I,ce),S)}else{let I;const{el:H,props:U}=p,{bm:X,m:ce,parent:ne,root:Re,type:Te}=h,qe=zt(p);Rt(h,!1),X&&Bn(X),!qe&&(I=U&&U.onVnodeBeforeMount)&&Je(I,ne,p),Rt(h,!0);{Re.ce&&Re.ce._def.shadowRoot!==!1&&Re.ce._injectChildStyle(Te);const ze=h.subTree=Yr(h);w(null,ze,m,y,h,S,b),p.el=ze.el}if(ce&&Ce(ce,S),!qe&&(I=U&&U.onVnodeMounted)){const ze=p;Ce(()=>Je(I,ne,ze),S)}(p.shapeFlag&256||ne&&zt(ne.vnode)&&ne.vnode.shapeFlag&256)&&h.a&&Ce(h.a,S),h.isMounted=!0,p=m=y=null}};h.scope.on();const C=h.effect=new ui(P);h.scope.off();const E=h.update=C.run.bind(C),V=h.job=C.runIfDirty.bind(C);V.i=h,V.id=h.uid,C.scheduler=()=>_r(V),Rt(h,!0),E()},G=(h,p,m)=>{p.component=h;const y=h.vnode.props;h.vnode=p,h.next=null,ma(h,p.props,y,m),ba(h,p.children,m),ct(),Hr(h),at()},Z=(h,p,m,y,S,b,R,P,C=!1)=>{const E=h&&h.children,V=h?h.shapeFlag:0,I=p.children,{patchFlag:H,shapeFlag:U}=p;if(H>0){if(H&128){dt(E,I,m,y,S,b,R,P,C);return}else if(H&256){et(E,I,m,y,S,b,R,P,C);return}}U&8?(V&16&&Ne(E,S,b),I!==E&&a(m,I)):V&16?U&16?dt(E,I,m,y,S,b,R,P,C):Ne(E,S,b,!0):(V&8&&a(m,""),U&16&&B(I,m,y,S,b,R,P,C))},et=(h,p,m,y,S,b,R,P,C)=>{h=h||Wt,p=p||Wt;const E=h.length,V=p.length,I=Math.min(E,V);let H;for(H=0;HV?Ne(h,S,b,!0,!1,I):B(p,m,y,S,b,R,P,C,I)},dt=(h,p,m,y,S,b,R,P,C)=>{let E=0;const V=p.length;let I=h.length-1,H=V-1;for(;E<=I&&E<=H;){const U=h[E],X=p[E]=C?_t(p[E]):Ze(p[E]);if(It(U,X))w(U,X,m,null,S,b,R,P,C);else break;E++}for(;E<=I&&E<=H;){const U=h[I],X=p[H]=C?_t(p[H]):Ze(p[H]);if(It(U,X))w(U,X,m,null,S,b,R,P,C);else break;I--,H--}if(E>I){if(E<=H){const U=H+1,X=UH)for(;E<=I;)Oe(h[E],S,b,!0),E++;else{const U=E,X=E,ce=new Map;for(E=X;E<=H;E++){const Ie=p[E]=C?_t(p[E]):Ze(p[E]);Ie.key!=null&&ce.set(Ie.key,E)}let ne,Re=0;const Te=H-X+1;let qe=!1,ze=0;const sn=new Array(Te);for(E=0;E=Te){Oe(Ie,S,b,!0);continue}let Qe;if(Ie.key!=null)Qe=ce.get(Ie.key);else for(ne=X;ne<=H;ne++)if(sn[ne-X]===0&&It(Ie,p[ne])){Qe=ne;break}Qe===void 0?Oe(Ie,S,b,!0):(sn[Qe-X]=E+1,Qe>=ze?ze=Qe:qe=!0,w(Ie,p[Qe],m,null,S,b,R,P,C),Re++)}const Mr=qe?xa(sn):Wt;for(ne=Mr.length-1,E=Te-1;E>=0;E--){const Ie=X+E,Qe=p[Ie],Lr=p[Ie+1],Nr=Ie+1{const{el:b,type:R,transition:P,children:C,shapeFlag:E}=h;if(E&6){Ge(h.component.subTree,p,m,y);return}if(E&128){h.suspense.move(p,m,y);return}if(E&64){R.move(h,p,m,F);return}if(R===Ae){s(b,p,m);for(let I=0;IP.enter(b),S);else{const{leave:I,delayLeave:H,afterLeave:U}=P,X=()=>{h.ctx.isUnmounted?r(b):s(b,p,m)},ce=()=>{I(b,()=>{X(),U&&U()})};H?H(b,X,ce):ce()}else s(b,p,m)},Oe=(h,p,m,y=!1,S=!1)=>{const{type:b,props:R,ref:P,children:C,dynamicChildren:E,shapeFlag:V,patchFlag:I,dirs:H,cacheIndex:U}=h;if(I===-2&&(S=!1),P!=null&&(ct(),pn(P,null,m,h,!0),at()),U!=null&&(p.renderCache[U]=void 0),V&256){p.ctx.deactivate(h);return}const X=V&1&&H,ce=!zt(h);let ne;if(ce&&(ne=R&&R.onVnodeBeforeUnmount)&&Je(ne,p,h),V&6)Nn(h.component,m,y);else{if(V&128){h.suspense.unmount(m,y);return}X&&Ot(h,null,p,"beforeUnmount"),V&64?h.type.remove(h,p,m,F,y):E&&!E.hasOnce&&(b!==Ae||I>0&&I&64)?Ne(E,p,m,!1,!0):(b===Ae&&I&384||!S&&V&16)&&Ne(C,p,m),y&&jt(h)}(ce&&(ne=R&&R.onVnodeUnmounted)||X)&&Ce(()=>{ne&&Je(ne,p,h),X&&Ot(h,null,p,"unmounted")},m)},jt=h=>{const{type:p,el:m,anchor:y,transition:S}=h;if(p===Ae){Ht(m,y);return}if(p===Wn){L(h);return}const b=()=>{r(m),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(h.shapeFlag&1&&S&&!S.persisted){const{leave:R,delayLeave:P}=S,C=()=>R(m,b);P?P(h.el,b,C):C()}else b()},Ht=(h,p)=>{let m;for(;h!==p;)m=d(h),r(h),h=m;r(p)},Nn=(h,p,m)=>{const{bum:y,scope:S,job:b,subTree:R,um:P,m:C,a:E,parent:V,slots:{__:I}}=h;Jr(C),Jr(E),y&&Bn(y),V&&j(I)&&I.forEach(H=>{V.renderCache[H]=void 0}),S.stop(),b&&(b.flags|=8,Oe(R,h,p,m)),P&&Ce(P,p),Ce(()=>{h.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&h.asyncDep&&!h.asyncResolved&&h.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},Ne=(h,p,m,y=!1,S=!1,b=0)=>{for(let R=b;R{if(h.shapeFlag&6)return _(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const p=d(h.anchor||h.el),m=p&&p[Li];return m?d(m):p};let $=!1;const A=(h,p,m)=>{h==null?p._vnode&&Oe(p._vnode,null,null,!0):w(p._vnode||null,h,p,null,null,null,m),p._vnode=h,$||($=!0,Hr(),Ai(),$=!1)},F={p:w,um:Oe,m:Ge,r:jt,mt:de,mc:B,pc:Z,pbc:K,n:_,o:e};return{render:A,hydrate:void 0,createApp:ha(A)}}function Ls({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Rt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ea(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Pr(e,t,n=!1){const s=e.children,r=t.children;if(j(s)&&j(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function il(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:il(t)}function Jr(e){if(e)for(let t=0;tFe(Ca);function Oa(e,t){return Or(e,null,t)}function me(e,t,n){return Or(e,t,n)}function Or(e,t,n=ie){const{immediate:s,deep:r,flush:o,once:i}=n,l=he({},n),c=t&&s||!t&&o!=="post";let u;if(Pn){if(o==="sync"){const g=Pa();u=g.__watcherHandles||(g.__watcherHandles=[])}else if(!c){const g=()=>{};return g.stop=ke,g.resume=ke,g.pause=ke,g}}const a=be;l.call=(g,v,w)=>Ue(g,a,v,w);let f=!1;o==="post"?l.scheduler=g=>{Ce(g,a&&a.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(g,v)=>{v?g():_r(g)}),l.augmentJob=g=>{t&&(g.flags|=4),f&&(g.flags|=2,a&&(g.id=a.uid,g.i=a))};const d=Bc(e,t,l);return Pn&&(u?u.push(d):c&&d()),d}function Ra(e,t,n){const s=this.proxy,r=ue(e)?e.includes(".")?ll(s,e):()=>s[e]:e.bind(s,s);let o;W(t)?o=t:(o=t.handler,n=t);const i=Ln(this),l=Or(r,o.bind(s),n);return i(),l}function ll(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ve(t)}Modifiers`]||e[`${Pt(t)}Modifiers`];function Aa(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ie;let r=n;const o=t.startsWith("update:"),i=o&&Ta(s,t.slice(7));i&&(i.trim&&(r=n.map(a=>ue(a)?a.trim():a)),i.number&&(r=n.map(zn)));let l,c=s[l=kn(t)]||s[l=kn(Ve(t))];!c&&o&&(c=s[l=kn(Pt(t))]),c&&Ue(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ue(u,e,6,r)}}function cl(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!W(e)){const c=u=>{const a=cl(u,t,!0);a&&(l=!0,he(i,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(se(e)&&s.set(e,null),null):(j(o)?o.forEach(c=>i[c]=null):he(i,o),se(e)&&s.set(e,i),i)}function _s(e,t){return!e||!rs(t)?!1:(t=t.slice(2).replace(/Once$/,""),te(e,t[0].toLowerCase()+t.slice(1))||te(e,Pt(t))||te(e,t))}function Yr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:c,render:u,renderCache:a,props:f,data:d,setupState:g,ctx:v,inheritAttrs:w}=e,D=Zn(e);let O,T;try{if(n.shapeFlag&4){const L=r||s,k=L;O=Ze(u.call(k,L,a,f,g,d,v)),T=l}else{const L=t;O=Ze(L.length>1?L(f,{attrs:l,slots:i,emit:c}):L(f,null)),T=t.props?l:Ia(l)}}catch(L){mn.length=0,ps(L,e,1),O=Se(_e)}let M=O;if(T&&w!==!1){const L=Object.keys(T),{shapeFlag:k}=M;L.length&&k&7&&(o&&L.some(cr)&&(T=Ma(T,o)),M=Et(M,T,!1,!0))}return n.dirs&&(M=Et(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(n.dirs):n.dirs),n.transition&&$t(M,n.transition),O=M,Zn(D),O}const Ia=e=>{let t;for(const n in e)(n==="class"||n==="style"||rs(n))&&((t||(t={}))[n]=e[n]);return t},Ma=(e,t)=>{const n={};for(const s in e)(!cr(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function La(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:c}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Xr(s,i,u):!!i;if(c&8){const a=t.dynamicProps;for(let f=0;fe.__isSuspense;function Da(e,t){t&&t.pendingBranch?j(e)?t.effects.push(...e):t.effects.push(e):Wc(e)}const Ae=Symbol.for("v-fgt"),bs=Symbol.for("v-txt"),_e=Symbol.for("v-cmt"),Wn=Symbol.for("v-stc"),mn=[];let Me=null;function Js(e=!1){mn.push(Me=e?null:[])}function $a(){mn.pop(),Me=mn[mn.length-1]||null}let xn=1;function Zr(e,t=!1){xn+=e,e<0&&Me&&t&&(Me.hasOnce=!0)}function ul(e){return e.dynamicChildren=xn>0?Me||Wt:null,$a(),xn>0&&Me&&Me.push(e),e}function Nd(e,t,n,s,r,o){return ul(dl(e,t,n,s,r,o,!0))}function Ys(e,t,n,s,r){return ul(Se(e,t,n,s,r,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function It(e,t){return e.type===t.type&&e.key===t.key}const fl=({key:e})=>e??null,Gn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ue(e)||fe(e)||W(e)?{i:ge,r:e,k:t,f:!!n}:e:null);function dl(e,t=null,n=null,s=0,r=null,o=e===Ae?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&fl(t),ref:t&&Gn(t),scopeId:Mi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ge};return l?(Rr(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ue(n)?8:16),xn>0&&!i&&Me&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Me.push(c),c}const Se=Fa;function Fa(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Gi)&&(e=_e),Cn(e)){const l=Et(e,t,!0);return n&&Rr(l,n),xn>0&&!o&&Me&&(l.shapeFlag&6?Me[Me.indexOf(e)]=l:Me.push(l)),l.patchFlag=-2,l}if(za(e)&&(e=e.__vccOpts),t){t=ja(t);let{class:l,style:c}=t;l&&!ue(l)&&(t.class=as(l)),se(c)&&(In(c)&&!j(c)&&(c=he({},c)),t.style=cs(c))}const i=ue(e)?1:al(e)?128:Ni(e)?64:se(e)?4:W(e)?2:0;return dl(e,t,n,s,r,i,o,!0)}function ja(e){return e?In(e)||el(e)?he({},e):e:null}function Et(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:c}=e,u=t?Va(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&fl(u),ref:t&&t.ref?n&&o?j(o)?o.concat(Gn(t)):[o,Gn(t)]:Gn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Et(e.ssContent),ssFallback:e.ssFallback&&Et(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&$t(a,c.clone(a)),a}function Ha(e=" ",t=0){return Se(bs,null,e,t)}function Dd(e,t){const n=Se(Wn,null,e);return n.staticCount=t,n}function $d(e="",t=!1){return t?(Js(),Ys(_e,null,e)):Se(_e,null,e)}function Ze(e){return e==null||typeof e=="boolean"?Se(_e):j(e)?Se(Ae,null,e.slice()):Cn(e)?_t(e):Se(bs,null,String(e))}function _t(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Et(e)}function Rr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(j(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Rr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!el(t)?t._ctx=ge:r===3&&ge&&(ge.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:ge},n=32):(t=String(t),s&64?(n=16,t=[Ha(t)]):n=8);e.children=t,e.shapeFlag|=n}function Va(...e){const t={};for(let n=0;nbe||ge;let ts,Xs;{const e=ls(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};ts=t("__VUE_INSTANCE_SETTERS__",n=>be=n),Xs=t("__VUE_SSR_SETTERS__",n=>Pn=n)}const Ln=e=>{const t=be;return ts(e),e.scope.on(),()=>{e.scope.off(),ts(t)}},eo=()=>{be&&be.scope.off(),ts(null)};function hl(e){return e.vnode.shapeFlag&4}let Pn=!1;function Ua(e,t=!1,n=!1){t&&Xs(t);const{props:s,children:r}=e.vnode,o=hl(e);ga(e,s,o,t),_a(e,r,n||t);const i=o?Wa(e,t):void 0;return t&&Xs(!1),i}function Wa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ia);const{setup:s}=n;if(s){ct();const r=e.setupContext=s.length>1?gl(e):null,o=Ln(e),i=Mn(s,e,0,[e.props,r]),l=ti(i);if(at(),o(),(l||e.sp)&&!zt(e)&&Bi(e),l){if(i.then(eo,eo),t)return i.then(c=>{to(e,c)}).catch(c=>{ps(c,e,0)});e.asyncDep=i}else to(e,i)}else pl(e)}function to(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=Pi(t)),pl(e)}function pl(e,t,n){const s=e.type;e.render||(e.render=s.render||ke);{const r=Ln(e);ct();try{la(e)}finally{at(),r()}}}const Ga={get(e,t){return ye(e,"get",""),e[t]}};function gl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ga),slots:e.slots,emit:e.emit,expose:t}}function ws(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Pi(yr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in gn)return gn[n](e)},has(t,n){return n in t||n in gn}})):e.proxy}function qa(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function za(e){return W(e)&&"__vccOpts"in e}const we=(e,t)=>Vc(e,t,Pn);function Qt(e,t,n){const s=arguments.length;return s===2?se(t)&&!j(t)?Cn(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Cn(n)&&(n=[n]),Se(e,t,n))}const ml="3.5.18",Fd=ke;/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Zs;const no=typeof window<"u"&&window.trustedTypes;if(no)try{Zs=no.createPolicy("vue",{createHTML:e=>e})}catch{}const vl=Zs?e=>Zs.createHTML(e):e=>e,Qa="http://www.w3.org/2000/svg",Ja="http://www.w3.org/1998/Math/MathML",st=typeof document<"u"?document:null,so=st&&st.createElement("template"),Ya={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?st.createElementNS(Qa,e):t==="mathml"?st.createElementNS(Ja,e):n?st.createElement(e,{is:n}):st.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>st.createTextNode(e),createComment:e=>st.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>st.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{so.innerHTML=vl(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=so.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ht="transition",on="animation",Jt=Symbol("_vtc"),yl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},_l=he({},ji,yl),Xa=e=>(e.displayName="Transition",e.props=_l,e),jd=Xa((e,{slots:t})=>Qt(Qc,bl(e),t)),Tt=(e,t=[])=>{j(e)?e.forEach(n=>n(...t)):e&&e(...t)},ro=e=>e?j(e)?e.some(t=>t.length>1):e.length>1:!1;function bl(e){const t={};for(const N in e)N in yl||(t[N]=e[N]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:u=i,appearToClass:a=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,v=Za(r),w=v&&v[0],D=v&&v[1],{onBeforeEnter:O,onEnter:T,onEnterCancelled:M,onLeave:L,onLeaveCancelled:k,onBeforeAppear:Q=O,onAppear:q=T,onAppearCancelled:B=M}=t,x=(N,Y,de,Ee)=>{N._enterCancelled=Ee,gt(N,Y?a:l),gt(N,Y?u:i),de&&de()},K=(N,Y)=>{N._isLeaving=!1,gt(N,f),gt(N,g),gt(N,d),Y&&Y()},J=N=>(Y,de)=>{const Ee=N?q:T,re=()=>x(Y,N,de);Tt(Ee,[Y,re]),oo(()=>{gt(Y,N?c:o),Ye(Y,N?a:l),ro(Ee)||io(Y,s,w,re)})};return he(t,{onBeforeEnter(N){Tt(O,[N]),Ye(N,o),Ye(N,i)},onBeforeAppear(N){Tt(Q,[N]),Ye(N,c),Ye(N,u)},onEnter:J(!1),onAppear:J(!0),onLeave(N,Y){N._isLeaving=!0;const de=()=>K(N,Y);Ye(N,f),N._enterCancelled?(Ye(N,d),er()):(er(),Ye(N,d)),oo(()=>{N._isLeaving&&(gt(N,f),Ye(N,g),ro(L)||io(N,s,D,de))}),Tt(L,[N,de])},onEnterCancelled(N){x(N,!1,void 0,!0),Tt(M,[N])},onAppearCancelled(N){x(N,!0,void 0,!0),Tt(B,[N])},onLeaveCancelled(N){K(N),Tt(k,[N])}})}function Za(e){if(e==null)return null;if(se(e))return[Ns(e.enter),Ns(e.leave)];{const t=Ns(e);return[t,t]}}function Ns(e){return sc(e)}function Ye(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function gt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function oo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let eu=0;function io(e,t,n,s){const r=e._endId=++eu,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=wl(e,t);if(!i)return s();const u=i+"end";let a=0;const f=()=>{e.removeEventListener(u,d),o()},d=g=>{g.target===e&&++a>=c&&f()};setTimeout(()=>{a(n[v]||"").split(", "),r=s(`${ht}Delay`),o=s(`${ht}Duration`),i=lo(r,o),l=s(`${on}Delay`),c=s(`${on}Duration`),u=lo(l,c);let a=null,f=0,d=0;t===ht?i>0&&(a=ht,f=i,d=o.length):t===on?u>0&&(a=on,f=u,d=c.length):(f=Math.max(i,u),a=f>0?i>u?ht:on:null,d=a?a===ht?o.length:c.length:0);const g=a===ht&&/\b(transform|all)(,|$)/.test(s(`${ht}Property`).toString());return{type:a,timeout:f,propCount:d,hasTransform:g}}function lo(e,t){for(;e.lengthco(n)+co(e[s])))}function co(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function er(){return document.body.offsetHeight}function tu(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ns=Symbol("_vod"),Sl=Symbol("_vsh"),Hd={beforeMount(e,{value:t},{transition:n}){e[ns]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ln(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),ln(e,!0),s.enter(e)):s.leave(e,()=>{ln(e,!1)}):ln(e,t))},beforeUnmount(e,{value:t}){ln(e,t)}};function ln(e,t){e.style.display=t?e[ns]:"none",e[Sl]=!t}const nu=Symbol(""),su=/(^|;)\s*display\s*:/;function ru(e,t,n){const s=e.style,r=ue(n);let o=!1;if(n&&!r){if(t)if(ue(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&qn(s,l,"")}else for(const i in t)n[i]==null&&qn(s,i,"");for(const i in n)i==="display"&&(o=!0),qn(s,i,n[i])}else if(r){if(t!==n){const i=s[nu];i&&(n+=";"+i),s.cssText=n,o=su.test(n)}}else t&&e.removeAttribute("style");ns in e&&(e[ns]=o?s.display:"",e[Sl]&&(s.display="none"))}const ao=/\s*!important$/;function qn(e,t,n){if(j(n))n.forEach(s=>qn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ou(e,t);ao.test(n)?e.setProperty(Pt(s),n.replace(ao,""),"important"):e[s]=n}}const uo=["Webkit","Moz","ms"],Ds={};function ou(e,t){const n=Ds[t];if(n)return n;let s=Ve(t);if(s!=="filter"&&s in e)return Ds[t]=s;s=is(s);for(let r=0;r$s||(au.then(()=>$s=0),$s=Date.now());function fu(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ue(du(s,n.value),t,5,[s])};return n.value=e,n.attached=uu(),n}function du(e,t){if(j(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const vo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,hu=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?tu(e,s,i):t==="style"?ru(e,n,s):rs(t)?cr(t)||lu(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):pu(e,t,s,i))?(po(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ho(e,t,s,i,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ue(s))?po(e,Ve(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ho(e,t,s,i))};function pu(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vo(t)&&W(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return vo(t)&&ue(n)?!1:t in e}const El=new WeakMap,xl=new WeakMap,ss=Symbol("_moveCb"),yo=Symbol("_enterCb"),gu=e=>(delete e.props.mode,e),mu=gu({name:"TransitionGroup",props:he({},_l,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ft(),s=Fi();let r,o;return Ui(()=>{if(!r.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!bu(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(vu),r.forEach(yu);const l=r.filter(_u);er(),l.forEach(c=>{const u=c.el,a=u.style;Ye(u,i),a.transform=a.webkitTransform=a.transitionDuration="";const f=u[ss]=d=>{d&&d.target!==u||(!d||/transform$/.test(d.propertyName))&&(u.removeEventListener("transitionend",f),u[ss]=null,gt(u,i))};u.addEventListener("transitionend",f)}),r=[]}),()=>{const i=z(e),l=bl(i);let c=i.tag||Ae;if(r=[],o)for(let u=0;u{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:i}=wl(s);return o.removeChild(s),i}const xt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return j(t)?n=>Bn(t,n):t};function wu(e){e.target.composing=!0}function _o(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const je=Symbol("_assign"),bo={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[je]=xt(r);const o=s||r.props&&r.props.type==="number";it(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=zn(l)),e[je](l)}),n&&it(e,"change",()=>{e.value=e.value.trim()}),t||(it(e,"compositionstart",wu),it(e,"compositionend",_o),it(e,"change",_o))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[je]=xt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?zn(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Su={deep:!0,created(e,t,n){e[je]=xt(n),it(e,"change",()=>{const s=e._modelValue,r=Yt(e),o=e.checked,i=e[je];if(j(s)){const l=fr(s,r),c=l!==-1;if(o&&!c)i(s.concat(r));else if(!o&&c){const u=[...s];u.splice(l,1),i(u)}}else if(tn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(Cl(e,o))})},mounted:wo,beforeUpdate(e,t,n){e[je]=xt(n),wo(e,t,n)}};function wo(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(j(t))r=fr(t,s.props.value)>-1;else if(tn(t))r=t.has(s.props.value);else{if(t===n)return;r=Dt(t,Cl(e,!0))}e.checked!==r&&(e.checked=r)}const Eu={created(e,{value:t},n){e.checked=Dt(t,n.props.value),e[je]=xt(n),it(e,"change",()=>{e[je](Yt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[je]=xt(s),t!==n&&(e.checked=Dt(t,s.props.value))}},xu={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=tn(t);it(e,"change",()=>{const o=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?zn(Yt(i)):Yt(i));e[je](e.multiple?r?new Set(o):o:o[0]),e._assigning=!0,nn(()=>{e._assigning=!1})}),e[je]=xt(s)},mounted(e,{value:t}){So(e,t)},beforeUpdate(e,t,n){e[je]=xt(n)},updated(e,{value:t}){e._assigning||So(e,t)}};function So(e,t){const n=e.multiple,s=j(t);if(!(n&&!s&&!tn(t))){for(let r=0,o=e.options.length;rString(u)===String(l)):i.selected=fr(t,l)>-1}else i.selected=t.has(l);else if(Dt(Yt(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Yt(e){return"_value"in e?e._value:e.value}function Cl(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const kd={created(e,t,n){Vn(e,t,n,null,"created")},mounted(e,t,n){Vn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Vn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Vn(e,t,n,s,"updated")}};function Cu(e,t){switch(e){case"SELECT":return xu;case"TEXTAREA":return bo;default:switch(t){case"checkbox":return Su;case"radio":return Eu;default:return bo}}}function Vn(e,t,n,s,r){const i=Cu(e.tagName,n.props&&n.props.type)[r];i&&i(e,t,n,s)}const Pu=["ctrl","shift","alt","meta"],Ou={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pu.some(n=>e[`${n}Key`]&&!t.includes(n))},Bd=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const o=Pt(r.key);if(t.some(i=>i===o||Ru[i]===o))return e(r)})},Tu=he({patchProp:hu},Ya);let Eo;function Pl(){return Eo||(Eo=wa(Tu))}const Ud=(...e)=>{Pl().render(...e)},Wd=(...e)=>{const t=Pl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Iu(s);if(!r)return;const o=t._component;!W(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Au(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t};function Au(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Iu(e){return ue(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let Ol;const Ss=e=>Ol=e,Rl=Symbol();function tr(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var vn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(vn||(vn={}));function Gd(){const e=ci(!0),t=e.run(()=>le({}));let n=[],s=[];const r=yr({install(o){Ss(r),r._a=o,o.provide(Rl,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const Tl=()=>{};function xo(e,t,n,s=Tl){e.push(t);const r=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&dr()&&ai(r),r}function kt(e,...t){e.slice().forEach(n=>{n(...t)})}const Mu=e=>e(),Co=Symbol(),Fs=Symbol();function nr(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];tr(r)&&tr(s)&&e.hasOwnProperty(n)&&!fe(s)&&!lt(s)?e[n]=nr(r,s):e[n]=s}return e}const Lu=Symbol();function Nu(e){return!tr(e)||!e.hasOwnProperty(Lu)}const{assign:mt}=Object;function Du(e){return!!(fe(e)&&e.effect)}function $u(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let c;function u(){l||(n.state.value[e]=r?r():{});const a=Dc(n.state.value[e]);return mt(a,o,Object.keys(i||{}).reduce((f,d)=>(f[d]=yr(we(()=>{Ss(n);const g=n._s.get(e);return i[d].call(g,g)})),f),{}))}return c=Al(e,u,t,n,s,!0),c}function Al(e,t,n={},s,r,o){let i;const l=mt({actions:{}},n),c={deep:!0};let u,a,f=[],d=[],g;const v=s.state.value[e];!o&&!v&&(s.state.value[e]={}),le({});let w;function D(B){let x;u=a=!1,typeof B=="function"?(B(s.state.value[e]),x={type:vn.patchFunction,storeId:e,events:g}):(nr(s.state.value[e],B),x={type:vn.patchObject,payload:B,storeId:e,events:g});const K=w=Symbol();nn().then(()=>{w===K&&(u=!0)}),a=!0,kt(f,x,s.state.value[e])}const O=o?function(){const{state:x}=n,K=x?x():{};this.$patch(J=>{mt(J,K)})}:Tl;function T(){i.stop(),f=[],d=[],s._s.delete(e)}const M=(B,x="")=>{if(Co in B)return B[Fs]=x,B;const K=function(){Ss(s);const J=Array.from(arguments),N=[],Y=[];function de(G){N.push(G)}function Ee(G){Y.push(G)}kt(d,{args:J,name:K[Fs],store:k,after:de,onError:Ee});let re;try{re=B.apply(this&&this.$id===e?this:k,J)}catch(G){throw kt(Y,G),G}return re instanceof Promise?re.then(G=>(kt(N,G),G)).catch(G=>(kt(Y,G),Promise.reject(G))):(kt(N,re),re)};return K[Co]=!0,K[Fs]=x,K},L={_p:s,$id:e,$onAction:xo.bind(null,d),$patch:D,$reset:O,$subscribe(B,x={}){const K=xo(f,B,x.detached,()=>J()),J=i.run(()=>me(()=>s.state.value[e],N=>{(x.flush==="sync"?a:u)&&B({storeId:e,type:vn.direct,events:g},N)},mt({},c,x)));return K},$dispose:T},k=An(L);s._s.set(e,k);const q=(s._a&&s._a.runWithContext||Mu)(()=>s._e.run(()=>(i=ci()).run(()=>t({action:M}))));for(const B in q){const x=q[B];if(fe(x)&&!Du(x)||lt(x))o||(v&&Nu(x)&&(fe(x)?x.value=v[B]:nr(x,v[B])),s.state.value[e][B]=x);else if(typeof x=="function"){const K=M(x,B);q[B]=K,l.actions[B]=x}}return mt(k,q),mt(z(k),q),Object.defineProperty(k,"$state",{get:()=>s.state.value[e],set:B=>{D(x=>{mt(x,B)})}}),s._p.forEach(B=>{mt(k,i.run(()=>B({store:k,app:s._a,pinia:s,options:l})))}),v&&o&&n.hydrate&&n.hydrate(k.$state,v),u=!0,a=!0,k}/*! #__NO_SIDE_EFFECTS__ */function qd(e,t,n){let s,r;const o=typeof t=="function";typeof e=="string"?(s=e,r=o?n:t):(r=e,s=e.id);function i(l,c){const u=pa();return l=l||(u?Fe(Rl,null):null),l&&Ss(l),l=Ol,l._s.has(s)||(o?Al(s,t,r,l):$u(s,r,l)),l._s.get(s)}return i.$id=s,i}function zd(e){{const t=z(e),n={};for(const s in t){const r=t[s];r.effect?n[s]=we({get:()=>e[s],set(o){e[s]=o}}):(fe(r)||lt(r))&&(n[s]=jc(e,s))}return n}}var Fu=Object.defineProperty,ju=Object.defineProperties,Hu=Object.getOwnPropertyDescriptors,Po=Object.getOwnPropertySymbols,Vu=Object.prototype.hasOwnProperty,ku=Object.prototype.propertyIsEnumerable,Oo=(e,t,n)=>t in e?Fu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Bu=(e,t)=>{for(var n in t||(t={}))Vu.call(t,n)&&Oo(e,n,t[n]);if(Po)for(var n of Po(t))ku.call(t,n)&&Oo(e,n,t[n]);return e},Ku=(e,t)=>ju(e,Hu(t));function Qd(e,t){var n;const s=hs();return Oa(()=>{s.value=e()},Ku(Bu({},t),{flush:(n=void 0)!=null?n:"sync"})),ds(s)}var Ro;const Es=typeof window<"u",Uu=e=>typeof e<"u",sr=e=>typeof e=="function",Wu=e=>typeof e=="string",Xt=()=>{},Gu=Es&&((Ro=window==null?void 0:window.navigator)==null?void 0:Ro.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Ct(e){return typeof e=="function"?e():Lt(e)}function Il(e,t){function n(...s){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(o)})}return n}function qu(e,t={}){let n,s,r=Xt;const o=l=>{clearTimeout(l),r(),r=Xt};return l=>{const c=Ct(e),u=Ct(t.maxWait);return n&&o(n),c<=0||u!==void 0&&u<=0?(s&&(o(s),s=null),Promise.resolve(l())):new Promise((a,f)=>{r=t.rejectOnCancel?f:a,u&&!s&&(s=setTimeout(()=>{n&&o(n),s=null,a(l())},u)),n=setTimeout(()=>{s&&o(s),s=null,a(l())},c)})}}function zu(e,t=!0,n=!0,s=!1){let r=0,o,i=!0,l=Xt,c;const u=()=>{o&&(clearTimeout(o),o=void 0,l(),l=Xt)};return f=>{const d=Ct(e),g=Date.now()-r,v=()=>c=f();return u(),d<=0?(r=Date.now(),v()):(g>d&&(n||!i)?(r=Date.now(),v()):t&&(c=new Promise((w,D)=>{l=s?D:w,o=setTimeout(()=>{r=Date.now(),i=!0,w(v()),u()},Math.max(0,d-g))})),!n&&!o&&(o=setTimeout(()=>i=!0,d)),i=!1,c)}}function Qu(e){return e}function Ju(e,t){let n,s,r;const o=le(!0),i=()=>{o.value=!0,r()};me(e,i,{flush:"sync"});const l=sr(t)?t:t.get,c=sr(t)?void 0:t.set,u=Nc((a,f)=>(s=a,r=f,{get(){return o.value&&(n=l(),o.value=!1),s(),n},set(d){c==null||c(d)}}));return Object.isExtensible(u)&&(u.trigger=i),u}function xs(e){return dr()?(ai(e),!0):!1}function Yu(e,t=200,n={}){return Il(qu(t,n),e)}function Jd(e,t=200,n={}){const s=le(e.value),r=Yu(()=>{s.value=e.value},t,n);return me(e,()=>r()),s}function Yd(e,t=200,n=!1,s=!0,r=!1){return Il(zu(t,n,s,r),e)}function Tr(e,t=!0){Ft()?ys(e):t?e():nn(e)}function Xd(e,t,n={}){const{immediate:s=!0}=n,r=le(!1);let o=null;function i(){o&&(clearTimeout(o),o=null)}function l(){r.value=!1,i()}function c(...u){i(),r.value=!0,o=setTimeout(()=>{r.value=!1,o=null,e(...u)},Ct(t))}return s&&(r.value=!0,Es&&c()),xs(l),{isPending:ds(r),start:c,stop:l}}function Le(e){var t;const n=Ct(e);return(t=n==null?void 0:n.$el)!=null?t:n}const ft=Es?window:void 0,Xu=Es?window.document:void 0;function He(...e){let t,n,s,r;if(Wu(e[0])||Array.isArray(e[0])?([n,s,r]=e,t=ft):[t,n,s,r]=e,!t)return Xt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const o=[],i=()=>{o.forEach(a=>a()),o.length=0},l=(a,f,d,g)=>(a.addEventListener(f,d,g),()=>a.removeEventListener(f,d,g)),c=me(()=>[Le(t),Ct(r)],([a,f])=>{i(),a&&o.push(...n.flatMap(d=>s.map(g=>l(a,d,g,f))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return xs(u),u}let To=!1;function Zd(e,t,n={}){const{window:s=ft,ignore:r=[],capture:o=!0,detectIframe:i=!1}=n;if(!s)return;Gu&&!To&&(To=!0,Array.from(s.document.body.children).forEach(d=>d.addEventListener("click",Xt)));let l=!0;const c=d=>r.some(g=>{if(typeof g=="string")return Array.from(s.document.querySelectorAll(g)).some(v=>v===d.target||d.composedPath().includes(v));{const v=Le(g);return v&&(d.target===v||d.composedPath().includes(v))}}),a=[He(s,"click",d=>{const g=Le(e);if(!(!g||g===d.target||d.composedPath().includes(g))){if(d.detail===0&&(l=!c(d)),!l){l=!0;return}t(d)}},{passive:!0,capture:o}),He(s,"pointerdown",d=>{const g=Le(e);g&&(l=!d.composedPath().includes(g)&&!c(d))},{passive:!0}),i&&He(s,"blur",d=>{var g;const v=Le(e);((g=s.document.activeElement)==null?void 0:g.tagName)==="IFRAME"&&!(v!=null&&v.contains(s.document.activeElement))&&t(d)})].filter(Boolean);return()=>a.forEach(d=>d())}function eh(e={}){var t;const{window:n=ft}=e,s=(t=e.document)!=null?t:n==null?void 0:n.document,r=Ju(()=>null,()=>s==null?void 0:s.activeElement);return n&&(He(n,"blur",o=>{o.relatedTarget===null&&r.trigger()},!0),He(n,"focus",r.trigger,!0)),r}function Ml(e,t=!1){const n=le(),s=()=>n.value=!!e();return s(),Tr(s,t),n}function Zu(e){return JSON.parse(JSON.stringify(e))}const Ao=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Io="__vueuse_ssr_handlers__";Ao[Io]=Ao[Io]||{};function th(e,t,{window:n=ft,initialValue:s=""}={}){const r=le(s),o=we(()=>{var i;return Le(t)||((i=n==null?void 0:n.document)==null?void 0:i.documentElement)});return me([o,()=>Ct(e)],([i,l])=>{var c;if(i&&n){const u=(c=n.getComputedStyle(i).getPropertyValue(l))==null?void 0:c.trim();r.value=u||s}},{immediate:!0}),me(r,i=>{var l;(l=o.value)!=null&&l.style&&o.value.style.setProperty(Ct(e),i)}),r}function nh({document:e=Xu}={}){if(!e)return le("visible");const t=le(e.visibilityState);return He(e,"visibilitychange",()=>{t.value=e.visibilityState}),t}var Mo=Object.getOwnPropertySymbols,ef=Object.prototype.hasOwnProperty,tf=Object.prototype.propertyIsEnumerable,nf=(e,t)=>{var n={};for(var s in e)ef.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&Mo)for(var s of Mo(e))t.indexOf(s)<0&&tf.call(e,s)&&(n[s]=e[s]);return n};function Ll(e,t,n={}){const s=n,{window:r=ft}=s,o=nf(s,["window"]);let i;const l=Ml(()=>r&&"ResizeObserver"in r),c=()=>{i&&(i.disconnect(),i=void 0)},u=me(()=>Le(e),f=>{c(),l.value&&r&&f&&(i=new ResizeObserver(t),i.observe(f,o))},{immediate:!0,flush:"post"}),a=()=>{c(),u()};return xs(a),{isSupported:l,stop:a}}function sh(e,t={}){const{reset:n=!0,windowResize:s=!0,windowScroll:r=!0,immediate:o=!0}=t,i=le(0),l=le(0),c=le(0),u=le(0),a=le(0),f=le(0),d=le(0),g=le(0);function v(){const w=Le(e);if(!w){n&&(i.value=0,l.value=0,c.value=0,u.value=0,a.value=0,f.value=0,d.value=0,g.value=0);return}const D=w.getBoundingClientRect();i.value=D.height,l.value=D.bottom,c.value=D.left,u.value=D.right,a.value=D.top,f.value=D.width,d.value=D.x,g.value=D.y}return Ll(e,v),me(()=>Le(e),w=>!w&&v()),r&&He("scroll",v,{capture:!0,passive:!0}),s&&He("resize",v,{passive:!0}),Tr(()=>{o&&v()}),{height:i,bottom:l,left:c,right:u,top:a,width:f,x:d,y:g,update:v}}function rh(e,t={width:0,height:0},n={}){const{window:s=ft,box:r="content-box"}=n,o=we(()=>{var c,u;return(u=(c=Le(e))==null?void 0:c.namespaceURI)==null?void 0:u.includes("svg")}),i=le(t.width),l=le(t.height);return Ll(e,([c])=>{const u=r==="border-box"?c.borderBoxSize:r==="content-box"?c.contentBoxSize:c.devicePixelContentBoxSize;if(s&&o.value){const a=Le(e);if(a){const f=s.getComputedStyle(a);i.value=parseFloat(f.width),l.value=parseFloat(f.height)}}else if(u){const a=Array.isArray(u)?u:[u];i.value=a.reduce((f,{inlineSize:d})=>f+d,0),l.value=a.reduce((f,{blockSize:d})=>f+d,0)}else i.value=c.contentRect.width,l.value=c.contentRect.height},n),me(()=>Le(e),c=>{i.value=c?t.width:0,l.value=c?t.height:0}),{width:i,height:l}}var Lo=Object.getOwnPropertySymbols,sf=Object.prototype.hasOwnProperty,rf=Object.prototype.propertyIsEnumerable,of=(e,t)=>{var n={};for(var s in e)sf.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&Lo)for(var s of Lo(e))t.indexOf(s)<0&&rf.call(e,s)&&(n[s]=e[s]);return n};function oh(e,t,n={}){const s=n,{window:r=ft}=s,o=of(s,["window"]);let i;const l=Ml(()=>r&&"MutationObserver"in r),c=()=>{i&&(i.disconnect(),i=void 0)},u=me(()=>Le(e),f=>{c(),l.value&&r&&f&&(i=new MutationObserver(t),i.observe(f,o))},{immediate:!0}),a=()=>{c(),u()};return xs(a),{isSupported:l,stop:a}}var No;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(No||(No={}));var lf=Object.defineProperty,Do=Object.getOwnPropertySymbols,cf=Object.prototype.hasOwnProperty,af=Object.prototype.propertyIsEnumerable,$o=(e,t,n)=>t in e?lf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,uf=(e,t)=>{for(var n in t||(t={}))cf.call(t,n)&&$o(e,n,t[n]);if(Do)for(var n of Do(t))af.call(t,n)&&$o(e,n,t[n]);return e};const ff={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};uf({linear:Qu},ff);function ih(e,t,n,s={}){var r,o,i;const{clone:l=!1,passive:c=!1,eventName:u,deep:a=!1,defaultValue:f}=s,d=Ft(),g=n||(d==null?void 0:d.emit)||((r=d==null?void 0:d.$emit)==null?void 0:r.bind(d))||((i=(o=d==null?void 0:d.proxy)==null?void 0:o.$emit)==null?void 0:i.bind(d==null?void 0:d.proxy));let v=u;t||(t="modelValue"),v=u||v||`update:${t.toString()}`;const w=O=>l?sr(l)?l(O):Zu(O):O,D=()=>Uu(e[t])?w(e[t]):f;if(c){const O=D(),T=le(O);return me(()=>e[t],M=>T.value=w(M)),me(T,M=>{(M!==e[t]||a)&&g(v,M)},{deep:a}),T}else return we({get(){return D()},set(O){g(v,O)}})}function lh({window:e=ft}={}){if(!e)return le(!1);const t=le(e.document.hasFocus());return He(e,"blur",()=>{t.value=!1}),He(e,"focus",()=>{t.value=!0}),t}function ch(e={}){const{window:t=ft,initialWidth:n=1/0,initialHeight:s=1/0,listenOrientation:r=!0,includeScrollbar:o=!0}=e,i=le(n),l=le(s),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};return c(),Tr(c),He("resize",c,{passive:!0}),r&&He("orientationchange",c,{passive:!0}),{width:i,height:l}}/*! + * vue-router v4.5.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const Ut=typeof document<"u";function Nl(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function df(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Nl(e.default)}const ee=Object.assign;function js(e,t){const n={};for(const s in t){const r=t[s];n[s]=We(r)?r.map(e):e(r)}return n}const yn=()=>{},We=Array.isArray,Dl=/#/g,hf=/&/g,pf=/\//g,gf=/=/g,mf=/\?/g,$l=/\+/g,vf=/%5B/g,yf=/%5D/g,Fl=/%5E/g,_f=/%60/g,jl=/%7B/g,bf=/%7C/g,Hl=/%7D/g,wf=/%20/g;function Ar(e){return encodeURI(""+e).replace(bf,"|").replace(vf,"[").replace(yf,"]")}function Sf(e){return Ar(e).replace(jl,"{").replace(Hl,"}").replace(Fl,"^")}function rr(e){return Ar(e).replace($l,"%2B").replace(wf,"+").replace(Dl,"%23").replace(hf,"%26").replace(_f,"`").replace(jl,"{").replace(Hl,"}").replace(Fl,"^")}function Ef(e){return rr(e).replace(gf,"%3D")}function xf(e){return Ar(e).replace(Dl,"%23").replace(mf,"%3F")}function Cf(e){return e==null?"":xf(e).replace(pf,"%2F")}function On(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Pf=/\/$/,Of=e=>e.replace(Pf,"");function Hs(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),o=t.slice(c+1,l>-1?l:t.length),r=e(o)),l>-1&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=If(s??t,n),{fullPath:s+(o&&"?")+o+i,path:s,query:r,hash:On(i)}}function Rf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Fo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Tf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Zt(t.matched[s],n.matched[r])&&Vl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Zt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Vl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Af(e[n],t[n]))return!1;return!0}function Af(e,t){return We(e)?jo(e,t):We(t)?jo(t,e):e===t}function jo(e,t){return We(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function If(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Rn;(function(e){e.pop="pop",e.push="push"})(Rn||(Rn={}));var _n;(function(e){e.back="back",e.forward="forward",e.unknown=""})(_n||(_n={}));function Mf(e){if(!e)if(Ut){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Of(e)}const Lf=/^[^#]+#/;function Nf(e,t){return e.replace(Lf,"#")+t}function Df(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Cs=()=>({left:window.scrollX,top:window.scrollY});function $f(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Df(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ho(e,t){return(history.state?history.state.position-t:-1)+e}const or=new Map;function Ff(e,t){or.set(e,t)}function jf(e){const t=or.get(e);return or.delete(e),t}let Hf=()=>location.protocol+"//"+location.host;function kl(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let l=r.includes(e.slice(o))?e.slice(o).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),Fo(c,"")}return Fo(n,e)+s+r}function Vf(e,t,n,s){let r=[],o=[],i=null;const l=({state:d})=>{const g=kl(e,location),v=n.value,w=t.value;let D=0;if(d){if(n.value=g,t.value=d,i&&i===v){i=null;return}D=w?d.position-w.position:0}else s(g);r.forEach(O=>{O(n.value,v,{delta:D,type:Rn.pop,direction:D?D>0?_n.forward:_n.back:_n.unknown})})};function c(){i=n.value}function u(d){r.push(d);const g=()=>{const v=r.indexOf(d);v>-1&&r.splice(v,1)};return o.push(g),g}function a(){const{history:d}=window;d.state&&d.replaceState(ee({},d.state,{scroll:Cs()}),"")}function f(){for(const d of o)d();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:c,listen:u,destroy:f}}function Vo(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Cs():null}}function kf(e){const{history:t,location:n}=window,s={value:kl(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,u,a){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:Hf()+e+c;try{t[a?"replaceState":"pushState"](u,"",d),r.value=u}catch(g){console.error(g),n[a?"replace":"assign"](d)}}function i(c,u){const a=ee({},t.state,Vo(r.value.back,c,r.value.forward,!0),u,{position:r.value.position});o(c,a,!0),s.value=c}function l(c,u){const a=ee({},r.value,t.state,{forward:c,scroll:Cs()});o(a.current,a,!0);const f=ee({},Vo(s.value,c,null),{position:a.position+1},u);o(c,f,!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function ah(e){e=Mf(e);const t=kf(e),n=Vf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ee({location:"",base:e,go:s,createHref:Nf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Bf(e){return typeof e=="string"||e&&typeof e=="object"}function Bl(e){return typeof e=="string"||typeof e=="symbol"}const Kl=Symbol("");var ko;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ko||(ko={}));function en(e,t){return ee(new Error,{type:e,[Kl]:!0},t)}function nt(e,t){return e instanceof Error&&Kl in e&&(t==null||!!(e.type&t))}const Bo="[^/]+?",Kf={sensitive:!1,strict:!1,start:!0,end:!0},Uf=/[.+*?^${}()[\]/\\]/g;function Wf(e,t){const n=ee({},Kf,t),s=[];let r=n.start?"^":"";const o=[];for(const u of e){const a=u.length?[]:[90];n.strict&&!u.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function Ul(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const qf={type:0,value:""},zf=/[a-zA-Z0-9_]/;function Qf(e){if(!e)return[[]];if(e==="/")return[[qf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${u}": ${g}`)}let n=0,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,u="",a="";function f(){u&&(n===0?o.push({type:0,value:u}):n===1||n===2||n===3?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:u,regexp:a,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),u="")}function d(){u+=c}for(;l{i(M)}:yn}function i(f){if(Bl(f)){const d=s.get(f);d&&(s.delete(f),n.splice(n.indexOf(d),1),d.children.forEach(i),d.alias.forEach(i))}else{const d=n.indexOf(f);d>-1&&(n.splice(d,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function c(f){const d=ed(f,n);n.splice(d,0,f),f.record.name&&!Go(f)&&s.set(f.record.name,f)}function u(f,d){let g,v={},w,D;if("name"in f&&f.name){if(g=s.get(f.name),!g)throw en(1,{location:f});D=g.record.name,v=ee(Uo(d.params,g.keys.filter(M=>!M.optional).concat(g.parent?g.parent.keys.filter(M=>M.optional):[]).map(M=>M.name)),f.params&&Uo(f.params,g.keys.map(M=>M.name))),w=g.stringify(v)}else if(f.path!=null)w=f.path,g=n.find(M=>M.re.test(w)),g&&(v=g.parse(w),D=g.record.name);else{if(g=d.name?s.get(d.name):n.find(M=>M.re.test(d.path)),!g)throw en(1,{location:f,currentLocation:d});D=g.record.name,v=ee({},d.params,f.params),w=g.stringify(v)}const O=[];let T=g;for(;T;)O.unshift(T.record),T=T.parent;return{name:D,path:w,params:v,matched:O,meta:Zf(O)}}e.forEach(f=>o(f));function a(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:a,getRoutes:l,getRecordMatcher:r}}function Uo(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Wo(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Xf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Xf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Go(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Zf(e){return e.reduce((t,n)=>ee(t,n.meta),{})}function qo(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function ed(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;Ul(e,t[o])<0?s=o:n=o+1}const r=td(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function td(e){let t=e;for(;t=t.parent;)if(Wl(t)&&Ul(e,t)===0)return t}function Wl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function nd(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ro&&rr(o)):[s&&rr(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function sd(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=We(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const rd=Symbol(""),Qo=Symbol(""),Ps=Symbol(""),Ir=Symbol(""),ir=Symbol("");function cn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function bt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const u=d=>{d===!1?c(en(4,{from:n,to:t})):d instanceof Error?c(d):Bf(d)?c(en(2,{from:t,to:d})):(i&&s.enterCallbacks[r]===i&&typeof d=="function"&&i.push(d),l())},a=o(()=>e.call(s&&s.instances[r],t,n,u));let f=Promise.resolve(a);e.length<3&&(f=f.then(u)),f.catch(d=>c(d))})}function Vs(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Nl(c)){const a=(c.__vccOpts||c)[t];a&&o.push(bt(a,n,s,i,l,r))}else{let u=c();o.push(()=>u.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=df(a)?a.default:a;i.mods[l]=a,i.components[l]=f;const g=(f.__vccOpts||f)[t];return g&&bt(g,n,s,i,l,r)()}))}}return o}function Jo(e){const t=Fe(Ps),n=Fe(Ir),s=we(()=>{const c=Lt(e.to);return t.resolve(c)}),r=we(()=>{const{matched:c}=s.value,{length:u}=c,a=c[u-1],f=n.matched;if(!a||!f.length)return-1;const d=f.findIndex(Zt.bind(null,a));if(d>-1)return d;const g=Yo(c[u-2]);return u>1&&Yo(a)===g&&f[f.length-1].path!==g?f.findIndex(Zt.bind(null,c[u-2])):d}),o=we(()=>r.value>-1&&ad(n.params,s.value.params)),i=we(()=>r.value>-1&&r.value===n.matched.length-1&&Vl(n.params,s.value.params));function l(c={}){if(cd(c)){const u=t[Lt(e.replace)?"replace":"push"](Lt(e.to)).catch(yn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:we(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function od(e){return e.length===1?e[0]:e}const id=gs({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Jo,setup(e,{slots:t}){const n=An(Jo(e)),{options:s}=Fe(Ps),r=we(()=>({[Xo(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Xo(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&od(t.default(n));return e.custom?o:Qt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),ld=id;function cd(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ad(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!We(r)||r.length!==s.length||s.some((o,i)=>o!==r[i]))return!1}return!0}function Yo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Xo=(e,t,n)=>e??t??n,ud=gs({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Fe(ir),r=we(()=>e.route||s.value),o=Fe(Qo,0),i=we(()=>{let u=Lt(o);const{matched:a}=r.value;let f;for(;(f=a[u])&&!f.components;)u++;return u}),l=we(()=>r.value.matched[i.value]);Un(Qo,we(()=>i.value+1)),Un(rd,l),Un(ir,r);const c=le();return me(()=>[c.value,l.value,e.name],([u,a,f],[d,g,v])=>{a&&(a.instances[f]=u,g&&g!==a&&u&&u===d&&(a.leaveGuards.size||(a.leaveGuards=g.leaveGuards),a.updateGuards.size||(a.updateGuards=g.updateGuards))),u&&a&&(!g||!Zt(a,g)||!d)&&(a.enterCallbacks[f]||[]).forEach(w=>w(u))},{flush:"post"}),()=>{const u=r.value,a=e.name,f=l.value,d=f&&f.components[a];if(!d)return Zo(n.default,{Component:d,route:u});const g=f.props[a],v=g?g===!0?u.params:typeof g=="function"?g(u):g:null,D=Qt(d,ee({},v,t,{onVnodeUnmounted:O=>{O.component.isUnmounted&&(f.instances[a]=null)},ref:c}));return Zo(n.default,{Component:D,route:u})||D}}});function Zo(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const fd=ud;function uh(e){const t=Yf(e.routes,e),n=e.parseQuery||nd,s=e.stringifyQuery||zo,r=e.history,o=cn(),i=cn(),l=cn(),c=hs(pt);let u=pt;Ut&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=js.bind(null,_=>""+_),f=js.bind(null,Cf),d=js.bind(null,On);function g(_,$){let A,F;return Bl(_)?(A=t.getRecordMatcher(_),F=$):F=_,t.addRoute(F,A)}function v(_){const $=t.getRecordMatcher(_);$&&t.removeRoute($)}function w(){return t.getRoutes().map(_=>_.record)}function D(_){return!!t.getRecordMatcher(_)}function O(_,$){if($=ee({},$||c.value),typeof _=="string"){const m=Hs(n,_,$.path),y=t.resolve({path:m.path},$),S=r.createHref(m.fullPath);return ee(m,y,{params:d(y.params),hash:On(m.hash),redirectedFrom:void 0,href:S})}let A;if(_.path!=null)A=ee({},_,{path:Hs(n,_.path,$.path).path});else{const m=ee({},_.params);for(const y in m)m[y]==null&&delete m[y];A=ee({},_,{params:f(m)}),$.params=f($.params)}const F=t.resolve(A,$),oe=_.hash||"";F.params=a(d(F.params));const h=Rf(s,ee({},_,{hash:Sf(oe),path:F.path})),p=r.createHref(h);return ee({fullPath:h,hash:oe,query:s===zo?sd(_.query):_.query||{}},F,{redirectedFrom:void 0,href:p})}function T(_){return typeof _=="string"?Hs(n,_,c.value.path):ee({},_)}function M(_,$){if(u!==_)return en(8,{from:$,to:_})}function L(_){return q(_)}function k(_){return L(ee(T(_),{replace:!0}))}function Q(_){const $=_.matched[_.matched.length-1];if($&&$.redirect){const{redirect:A}=$;let F=typeof A=="function"?A(_):A;return typeof F=="string"&&(F=F.includes("?")||F.includes("#")?F=T(F):{path:F},F.params={}),ee({query:_.query,hash:_.hash,params:F.path!=null?{}:_.params},F)}}function q(_,$){const A=u=O(_),F=c.value,oe=_.state,h=_.force,p=_.replace===!0,m=Q(A);if(m)return q(ee(T(m),{state:typeof m=="object"?ee({},oe,m.state):oe,force:h,replace:p}),$||A);const y=A;y.redirectedFrom=$;let S;return!h&&Tf(s,F,A)&&(S=en(16,{to:y,from:F}),Ge(F,F,!0,!1)),(S?Promise.resolve(S):K(y,F)).catch(b=>nt(b)?nt(b,2)?b:dt(b):Z(b,y,F)).then(b=>{if(b){if(nt(b,2))return q(ee({replace:p},T(b.to),{state:typeof b.to=="object"?ee({},oe,b.to.state):oe,force:h}),$||y)}else b=N(y,F,!0,p,oe);return J(y,F,b),b})}function B(_,$){const A=M(_,$);return A?Promise.reject(A):Promise.resolve()}function x(_){const $=Ht.values().next().value;return $&&typeof $.runWithContext=="function"?$.runWithContext(_):_()}function K(_,$){let A;const[F,oe,h]=dd(_,$);A=Vs(F.reverse(),"beforeRouteLeave",_,$);for(const m of F)m.leaveGuards.forEach(y=>{A.push(bt(y,_,$))});const p=B.bind(null,_,$);return A.push(p),Ne(A).then(()=>{A=[];for(const m of o.list())A.push(bt(m,_,$));return A.push(p),Ne(A)}).then(()=>{A=Vs(oe,"beforeRouteUpdate",_,$);for(const m of oe)m.updateGuards.forEach(y=>{A.push(bt(y,_,$))});return A.push(p),Ne(A)}).then(()=>{A=[];for(const m of h)if(m.beforeEnter)if(We(m.beforeEnter))for(const y of m.beforeEnter)A.push(bt(y,_,$));else A.push(bt(m.beforeEnter,_,$));return A.push(p),Ne(A)}).then(()=>(_.matched.forEach(m=>m.enterCallbacks={}),A=Vs(h,"beforeRouteEnter",_,$,x),A.push(p),Ne(A))).then(()=>{A=[];for(const m of i.list())A.push(bt(m,_,$));return A.push(p),Ne(A)}).catch(m=>nt(m,8)?m:Promise.reject(m))}function J(_,$,A){l.list().forEach(F=>x(()=>F(_,$,A)))}function N(_,$,A,F,oe){const h=M(_,$);if(h)return h;const p=$===pt,m=Ut?history.state:{};A&&(F||p?r.replace(_.fullPath,ee({scroll:p&&m&&m.scroll},oe)):r.push(_.fullPath,oe)),c.value=_,Ge(_,$,A,p),dt()}let Y;function de(){Y||(Y=r.listen((_,$,A)=>{if(!Nn.listening)return;const F=O(_),oe=Q(F);if(oe){q(ee(oe,{replace:!0,force:!0}),F).catch(yn);return}u=F;const h=c.value;Ut&&Ff(Ho(h.fullPath,A.delta),Cs()),K(F,h).catch(p=>nt(p,12)?p:nt(p,2)?(q(ee(T(p.to),{force:!0}),F).then(m=>{nt(m,20)&&!A.delta&&A.type===Rn.pop&&r.go(-1,!1)}).catch(yn),Promise.reject()):(A.delta&&r.go(-A.delta,!1),Z(p,F,h))).then(p=>{p=p||N(F,h,!1),p&&(A.delta&&!nt(p,8)?r.go(-A.delta,!1):A.type===Rn.pop&&nt(p,20)&&r.go(-1,!1)),J(F,h,p)}).catch(yn)}))}let Ee=cn(),re=cn(),G;function Z(_,$,A){dt(_);const F=re.list();return F.length?F.forEach(oe=>oe(_,$,A)):console.error(_),Promise.reject(_)}function et(){return G&&c.value!==pt?Promise.resolve():new Promise((_,$)=>{Ee.add([_,$])})}function dt(_){return G||(G=!_,de(),Ee.list().forEach(([$,A])=>_?A(_):$()),Ee.reset()),_}function Ge(_,$,A,F){const{scrollBehavior:oe}=e;if(!Ut||!oe)return Promise.resolve();const h=!A&&jf(Ho(_.fullPath,0))||(F||!A)&&history.state&&history.state.scroll||null;return nn().then(()=>oe(_,$,h)).then(p=>p&&$f(p)).catch(p=>Z(p,_,$))}const Oe=_=>r.go(_);let jt;const Ht=new Set,Nn={currentRoute:c,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:D,getRoutes:w,resolve:O,options:e,push:L,replace:k,go:Oe,back:()=>Oe(-1),forward:()=>Oe(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:et,install(_){const $=this;_.component("RouterLink",ld),_.component("RouterView",fd),_.config.globalProperties.$router=$,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>Lt(c)}),Ut&&!jt&&c.value===pt&&(jt=!0,L(r.location).catch(oe=>{}));const A={};for(const oe in pt)Object.defineProperty(A,oe,{get:()=>c.value[oe],enumerable:!0});_.provide(Ps,$),_.provide(Ir,xi(A)),_.provide(ir,c);const F=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(u=pt,Y&&Y(),Y=null,c.value=pt,jt=!1,G=!1),F()}}};function Ne(_){return _.reduce(($,A)=>$.then(()=>x(A)),Promise.resolve())}return Nn}function dd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iZt(u,l))?s.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(u=>Zt(u,c))||r.push(c))}return[n,s,r]}function fh(){return Fe(Ps)}function dh(e){return Fe(Ir)}const Gl={data:{type:Object,required:!0},options:{type:Object,default:()=>({})},plugins:{type:Array,default:()=>[]},datasetIdKey:{type:String,default:"label"},updateMode:{type:String,default:void 0}},hd={ariaLabel:{type:String},ariaDescribedby:{type:String}},pd={type:{type:String,required:!0},destroyDelay:{type:Number,default:0},...Gl,...hd},gd=ml[0]==="2"?(e,t)=>Object.assign(e,{attrs:t}):(e,t)=>Object.assign(e,t);function Bt(e){return In(e)?z(e):e}function md(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e;return In(t)?new Proxy(e,{}):e}function vd(e,t){const n=e.options;n&&t&&Object.assign(n,t)}function ql(e,t){e.labels=t}function zl(e,t,n){const s=[];e.datasets=t.map(r=>{const o=e.datasets.find(i=>i[n]===r[n]);return!o||!r.data||s.includes(o)?{...r}:(s.push(o),Object.assign(o,r),o)})}function yd(e,t){const n={labels:[],datasets:[]};return ql(n,e.labels),zl(n,e.datasets,t),n}const _d=gs({props:pd,setup(e,t){let{expose:n,slots:s}=t;const r=le(null),o=hs(null);n({chart:o});const i=()=>{if(!r.value)return;const{type:u,data:a,options:f,plugins:d,datasetIdKey:g}=e,v=yd(a,g),w=md(v,a);o.value=new ei(r.value,{type:u,data:w,options:{...f},plugins:d})},l=()=>{const u=z(o.value);u&&(e.destroyDelay>0?setTimeout(()=>{u.destroy(),o.value=null},e.destroyDelay):(u.destroy(),o.value=null))},c=u=>{u.update(e.updateMode)};return ys(i),wr(l),me([()=>e.options,()=>e.data],(u,a)=>{let[f,d]=u,[g,v]=a;const w=z(o.value);if(!w)return;let D=!1;if(f){const O=Bt(f),T=Bt(g);O&&O!==T&&(vd(w,O),D=!0)}if(d){const O=Bt(d.labels),T=Bt(v.labels),M=Bt(d.datasets),L=Bt(v.datasets);O!==T&&(ql(w.config.data,O),D=!0),M&&M!==L&&(zl(w.config.data,M,e.datasetIdKey),D=!0)}D&&nn(()=>{c(w)})},{deep:!0}),()=>Qt("canvas",{role:"img","aria-label":e.ariaLabel,"aria-describedby":e.ariaDescribedby,ref:r},[Qt("p",{},[s.default?s.default():""])])}});function Ql(e,t){return ei.register(t),gs({props:Gl,setup(n,s){let{expose:r}=s;const o=hs(null),i=l=>{o.value=l==null?void 0:l.chart};return r({chart:o}),()=>Qt(_d,gd({ref:i},{type:e,...n}))}})}const hh=Ql("doughnut",Yl),ph=Ql("line",Jl);export{Jc as $,Ad as A,cs as B,as as C,nn as D,Va as E,xs as F,Md as G,jc as H,Ys as I,Gc as J,Ed as K,$d as L,Pd as M,ke as N,Ha as O,fc as P,Ae as Q,Se as R,Hd as S,jd as T,Qd as U,wr as V,Ld as W,Ll as X,Bd as Y,Wi as Z,An as _,ue as a,Ui as a0,Et as a1,bs as a2,_e as a3,Le as a4,xd as a5,Zc as a6,Zd as a7,ds as a8,Yc as a9,is as aA,Gu as aB,si as aC,Od as aD,kn as aE,oh as aF,Ud as aG,nh as aH,lh as aI,ih as aJ,eh as aK,rh as aL,Wd as aM,Pt as aN,xi as aO,qd as aP,uh as aQ,ah as aR,Gd as aS,Dd as aT,fh as aU,xu as aV,dh as aW,zd as aX,kd as aY,hh as aZ,ph as a_,Kd as aa,Td as ab,Rd as ac,Yd as ad,Dr as ae,wd as af,ja as ag,Cn as ah,Qt as ai,Sd as aj,z as ak,Su as al,Dc as am,Eu as an,ea as ao,ti as ap,bo as aq,th as ar,Id as as,ai as at,Xd as au,Cd as av,Jd as aw,Vd as ax,yr as ay,ci as az,j as b,we as c,se as d,Es as e,fe as f,Ft as g,te as h,Fe as i,W as j,Ve as k,gs as l,ch as m,sh as n,me as o,Un as p,ys as q,le as r,hs as s,He as t,Lt as u,Oa as v,Fd as w,Nd as x,Js as y,dl as z}; diff --git a/assets/vue-vendor-R8HMg95E.js b/assets/vue-vendor-R8HMg95E.js deleted file mode 100644 index 718ba12a..00000000 --- a/assets/vue-vendor-R8HMg95E.js +++ /dev/null @@ -1,25 +0,0 @@ -/** -* @vue/shared v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function tr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ie={},Ut=[],ke=()=>{},Kl=()=>!1,ts=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),nr=e=>e.startsWith("onUpdate:"),he=Object.assign,sr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ul=Object.prototype.hasOwnProperty,te=(e,t)=>Ul.call(e,t),j=Array.isArray,Wt=e=>Rn(e)==="[object Map]",Zt=e=>Rn(e)==="[object Set]",Ir=e=>Rn(e)==="[object Date]",W=e=>typeof e=="function",ae=e=>typeof e=="string",Ke=e=>typeof e=="symbol",se=e=>e!==null&&typeof e=="object",Jo=e=>(se(e)||W(e))&&W(e.then)&&W(e.catch),Yo=Object.prototype.toString,Rn=e=>Yo.call(e),Wl=e=>Rn(e).slice(8,-1),Xo=e=>Rn(e)==="[object Object]",rr=e=>ae(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ln=tr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ns=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Gl=/-(\w)/g,Ve=ns(e=>e.replace(Gl,(t,n)=>n?n.toUpperCase():"")),ql=/\B([A-Z])/g,Rt=ns(e=>e.replace(ql,"-$1").toLowerCase()),ss=ns(e=>e.charAt(0).toUpperCase()+e.slice(1)),jn=ns(e=>e?`on${ss(e)}`:""),wt=(e,t)=>!Object.is(e,t),Hn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Wn=e=>{const t=parseFloat(e);return isNaN(t)?e:t},zl=e=>{const t=ae(e)?Number(e):NaN;return isNaN(t)?e:t};let Mr;const rs=()=>Mr||(Mr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function os(e){if(j(e)){const t={};for(let n=0;n{if(n){const s=n.split(Jl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function is(e){let t="";if(ae(e))t=e;else if(j(e))for(let n=0;nFt(n,t))}const ei=e=>!!(e&&e.__v_isRef===!0),nc=e=>ae(e)?e:e==null?"":j(e)||se(e)&&(e.toString===Yo||!W(e.toString))?ei(e)?nc(e.value):JSON.stringify(e,ti,2):String(e),ti=(e,t)=>ei(t)?ti(e,t.value):Wt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[ws(s,o)+" =>"]=r,n),{})}:Zt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ws(n))}:Ke(t)?ws(t):se(t)&&!j(t)&&!Xo(t)?String(t):t,ws=(e,t="")=>{var n;return Ke(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let me;class ni{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=me,!t&&me&&(this.index=(me.scopes||(me.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(me=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(un){let t=un;for(un=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;cn;){let t=cn;for(cn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function ci(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ui(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ur(s),sc(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function $s(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ai(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ai(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===vn)||(e.globalVersion=vn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$s(e))))return;e.flags|=2;const t=e.dep,n=ce,s=Be;ce=e,Be=!0;try{ci(e);const r=e.fn(e._value);(t.version===0||wt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ce=n,Be=s,ui(e),e.flags&=-3}}function ur(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)ur(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function sc(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Be=!0;const fi=[];function ct(){fi.push(Be),Be=!1}function ut(){const e=fi.pop();Be=e===void 0?!0:e}function Nr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ce;ce=void 0;try{t()}finally{ce=n}}}let vn=0;class rc{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ls{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ce||!Be||ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ce)n=this.activeLink=new rc(ce,this),ce.deps?(n.prevDep=ce.depsTail,ce.depsTail.nextDep=n,ce.depsTail=n):ce.deps=ce.depsTail=n,di(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ce.depsTail,n.nextDep=void 0,ce.depsTail.nextDep=n,ce.depsTail=n,ce.deps===n&&(ce.deps=s)}return n}trigger(t){this.version++,vn++,this.notify(t)}notify(t){lr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{cr()}}}function di(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)di(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Gn=new WeakMap,Mt=Symbol(""),Ds=Symbol(""),yn=Symbol("");function ve(e,t,n){if(Be&&ce){let s=Gn.get(e);s||Gn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new ls),r.map=s,r.key=n),r.track()}}function rt(e,t,n,s,r,o){const i=Gn.get(e);if(!i){vn++;return}const l=c=>{c&&c.trigger()};if(lr(),t==="clear")i.forEach(l);else{const c=j(e),a=c&&rr(n);if(c&&n==="length"){const u=Number(s);i.forEach((f,h)=>{(h==="length"||h===yn||!Ke(h)&&h>=u)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),a&&l(i.get(yn)),t){case"add":c?a&&l(i.get("length")):(l(i.get(Mt)),Wt(e)&&l(i.get(Ds)));break;case"delete":c||(l(i.get(Mt)),Wt(e)&&l(i.get(Ds)));break;case"set":Wt(e)&&l(i.get(Mt));break}}cr()}function oc(e,t){const n=Gn.get(e);return n&&n.get(t)}function Vt(e){const t=J(e);return t===e?t:(ve(t,"iterate",yn),$e(e)?t:t.map(pe))}function cs(e){return ve(e=J(e),"iterate",yn),e}const ic={__proto__:null,[Symbol.iterator](){return Es(this,Symbol.iterator,pe)},concat(...e){return Vt(this).concat(...e.map(t=>j(t)?Vt(t):t))},entries(){return Es(this,"entries",e=>(e[1]=pe(e[1]),e))},every(e,t){return tt(this,"every",e,t,void 0,arguments)},filter(e,t){return tt(this,"filter",e,t,n=>n.map(pe),arguments)},find(e,t){return tt(this,"find",e,t,pe,arguments)},findIndex(e,t){return tt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return tt(this,"findLast",e,t,pe,arguments)},findLastIndex(e,t){return tt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return tt(this,"forEach",e,t,void 0,arguments)},includes(...e){return xs(this,"includes",e)},indexOf(...e){return xs(this,"indexOf",e)},join(e){return Vt(this).join(e)},lastIndexOf(...e){return xs(this,"lastIndexOf",e)},map(e,t){return tt(this,"map",e,t,void 0,arguments)},pop(){return tn(this,"pop")},push(...e){return tn(this,"push",e)},reduce(e,...t){return Lr(this,"reduce",e,t)},reduceRight(e,...t){return Lr(this,"reduceRight",e,t)},shift(){return tn(this,"shift")},some(e,t){return tt(this,"some",e,t,void 0,arguments)},splice(...e){return tn(this,"splice",e)},toReversed(){return Vt(this).toReversed()},toSorted(e){return Vt(this).toSorted(e)},toSpliced(...e){return Vt(this).toSpliced(...e)},unshift(...e){return tn(this,"unshift",e)},values(){return Es(this,"values",pe)}};function Es(e,t,n){const s=cs(e),r=s[t]();return s!==e&&!$e(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.value&&(o.value=n(o.value)),o}),r}const lc=Array.prototype;function tt(e,t,n,s,r,o){const i=cs(e),l=i!==e&&!$e(e),c=i[t];if(c!==lc[t]){const f=c.apply(e,o);return l?pe(f):f}let a=n;i!==e&&(l?a=function(f,h){return n.call(this,pe(f),h,e)}:n.length>2&&(a=function(f,h){return n.call(this,f,h,e)}));const u=c.call(i,a,s);return l&&r?r(u):u}function Lr(e,t,n,s){const r=cs(e);let o=n;return r!==e&&($e(e)?n.length>3&&(o=function(i,l,c){return n.call(this,i,l,c,e)}):o=function(i,l,c){return n.call(this,i,pe(l),c,e)}),r[t](o,...s)}function xs(e,t,n){const s=J(e);ve(s,"iterate",yn);const r=s[t](...n);return(r===-1||r===!1)&&dr(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function tn(e,t,n=[]){ct(),lr();const s=J(e)[t].apply(e,n);return cr(),ut(),s}const cc=tr("__proto__,__v_isRef,__isVue"),hi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ke));function uc(e){Ke(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class pi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?_c:yi:o?vi:mi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=j(t);if(!r){let c;if(i&&(c=ic[n]))return c;if(n==="hasOwnProperty")return uc}const l=Reflect.get(t,n,fe(t)?t:s);return(Ke(n)?hi.has(n):cc(n))||(r||ve(t,"get",n),o)?l:fe(l)?i&&rr(n)?l:l.value:se(l)?r?us(l):On(l):l}}class gi extends pi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];if(!this._isShallow){const c=St(o);if(!$e(s)&&!St(s)&&(o=J(o),s=J(s)),!j(t)&&fe(o)&&!fe(s))return c?!1:(o.value=s,!0)}const i=j(t)&&rr(n)?Number(n)e,Mn=e=>Reflect.getPrototypeOf(e);function pc(e,t,n){return function(...s){const r=this.__v_raw,o=J(r),i=Wt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=r[e](...s),u=n?js:t?qn:pe;return!t&&ve(o,"iterate",c?Ds:Mt),{next(){const{value:f,done:h}=a.next();return h?{value:f,done:h}:{value:l?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function Nn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function gc(e,t){const n={get(r){const o=this.__v_raw,i=J(o),l=J(r);e||(wt(r,l)&&ve(i,"get",r),ve(i,"get",l));const{has:c}=Mn(i),a=t?js:e?qn:pe;if(c.call(i,r))return a(o.get(r));if(c.call(i,l))return a(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&ve(J(r),"iterate",Mt),Reflect.get(r,"size",r)},has(r){const o=this.__v_raw,i=J(o),l=J(r);return e||(wt(r,l)&&ve(i,"has",r),ve(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,c=J(l),a=t?js:e?qn:pe;return!e&&ve(c,"iterate",Mt),l.forEach((u,f)=>r.call(o,a(u),a(f),i))}};return he(n,e?{add:Nn("add"),set:Nn("set"),delete:Nn("delete"),clear:Nn("clear")}:{add(r){!t&&!$e(r)&&!St(r)&&(r=J(r));const o=J(this);return Mn(o).has.call(o,r)||(o.add(r),rt(o,"add",r,r)),this},set(r,o){!t&&!$e(o)&&!St(o)&&(o=J(o));const i=J(this),{has:l,get:c}=Mn(i);let a=l.call(i,r);a||(r=J(r),a=l.call(i,r));const u=c.call(i,r);return i.set(r,o),a?wt(o,u)&&rt(i,"set",r,o):rt(i,"add",r,o),this},delete(r){const o=J(this),{has:i,get:l}=Mn(o);let c=i.call(o,r);c||(r=J(r),c=i.call(o,r)),l&&l.call(o,r);const a=o.delete(r);return c&&rt(o,"delete",r,void 0),a},clear(){const r=J(this),o=r.size!==0,i=r.clear();return o&&rt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=pc(r,e,t)}),n}function ar(e,t){const n=gc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(te(n,r)&&r in s?n:s,r,o)}const mc={get:ar(!1,!1)},vc={get:ar(!1,!0)},yc={get:ar(!0,!1)};const mi=new WeakMap,vi=new WeakMap,yi=new WeakMap,_c=new WeakMap;function bc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function wc(e){return e.__v_skip||!Object.isExtensible(e)?0:bc(Wl(e))}function On(e){return St(e)?e:fr(e,!1,fc,mc,mi)}function _i(e){return fr(e,!1,hc,vc,vi)}function us(e){return fr(e,!0,dc,yc,yi)}function fr(e,t,n,s,r){if(!se(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=wc(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function lt(e){return St(e)?lt(e.__v_raw):!!(e&&e.__v_isReactive)}function St(e){return!!(e&&e.__v_isReadonly)}function $e(e){return!!(e&&e.__v_isShallow)}function dr(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function hr(e){return!te(e,"__v_skip")&&Object.isExtensible(e)&&Fs(e,"__v_skip",!0),e}const pe=e=>se(e)?On(e):e,qn=e=>se(e)?us(e):e;function fe(e){return e?e.__v_isRef===!0:!1}function ue(e){return wi(e,!1)}function bi(e){return wi(e,!0)}function wi(e,t){return fe(e)?e:new Sc(e,t)}class Sc{constructor(t,n){this.dep=new ls,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:pe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||$e(t)||St(t);t=s?t:J(t),wt(t,n)&&(this._rawValue=t,this._value=s?t:pe(t),this.dep.trigger())}}function id(e){e.dep&&e.dep.trigger()}function Nt(e){return fe(e)?e.value:e}const Ec={get:(e,t,n)=>t==="__v_raw"?e:Nt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Si(e){return lt(e)?e:new Proxy(e,Ec)}class xc{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new ls,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Cc(e){return new xc(e)}function Rc(e){const t=j(e)?new Array(e.length):{};for(const n in e)t[n]=Ei(e,n);return t}class Oc{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return oc(J(this._object),this._key)}}class Pc{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Tc(e,t,n){return fe(e)?e:W(e)?new Pc(e):se(e)&&arguments.length>1?Ei(e,t,n):ue(e)}function Ei(e,t,n){const s=e[t];return fe(s)?s:new Oc(e,t,n)}class Ac{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new ls(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=vn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ce!==this)return li(this,!0),!0}get value(){const t=this.dep.track();return ai(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ic(e,t,n=!1){let s,r;return W(e)?s=e:(s=e.get,r=e.set),new Ac(s,r,n)}const Ln={},zn=new WeakMap;let At;function Mc(e,t=!1,n=At){if(n){let s=zn.get(n);s||zn.set(n,s=[]),s.push(e)}}function Nc(e,t,n=ie){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:c}=n,a=N=>r?N:$e(N)||r===!1||r===0?ot(N,1):ot(N);let u,f,h,g,v=!1,S=!1;if(fe(e)?(f=()=>e.value,v=$e(e)):lt(e)?(f=()=>a(e),v=!0):j(e)?(S=!0,v=e.some(N=>lt(N)||$e(N)),f=()=>e.map(N=>{if(fe(N))return N.value;if(lt(N))return a(N);if(W(N))return c?c(N,2):N()})):W(e)?t?f=c?()=>c(e,2):e:f=()=>{if(h){ct();try{h()}finally{ut()}}const N=At;At=u;try{return c?c(e,3,[g]):e(g)}finally{At=N}}:f=ke,t&&r){const N=f,k=r===!0?1/0:r;f=()=>ot(N(),k)}const $=ir(),A=()=>{u.stop(),$&&$.active&&sr($.effects,u)};if(o&&t){const N=t;t=(...k)=>{N(...k),A()}}let I=S?new Array(e.length).fill(Ln):Ln;const F=N=>{if(!(!(u.flags&1)||!u.dirty&&!N))if(t){const k=u.run();if(r||v||(S?k.some((z,q)=>wt(z,I[q])):wt(k,I))){h&&h();const z=At;At=u;try{const q=[k,I===Ln?void 0:S&&I[0]===Ln?[]:I,g];I=k,c?c(t,3,q):t(...q)}finally{At=z}}}else u.run()};return l&&l(F),u=new oi(f),u.scheduler=i?()=>i(F,!1):F,g=N=>Mc(N,!1,u),h=u.onStop=()=>{const N=zn.get(u);if(N){if(c)c(N,4);else for(const k of N)k();zn.delete(u)}},t?s?F(!0):I=u.run():i?i(F.bind(null,!0),!0):u.run(),A.pause=u.pause.bind(u),A.resume=u.resume.bind(u),A.stop=A,A}function ot(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,fe(e))ot(e.value,t,n);else if(j(e))for(let s=0;s{ot(s,t,n)});else if(Xo(e)){for(const s in e)ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ot(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Pn(e,t,n,s){try{return s?e(...s):e()}catch(r){as(r,t,n)}}function Ue(e,t,n,s){if(W(e)){const r=Pn(e,t,n,s);return r&&Jo(r)&&r.catch(o=>{as(o,t,n)}),r}if(j(e)){const r=[];for(let o=0;o>>1,r=Re[s],o=_n(r);o=_n(n)?Re.push(e):Re.splice(Fc(t),0,e),e.flags|=1,Ci()}}function Ci(){Qn||(Qn=xi.then(Oi))}function $c(e){j(e)?Gt.push(...e):vt&&e.id===-1?vt.splice(Bt+1,0,e):e.flags&1||(Gt.push(e),e.flags|=1),Ci()}function Fr(e,t,n=Xe+1){for(;n_n(n)-_n(s));if(Gt.length=0,vt){vt.push(...t);return}for(vt=t,Bt=0;Bte.id==null?e.flags&2?-1:1/0:e.id;function Oi(e){try{for(Xe=0;Xe{s._d&&Qr(-1);const o=Jn(t);let i;try{i=e(...r)}finally{Jn(o),s._d&&Qr(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function ld(e,t){if(ge===null)return e;const n=gs(ge),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,an=e=>e&&(e.disabled||e.disabled===""),$r=e=>e&&(e.defer||e.defer===""),Dr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,jr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Hs=(e,t)=>{const n=e&&e.to;return ae(n)?t?t(n):null:n},Ii={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,c,a){const{mc:u,pc:f,pbc:h,o:{insert:g,querySelector:v,createText:S,createComment:$}}=a,A=an(t.props);let{shapeFlag:I,children:F,dynamicChildren:N}=t;if(e==null){const k=t.el=S(""),z=t.anchor=S("");g(k,n,s),g(z,n,s);const q=(x,K)=>{I&16&&(r&&r.isCE&&(r.ce._teleportTarget=x),u(F,x,K,r,o,i,l,c))},B=()=>{const x=t.target=Hs(t.props,v),K=Mi(x,t,S,g);x&&(i!=="svg"&&Dr(x)?i="svg":i!=="mathml"&&jr(x)&&(i="mathml"),A||(q(x,K),Vn(t,!1)))};A&&(q(n,z),Vn(t,!0)),$r(t.props)?(t.el.__isMounted=!1,Ce(()=>{B(),delete t.el.__isMounted},o)):B()}else{if($r(t.props)&&e.el.__isMounted===!1){Ce(()=>{Ii.process(e,t,n,s,r,o,i,l,c,a)},o);return}t.el=e.el,t.targetStart=e.targetStart;const k=t.anchor=e.anchor,z=t.target=e.target,q=t.targetAnchor=e.targetAnchor,B=an(e.props),x=B?n:z,K=B?k:q;if(i==="svg"||Dr(z)?i="svg":(i==="mathml"||jr(z))&&(i="mathml"),N?(h(e.dynamicChildren,N,x,r,o,i,l),wr(e,t,!0)):c||f(e,t,x,K,r,o,i,l,!1),A)B?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Fn(t,n,k,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Q=t.target=Hs(t.props,v);Q&&Fn(t,Q,null,a,0)}else B&&Fn(t,z,q,a,1);Vn(t,A)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:a,targetAnchor:u,target:f,props:h}=e;if(f&&(r(a),r(u)),o&&r(c),i&16){const g=o||!an(h);for(let v=0;v{e.isMounted=!0}),Bi(()=>{e.isUnmounting=!0}),e}const Fe=[Function,Array],Li={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Fe,onEnter:Fe,onAfterEnter:Fe,onEnterCancelled:Fe,onBeforeLeave:Fe,onLeave:Fe,onAfterLeave:Fe,onLeaveCancelled:Fe,onBeforeAppear:Fe,onAppear:Fe,onAfterAppear:Fe,onAppearCancelled:Fe},Fi=e=>{const t=e.subTree;return t.component?Fi(t.component):t},Hc={name:"BaseTransition",props:Li,setup(e,{slots:t}){const n=Dt(),s=Ni();return()=>{const r=t.default&&gr(t.default(),!0);if(!r||!r.length)return;const o=$i(r),i=J(e),{mode:l}=i;if(s.isLeaving)return Cs(o);const c=Hr(o);if(!c)return Cs(o);let a=bn(c,i,s,n,f=>a=f);c.type!==ye&&$t(c,a);let u=n.subTree&&Hr(n.subTree);if(u&&u.type!==ye&&!It(c,u)&&Fi(n).type!==ye){let f=bn(u,i,s,n);if($t(u,f),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},Cs(o);l==="in-out"&&c.type!==ye?f.delayLeave=(h,g,v)=>{const S=Di(s,u);S[String(u.key)]=u,h[yt]=()=>{g(),h[yt]=void 0,delete a.delayedLeave,u=void 0},a.delayedLeave=()=>{v(),delete a.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function $i(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const Vc=Hc;function Di(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function bn(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:h,onLeave:g,onAfterLeave:v,onLeaveCancelled:S,onBeforeAppear:$,onAppear:A,onAfterAppear:I,onAppearCancelled:F}=t,N=String(e.key),k=Di(n,e),z=(x,K)=>{x&&Ue(x,s,9,K)},q=(x,K)=>{const Q=K[1];z(x,K),j(x)?x.every(M=>M.length<=1)&&Q():x.length<=1&&Q()},B={mode:i,persisted:l,beforeEnter(x){let K=c;if(!n.isMounted)if(o)K=$||c;else return;x[yt]&&x[yt](!0);const Q=k[N];Q&&It(e,Q)&&Q.el[yt]&&Q.el[yt](),z(K,[x])},enter(x){let K=a,Q=u,M=f;if(!n.isMounted)if(o)K=A||a,Q=I||u,M=F||f;else return;let Y=!1;const de=x[$n]=Ee=>{Y||(Y=!0,Ee?z(M,[x]):z(Q,[x]),B.delayedLeave&&B.delayedLeave(),x[$n]=void 0)};K?q(K,[x,de]):de()},leave(x,K){const Q=String(e.key);if(x[$n]&&x[$n](!0),n.isUnmounting)return K();z(h,[x]);let M=!1;const Y=x[yt]=de=>{M||(M=!0,K(),de?z(S,[x]):z(v,[x]),x[yt]=void 0,k[Q]===e&&delete k[Q])};k[Q]=e,g?q(g,[x,Y]):Y()},clone(x){const K=bn(x,t,n,s,r);return r&&r(K),K}};return B}function Cs(e){if(fs(e))return e=Et(e),e.children=null,e}function Hr(e){if(!fs(e))return Ai(e.type)&&e.children?$i(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&W(n.default))return n.default()}}function $t(e,t){e.shapeFlag&6&&e.component?(e.transition=t,$t(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function gr(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;ofn(v,t&&(j(t)?t[S]:t),n,s,r));return}if(qt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&fn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?gs(s.component):s.el,i=r?null:o,{i:l,r:c}=e,a=t&&t.r,u=l.refs===ie?l.refs={}:l.refs,f=l.setupState,h=J(f),g=f===ie?()=>!1:v=>te(h,v);if(a!=null&&a!==c&&(ae(a)?(u[a]=null,g(a)&&(f[a]=null)):fe(a)&&(a.value=null)),W(c))Pn(c,l,12,[i,u]);else{const v=ae(c),S=fe(c);if(v||S){const $=()=>{if(e.f){const A=v?g(c)?f[c]:u[c]:c.value;r?j(A)&&sr(A,o):j(A)?A.includes(o)||A.push(o):v?(u[c]=[o],g(c)&&(f[c]=u[c])):(c.value=[o],e.k&&(u[e.k]=c.value))}else v?(u[c]=i,g(c)&&(f[c]=i)):S&&(c.value=i,e.k&&(u[e.k]=i))};i?($.id=-1,Ce($,n)):$()}}}rs().requestIdleCallback;rs().cancelIdleCallback;const qt=e=>!!e.type.__asyncLoader,fs=e=>e.type.__isKeepAlive;function kc(e,t){Vi(e,"a",t)}function Bc(e,t){Vi(e,"da",t)}function Vi(e,t,n=_e){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(ds(t,s,n),n){let r=n.parent;for(;r&&r.parent;)fs(r.parent.vnode)&&Kc(s,t,n,r),r=r.parent}}function Kc(e,t,n,s){const r=ds(t,e,s,!0);Ki(()=>{sr(s[t],r)},n)}function ds(e,t,n=_e,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{ct();const l=An(n),c=Ue(t,n,e,i);return l(),ut(),c});return s?r.unshift(o):r.push(o),o}}const at=e=>(t,n=_e)=>{(!En||e==="sp")&&ds(e,(...s)=>t(...s),n)},Uc=at("bm"),mr=at("m"),Wc=at("bu"),ki=at("u"),Bi=at("bum"),Ki=at("um"),Gc=at("sp"),qc=at("rtg"),zc=at("rtc");function Qc(e,t=_e){ds("ec",e,t)}const vr="components",Jc="directives";function ud(e,t){return yr(vr,e,!0,t)||e}const Ui=Symbol.for("v-ndc");function ad(e){return ae(e)?yr(vr,e,!1)||e:e||Ui}function fd(e){return yr(Jc,e)}function yr(e,t,n=!0,s=!1){const r=ge||_e;if(r){const o=r.type;if(e===vr){const l=ju(o,!1);if(l&&(l===t||l===Ve(t)||l===ss(Ve(t))))return o}const i=Vr(r[e]||o[e],t)||Vr(r.appContext[e],t);return!i&&s?o:i}}function Vr(e,t){return e&&(e[t]||e[Ve(t)]||e[ss(Ve(t))])}function dd(e,t,n,s){let r;const o=n,i=j(e);if(i||ae(e)){const l=i&<(e);let c=!1,a=!1;l&&(c=!$e(e),a=St(e),e=cs(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(l,c,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,a=l.length;c{const o=s.fn(...r);return o&&(o.key=s.key),o}:s.fn)}return e}function pd(e,t,n={},s,r){if(ge.ce||ge.parent&&qt(ge.parent)&&ge.parent.ce)return t!=="default"&&(n.name=t),Us(),Ws(Ae,null,[we("slot",n,s&&s())],64);let o=e[t];o&&o._c&&(o._d=!1),Us();const i=o&&Wi(o(n)),l=n.key||i&&i.key,c=Ws(Ae,{key:(l&&!Ke(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),o&&o._c&&(o._d=!0),c}function Wi(e){return e.some(t=>Sn(t)?!(t.type===ye||t.type===Ae&&!Wi(t.children)):!0)?e:null}function gd(e,t){const n={};for(const s in e)n[jn(s)]=e[s];return n}const Vs=e=>e?fl(e)?gs(e):Vs(e.parent):null,dn=he(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Vs(e.parent),$root:e=>Vs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>zi(e),$forceUpdate:e=>e.f||(e.f=()=>{pr(e.update)}),$nextTick:e=>e.n||(e.n=Tn.bind(e.proxy)),$watch:e=>_u.bind(e)}),Rs=(e,t)=>e!==ie&&!e.__isScriptSetup&&te(e,t),Yc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(Rs(s,t))return i[t]=1,s[t];if(r!==ie&&te(r,t))return i[t]=2,r[t];if((a=e.propsOptions[0])&&te(a,t))return i[t]=3,o[t];if(n!==ie&&te(n,t))return i[t]=4,n[t];ks&&(i[t]=0)}}const u=dn[t];let f,h;if(u)return t==="$attrs"&&ve(e.attrs,"get",""),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ie&&te(n,t))return i[t]=4,n[t];if(h=c.config.globalProperties,te(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return Rs(r,t)?(r[t]=n,!0):s!==ie&&te(s,t)?(s[t]=n,!0):te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:o}},i){let l;return!!n[i]||e!==ie&&te(e,i)||Rs(t,i)||(l=o[0])&&te(l,i)||te(s,i)||te(dn,i)||te(r.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function md(){return Gi().slots}function vd(){return Gi().attrs}function Gi(e){const t=Dt();return t.setupContext||(t.setupContext=hl(t))}function kr(e){return j(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ks=!0;function Xc(e){const t=zi(e),n=e.proxy,s=e.ctx;ks=!1,t.beforeCreate&&Br(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:c,inject:a,created:u,beforeMount:f,mounted:h,beforeUpdate:g,updated:v,activated:S,deactivated:$,beforeDestroy:A,beforeUnmount:I,destroyed:F,unmounted:N,render:k,renderTracked:z,renderTriggered:q,errorCaptured:B,serverPrefetch:x,expose:K,inheritAttrs:Q,components:M,directives:Y,filters:de}=t;if(a&&Zc(a,s,null),i)for(const G in i){const Z=i[G];W(Z)&&(s[G]=Z.bind(n))}if(r){const G=r.call(n,n);se(G)&&(e.data=On(G))}if(ks=!0,o)for(const G in o){const Z=o[G],et=W(Z)?Z.bind(n,n):W(Z.get)?Z.get.bind(n,n):ke,dt=!W(Z)&&W(Z.set)?Z.set.bind(n):ke,Ge=be({get:et,set:dt});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:Oe=>Ge.value=Oe})}if(l)for(const G in l)qi(l[G],s,n,G);if(c){const G=W(c)?c.call(n):c;Reflect.ownKeys(G).forEach(Z=>{kn(Z,G[Z])})}u&&Br(u,e,"c");function re(G,Z){j(Z)?Z.forEach(et=>G(et.bind(n))):Z&&G(Z.bind(n))}if(re(Uc,f),re(mr,h),re(Wc,g),re(ki,v),re(kc,S),re(Bc,$),re(Qc,B),re(zc,z),re(qc,q),re(Bi,I),re(Ki,N),re(Gc,x),j(K))if(K.length){const G=e.exposed||(e.exposed={});K.forEach(Z=>{Object.defineProperty(G,Z,{get:()=>n[Z],set:et=>n[Z]=et,enumerable:!0})})}else e.exposed||(e.exposed={});k&&e.render===ke&&(e.render=k),Q!=null&&(e.inheritAttrs=Q),M&&(e.components=M),Y&&(e.directives=Y),x&&Hi(e)}function Zc(e,t,n=ke){j(e)&&(e=Bs(e));for(const s in e){const r=e[s];let o;se(r)?"default"in r?o=De(r.from||s,r.default,!0):o=De(r.from||s):o=De(r),fe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function Br(e,t,n){Ue(j(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function qi(e,t,n,s){let r=s.includes(".")?ol(n,s):()=>n[s];if(ae(e)){const o=t[e];W(o)&&Se(r,o)}else if(W(e))Se(r,e.bind(n));else if(se(e))if(j(e))e.forEach(o=>qi(o,t,n,s));else{const o=W(e.handler)?e.handler.bind(n):t[e.handler];W(o)&&Se(r,o,e)}}function zi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(a=>Yn(c,a,i,!0)),Yn(c,t,i)),se(t)&&o.set(t,c),c}function Yn(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Yn(e,o,n,!0),r&&r.forEach(i=>Yn(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=eu[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const eu={data:Kr,props:Ur,emits:Ur,methods:on,computed:on,beforeCreate:xe,created:xe,beforeMount:xe,mounted:xe,beforeUpdate:xe,updated:xe,beforeDestroy:xe,beforeUnmount:xe,destroyed:xe,unmounted:xe,activated:xe,deactivated:xe,errorCaptured:xe,serverPrefetch:xe,components:on,directives:on,watch:nu,provide:Kr,inject:tu};function Kr(e,t){return t?e?function(){return he(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function tu(e,t){return on(Bs(e),Bs(t))}function Bs(e){if(j(e)){const t={};for(let n=0;n1)return n&&W(t)?t.call(s&&s.proxy):t}}function ou(){return!!(Dt()||Lt)}const Ji={},Yi=()=>Object.create(Ji),Xi=e=>Object.getPrototypeOf(e)===Ji;function iu(e,t,n,s=!1){const r={},o=Yi();e.propsDefaults=Object.create(null),Zi(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:_i(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function lu(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=J(r),[c]=e.propsOptions;let a=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{c=!0;const[h,g]=el(f,t,!0);he(i,h),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!c)return se(e)&&s.set(e,Ut),Ut;if(j(o))for(let u=0;ue==="_"||e==="__"||e==="_ctx"||e==="$stable",br=e=>j(e)?e.map(Ze):[Ze(e)],uu=(e,t,n)=>{if(t._n)return t;const s=Dc((...r)=>br(t(...r)),n);return s._c=!1,s},tl=(e,t,n)=>{const s=e._ctx;for(const r in e){if(_r(r))continue;const o=e[r];if(W(o))t[r]=uu(r,o,s);else if(o!=null){const i=br(o);t[r]=()=>i}}},nl=(e,t)=>{const n=br(t);e.slots.default=()=>n},sl=(e,t,n)=>{for(const s in t)(n||!_r(s))&&(e[s]=t[s])},au=(e,t,n)=>{const s=e.slots=Yi();if(e.vnode.shapeFlag&32){const r=t.__;r&&Fs(s,"__",r,!0);const o=t._;o?(sl(s,t,n),n&&Fs(s,"_",o,!0)):tl(t,s)}else t&&nl(e,t)},fu=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ie;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:sl(r,t,n):(o=!t.$stable,tl(t,r)),i=t}else t&&(nl(e,t),i={default:1});if(o)for(const l in r)!_r(l)&&i[l]==null&&delete r[l]},Ce=Ru;function du(e){return hu(e)}function hu(e,t){const n=rs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:u,parentNode:f,nextSibling:h,setScopeId:g=ke,insertStaticContent:v}=e,S=(d,p,m,y=null,w=null,b=null,O=void 0,R=null,C=!!p.dynamicChildren)=>{if(d===p)return;d&&!It(d,p)&&(y=_(d),Oe(d,w,b,!0),d=null),p.patchFlag===-2&&(C=!1,p.dynamicChildren=null);const{type:E,ref:V,shapeFlag:T}=p;switch(E){case ps:$(d,p,m,y);break;case ye:A(d,p,m,y);break;case Bn:d==null&&I(p,m,y,O);break;case Ae:M(d,p,m,y,w,b,O,R,C);break;default:T&1?k(d,p,m,y,w,b,O,R,C):T&6?Y(d,p,m,y,w,b,O,R,C):(T&64||T&128)&&E.process(d,p,m,y,w,b,O,R,C,D)}V!=null&&w?fn(V,d&&d.ref,b,p||d,!p):V==null&&d&&d.ref!=null&&fn(d.ref,null,b,d,!0)},$=(d,p,m,y)=>{if(d==null)s(p.el=l(p.children),m,y);else{const w=p.el=d.el;p.children!==d.children&&a(w,p.children)}},A=(d,p,m,y)=>{d==null?s(p.el=c(p.children||""),m,y):p.el=d.el},I=(d,p,m,y)=>{[d.el,d.anchor]=v(d.children,p,m,y,d.el,d.anchor)},F=({el:d,anchor:p},m,y)=>{let w;for(;d&&d!==p;)w=h(d),s(d,m,y),d=w;s(p,m,y)},N=({el:d,anchor:p})=>{let m;for(;d&&d!==p;)m=h(d),r(d),d=m;r(p)},k=(d,p,m,y,w,b,O,R,C)=>{p.type==="svg"?O="svg":p.type==="math"&&(O="mathml"),d==null?z(p,m,y,w,b,O,R,C):x(d,p,w,b,O,R,C)},z=(d,p,m,y,w,b,O,R)=>{let C,E;const{props:V,shapeFlag:T,transition:H,dirs:U}=d;if(C=d.el=i(d.type,b,V&&V.is,V),T&8?u(C,d.children):T&16&&B(d.children,C,null,y,w,Os(d,b),O,R),U&&Ot(d,null,y,"created"),q(C,d,d.scopeId,O,y),V){for(const le in V)le!=="value"&&!ln(le)&&o(C,le,null,V[le],b,y);"value"in V&&o(C,"value",null,V.value,b),(E=V.onVnodeBeforeMount)&&Je(E,y,d)}U&&Ot(d,null,y,"beforeMount");const X=pu(w,H);X&&H.beforeEnter(C),s(C,p,m),((E=V&&V.onVnodeMounted)||X||U)&&Ce(()=>{E&&Je(E,y,d),X&&H.enter(C),U&&Ot(d,null,y,"mounted")},w)},q=(d,p,m,y,w)=>{if(m&&g(d,m),y)for(let b=0;b{for(let E=C;E{const R=p.el=d.el;let{patchFlag:C,dynamicChildren:E,dirs:V}=p;C|=d.patchFlag&16;const T=d.props||ie,H=p.props||ie;let U;if(m&&Pt(m,!1),(U=H.onVnodeBeforeUpdate)&&Je(U,m,p,d),V&&Ot(p,d,m,"beforeUpdate"),m&&Pt(m,!0),(T.innerHTML&&H.innerHTML==null||T.textContent&&H.textContent==null)&&u(R,""),E?K(d.dynamicChildren,E,R,m,y,Os(p,w),b):O||Z(d,p,R,null,m,y,Os(p,w),b,!1),C>0){if(C&16)Q(R,T,H,m,w);else if(C&2&&T.class!==H.class&&o(R,"class",null,H.class,w),C&4&&o(R,"style",T.style,H.style,w),C&8){const X=p.dynamicProps;for(let le=0;le{U&&Je(U,m,p,d),V&&Ot(p,d,m,"updated")},y)},K=(d,p,m,y,w,b,O)=>{for(let R=0;R{if(p!==m){if(p!==ie)for(const b in p)!ln(b)&&!(b in m)&&o(d,b,p[b],null,w,y);for(const b in m){if(ln(b))continue;const O=m[b],R=p[b];O!==R&&b!=="value"&&o(d,b,R,O,w,y)}"value"in m&&o(d,"value",p.value,m.value,w)}},M=(d,p,m,y,w,b,O,R,C)=>{const E=p.el=d?d.el:l(""),V=p.anchor=d?d.anchor:l("");let{patchFlag:T,dynamicChildren:H,slotScopeIds:U}=p;U&&(R=R?R.concat(U):U),d==null?(s(E,m,y),s(V,m,y),B(p.children||[],m,V,w,b,O,R,C)):T>0&&T&64&&H&&d.dynamicChildren?(K(d.dynamicChildren,H,m,w,b,O,R),(p.key!=null||w&&p===w.subTree)&&wr(d,p,!0)):Z(d,p,m,V,w,b,O,R,C)},Y=(d,p,m,y,w,b,O,R,C)=>{p.slotScopeIds=R,d==null?p.shapeFlag&512?w.ctx.activate(p,m,y,O,C):de(p,m,y,w,b,O,C):Ee(d,p,C)},de=(d,p,m,y,w,b,O)=>{const R=d.component=Lu(d,y,w);if(fs(d)&&(R.ctx.renderer=D),Fu(R,!1,O),R.asyncDep){if(w&&w.registerDep(R,re,O),!d.el){const C=R.subTree=we(ye);A(null,C,p,m),d.placeholder=C.el}}else re(R,d,p,m,w,b,O)},Ee=(d,p,m)=>{const y=p.component=d.component;if(xu(d,p,m))if(y.asyncDep&&!y.asyncResolved){G(y,p,m);return}else y.next=p,y.update();else p.el=d.el,y.vnode=p},re=(d,p,m,y,w,b,O)=>{const R=()=>{if(d.isMounted){let{next:T,bu:H,u:U,parent:X,vnode:le}=d;{const ze=rl(d);if(ze){T&&(T.el=le.el,G(d,T,O)),ze.asyncDep.then(()=>{d.isUnmounted||R()});return}}let ne=T,Pe;Pt(d,!1),T?(T.el=le.el,G(d,T,O)):T=le,H&&Hn(H),(Pe=T.props&&T.props.onVnodeBeforeUpdate)&&Je(Pe,X,T,le),Pt(d,!0);const Te=qr(d),qe=d.subTree;d.subTree=Te,S(qe,Te,f(qe.el),_(qe),d,w,b),T.el=Te.el,ne===null&&Cu(d,Te.el),U&&Ce(U,w),(Pe=T.props&&T.props.onVnodeUpdated)&&Ce(()=>Je(Pe,X,T,le),w)}else{let T;const{el:H,props:U}=p,{bm:X,m:le,parent:ne,root:Pe,type:Te}=d,qe=qt(p);Pt(d,!1),X&&Hn(X),!qe&&(T=U&&U.onVnodeBeforeMount)&&Je(T,ne,p),Pt(d,!0);{Pe.ce&&Pe.ce._def.shadowRoot!==!1&&Pe.ce._injectChildStyle(Te);const ze=d.subTree=qr(d);S(null,ze,m,y,d,w,b),p.el=ze.el}if(le&&Ce(le,w),!qe&&(T=U&&U.onVnodeMounted)){const ze=p;Ce(()=>Je(T,ne,ze),w)}(p.shapeFlag&256||ne&&qt(ne.vnode)&&ne.vnode.shapeFlag&256)&&d.a&&Ce(d.a,w),d.isMounted=!0,p=m=y=null}};d.scope.on();const C=d.effect=new oi(R);d.scope.off();const E=d.update=C.run.bind(C),V=d.job=C.runIfDirty.bind(C);V.i=d,V.id=d.uid,C.scheduler=()=>pr(V),Pt(d,!0),E()},G=(d,p,m)=>{p.component=d;const y=d.vnode.props;d.vnode=p,d.next=null,lu(d,p.props,y,m),fu(d,p.children,m),ct(),Fr(d),ut()},Z=(d,p,m,y,w,b,O,R,C=!1)=>{const E=d&&d.children,V=d?d.shapeFlag:0,T=p.children,{patchFlag:H,shapeFlag:U}=p;if(H>0){if(H&128){dt(E,T,m,y,w,b,O,R,C);return}else if(H&256){et(E,T,m,y,w,b,O,R,C);return}}U&8?(V&16&&Le(E,w,b),T!==E&&u(m,T)):V&16?U&16?dt(E,T,m,y,w,b,O,R,C):Le(E,w,b,!0):(V&8&&u(m,""),U&16&&B(T,m,y,w,b,O,R,C))},et=(d,p,m,y,w,b,O,R,C)=>{d=d||Ut,p=p||Ut;const E=d.length,V=p.length,T=Math.min(E,V);let H;for(H=0;HV?Le(d,w,b,!0,!1,T):B(p,m,y,w,b,O,R,C,T)},dt=(d,p,m,y,w,b,O,R,C)=>{let E=0;const V=p.length;let T=d.length-1,H=V-1;for(;E<=T&&E<=H;){const U=d[E],X=p[E]=C?_t(p[E]):Ze(p[E]);if(It(U,X))S(U,X,m,null,w,b,O,R,C);else break;E++}for(;E<=T&&E<=H;){const U=d[T],X=p[H]=C?_t(p[H]):Ze(p[H]);if(It(U,X))S(U,X,m,null,w,b,O,R,C);else break;T--,H--}if(E>T){if(E<=H){const U=H+1,X=UH)for(;E<=T;)Oe(d[E],w,b,!0),E++;else{const U=E,X=E,le=new Map;for(E=X;E<=H;E++){const Ie=p[E]=C?_t(p[E]):Ze(p[E]);Ie.key!=null&&le.set(Ie.key,E)}let ne,Pe=0;const Te=H-X+1;let qe=!1,ze=0;const en=new Array(Te);for(E=0;E=Te){Oe(Ie,w,b,!0);continue}let Qe;if(Ie.key!=null)Qe=le.get(Ie.key);else for(ne=X;ne<=H;ne++)if(en[ne-X]===0&&It(Ie,p[ne])){Qe=ne;break}Qe===void 0?Oe(Ie,w,b,!0):(en[Qe-X]=E+1,Qe>=ze?ze=Qe:qe=!0,S(Ie,p[Qe],m,null,w,b,O,R,C),Pe++)}const Pr=qe?gu(en):Ut;for(ne=Pr.length-1,E=Te-1;E>=0;E--){const Ie=X+E,Qe=p[Ie],Tr=p[Ie+1],Ar=Ie+1{const{el:b,type:O,transition:R,children:C,shapeFlag:E}=d;if(E&6){Ge(d.component.subTree,p,m,y);return}if(E&128){d.suspense.move(p,m,y);return}if(E&64){O.move(d,p,m,D);return}if(O===Ae){s(b,p,m);for(let T=0;TR.enter(b),w);else{const{leave:T,delayLeave:H,afterLeave:U}=R,X=()=>{d.ctx.isUnmounted?r(b):s(b,p,m)},le=()=>{T(b,()=>{X(),U&&U()})};H?H(b,X,le):le()}else s(b,p,m)},Oe=(d,p,m,y=!1,w=!1)=>{const{type:b,props:O,ref:R,children:C,dynamicChildren:E,shapeFlag:V,patchFlag:T,dirs:H,cacheIndex:U}=d;if(T===-2&&(w=!1),R!=null&&(ct(),fn(R,null,m,d,!0),ut()),U!=null&&(p.renderCache[U]=void 0),V&256){p.ctx.deactivate(d);return}const X=V&1&&H,le=!qt(d);let ne;if(le&&(ne=O&&O.onVnodeBeforeUnmount)&&Je(ne,p,d),V&6)In(d.component,m,y);else{if(V&128){d.suspense.unmount(m,y);return}X&&Ot(d,null,p,"beforeUnmount"),V&64?d.type.remove(d,p,m,D,y):E&&!E.hasOnce&&(b!==Ae||T>0&&T&64)?Le(E,p,m,!1,!0):(b===Ae&&T&384||!w&&V&16)&&Le(C,p,m),y&&jt(d)}(le&&(ne=O&&O.onVnodeUnmounted)||X)&&Ce(()=>{ne&&Je(ne,p,d),X&&Ot(d,null,p,"unmounted")},m)},jt=d=>{const{type:p,el:m,anchor:y,transition:w}=d;if(p===Ae){Ht(m,y);return}if(p===Bn){N(d);return}const b=()=>{r(m),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(d.shapeFlag&1&&w&&!w.persisted){const{leave:O,delayLeave:R}=w,C=()=>O(m,b);R?R(d.el,b,C):C()}else b()},Ht=(d,p)=>{let m;for(;d!==p;)m=h(d),r(d),d=m;r(p)},In=(d,p,m)=>{const{bum:y,scope:w,job:b,subTree:O,um:R,m:C,a:E,parent:V,slots:{__:T}}=d;Gr(C),Gr(E),y&&Hn(y),V&&j(T)&&T.forEach(H=>{V.renderCache[H]=void 0}),w.stop(),b&&(b.flags|=8,Oe(O,d,p,m)),R&&Ce(R,p),Ce(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},Le=(d,p,m,y=!1,w=!1,b=0)=>{for(let O=b;O{if(d.shapeFlag&6)return _(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const p=h(d.anchor||d.el),m=p&&p[Ti];return m?h(m):p};let L=!1;const P=(d,p,m)=>{d==null?p._vnode&&Oe(p._vnode,null,null,!0):S(p._vnode||null,d,p,null,null,null,m),p._vnode=d,L||(L=!0,Fr(),Ri(),L=!1)},D={p:S,um:Oe,m:Ge,r:jt,mt:de,mc:B,pc:Z,pbc:K,n:_,o:e};return{render:P,hydrate:void 0,createApp:ru(P)}}function Os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Pt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function pu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function wr(e,t,n=!1){const s=e.children,r=t.children;if(j(s)&&j(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function rl(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:rl(t)}function Gr(e){if(e)for(let t=0;tDe(mu);function yu(e,t){return Sr(e,null,t)}function Se(e,t,n){return Sr(e,t,n)}function Sr(e,t,n=ie){const{immediate:s,deep:r,flush:o,once:i}=n,l=he({},n),c=t&&s||!t&&o!=="post";let a;if(En){if(o==="sync"){const g=vu();a=g.__watcherHandles||(g.__watcherHandles=[])}else if(!c){const g=()=>{};return g.stop=ke,g.resume=ke,g.pause=ke,g}}const u=_e;l.call=(g,v,S)=>Ue(g,u,v,S);let f=!1;o==="post"?l.scheduler=g=>{Ce(g,u&&u.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(g,v)=>{v?g():pr(g)}),l.augmentJob=g=>{t&&(g.flags|=4),f&&(g.flags|=2,u&&(g.id=u.uid,g.i=u))};const h=Nc(e,t,l);return En&&(a?a.push(h):c&&h()),h}function _u(e,t,n){const s=this.proxy,r=ae(e)?e.includes(".")?ol(s,e):()=>s[e]:e.bind(s,s);let o;W(t)?o=t:(o=t.handler,n=t);const i=An(this),l=Sr(r,o.bind(s),n);return i(),l}function ol(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ve(t)}Modifiers`]||e[`${Rt(t)}Modifiers`];function wu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ie;let r=n;const o=t.startsWith("update:"),i=o&&bu(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>ae(u)?u.trim():u)),i.number&&(r=n.map(Wn)));let l,c=s[l=jn(t)]||s[l=jn(Ve(t))];!c&&o&&(c=s[l=jn(Rt(t))]),c&&Ue(c,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ue(a,e,6,r)}}function il(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!W(e)){const c=a=>{const u=il(a,t,!0);u&&(l=!0,he(i,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(se(e)&&s.set(e,null),null):(j(o)?o.forEach(c=>i[c]=null):he(i,o),se(e)&&s.set(e,i),i)}function hs(e,t){return!e||!ts(t)?!1:(t=t.slice(2).replace(/Once$/,""),te(e,t[0].toLowerCase()+t.slice(1))||te(e,Rt(t))||te(e,t))}function qr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:u,props:f,data:h,setupState:g,ctx:v,inheritAttrs:S}=e,$=Jn(e);let A,I;try{if(n.shapeFlag&4){const N=r||s,k=N;A=Ze(a.call(k,N,u,f,g,h,v)),I=l}else{const N=t;A=Ze(N.length>1?N(f,{attrs:l,slots:i,emit:c}):N(f,null)),I=t.props?l:Su(l)}}catch(N){hn.length=0,as(N,e,1),A=we(ye)}let F=A;if(I&&S!==!1){const N=Object.keys(I),{shapeFlag:k}=F;N.length&&k&7&&(o&&N.some(nr)&&(I=Eu(I,o)),F=Et(F,I,!1,!0))}return n.dirs&&(F=Et(F,null,!1,!0),F.dirs=F.dirs?F.dirs.concat(n.dirs):n.dirs),n.transition&&$t(F,n.transition),A=F,Jn($),A}const Su=e=>{let t;for(const n in e)(n==="class"||n==="style"||ts(n))&&((t||(t={}))[n]=e[n]);return t},Eu=(e,t)=>{const n={};for(const s in e)(!nr(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function xu(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?zr(s,i,a):!!i;if(c&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function Ru(e,t){t&&t.pendingBranch?j(e)?t.effects.push(...e):t.effects.push(e):$c(e)}const Ae=Symbol.for("v-fgt"),ps=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Bn=Symbol.for("v-stc"),hn=[];let Me=null;function Us(e=!1){hn.push(Me=e?null:[])}function Ou(){hn.pop(),Me=hn[hn.length-1]||null}let wn=1;function Qr(e,t=!1){wn+=e,e<0&&Me&&t&&(Me.hasOnce=!0)}function cl(e){return e.dynamicChildren=wn>0?Me||Ut:null,Ou(),wn>0&&Me&&Me.push(e),e}function yd(e,t,n,s,r,o){return cl(al(e,t,n,s,r,o,!0))}function Ws(e,t,n,s,r){return cl(we(e,t,n,s,r,!0))}function Sn(e){return e?e.__v_isVNode===!0:!1}function It(e,t){return e.type===t.type&&e.key===t.key}const ul=({key:e})=>e??null,Kn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ae(e)||fe(e)||W(e)?{i:ge,r:e,k:t,f:!!n}:e:null);function al(e,t=null,n=null,s=0,r=null,o=e===Ae?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ul(t),ref:t&&Kn(t),scopeId:Pi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ge};return l?(Er(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ae(n)?8:16),wn>0&&!i&&Me&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Me.push(c),c}const we=Pu;function Pu(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Ui)&&(e=ye),Sn(e)){const l=Et(e,t,!0);return n&&Er(l,n),wn>0&&!o&&Me&&(l.shapeFlag&6?Me[Me.indexOf(e)]=l:Me.push(l)),l.patchFlag=-2,l}if(Hu(e)&&(e=e.__vccOpts),t){t=Tu(t);let{class:l,style:c}=t;l&&!ae(l)&&(t.class=is(l)),se(c)&&(dr(c)&&!j(c)&&(c=he({},c)),t.style=os(c))}const i=ae(e)?1:ll(e)?128:Ai(e)?64:se(e)?4:W(e)?2:0;return al(e,t,n,s,r,i,o,!0)}function Tu(e){return e?dr(e)||Xi(e)?he({},e):e:null}function Et(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Iu(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ul(a),ref:t&&t.ref?n&&o?j(o)?o.concat(Kn(t)):[o,Kn(t)]:Kn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ae?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Et(e.ssContent),ssFallback:e.ssFallback&&Et(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&$t(u,c.clone(u)),u}function Au(e=" ",t=0){return we(ps,null,e,t)}function _d(e,t){const n=we(Bn,null,e);return n.staticCount=t,n}function bd(e="",t=!1){return t?(Us(),Ws(ye,null,e)):we(ye,null,e)}function Ze(e){return e==null||typeof e=="boolean"?we(ye):j(e)?we(Ae,null,e.slice()):Sn(e)?_t(e):we(ps,null,String(e))}function _t(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Et(e)}function Er(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(j(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Er(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Xi(t)?t._ctx=ge:r===3&&ge&&(ge.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:ge},n=32):(t=String(t),s&64?(n=16,t=[Au(t)]):n=8);e.children=t,e.shapeFlag|=n}function Iu(...e){const t={};for(let n=0;n_e||ge;let Xn,Gs;{const e=rs(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Xn=t("__VUE_INSTANCE_SETTERS__",n=>_e=n),Gs=t("__VUE_SSR_SETTERS__",n=>En=n)}const An=e=>{const t=_e;return Xn(e),e.scope.on(),()=>{e.scope.off(),Xn(t)}},Jr=()=>{_e&&_e.scope.off(),Xn(null)};function fl(e){return e.vnode.shapeFlag&4}let En=!1;function Fu(e,t=!1,n=!1){t&&Gs(t);const{props:s,children:r}=e.vnode,o=fl(e);iu(e,s,o,t),au(e,r,n||t);const i=o?$u(e,t):void 0;return t&&Gs(!1),i}function $u(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Yc);const{setup:s}=n;if(s){ct();const r=e.setupContext=s.length>1?hl(e):null,o=An(e),i=Pn(s,e,0,[e.props,r]),l=Jo(i);if(ut(),o(),(l||e.sp)&&!qt(e)&&Hi(e),l){if(i.then(Jr,Jr),t)return i.then(c=>{Yr(e,c)}).catch(c=>{as(c,e,0)});e.asyncDep=i}else Yr(e,i)}else dl(e)}function Yr(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)&&(e.setupState=Si(t)),dl(e)}function dl(e,t,n){const s=e.type;e.render||(e.render=s.render||ke);{const r=An(e);ct();try{Xc(e)}finally{ut(),r()}}}const Du={get(e,t){return ve(e,"get",""),e[t]}};function hl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Du),slots:e.slots,emit:e.emit,expose:t}}function gs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Si(hr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in dn)return dn[n](e)},has(t,n){return n in t||n in dn}})):e.proxy}function ju(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function Hu(e){return W(e)&&"__vccOpts"in e}const be=(e,t)=>Ic(e,t,En);function xr(e,t,n){const s=arguments.length;return s===2?se(t)&&!j(t)?Sn(t)?we(e,null,[t]):we(e,t):we(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Sn(n)&&(n=[n]),we(e,t,n))}const Vu="3.5.18",wd=ke;/** -* @vue/runtime-dom v3.5.18 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let qs;const Xr=typeof window<"u"&&window.trustedTypes;if(Xr)try{qs=Xr.createPolicy("vue",{createHTML:e=>e})}catch{}const pl=qs?e=>qs.createHTML(e):e=>e,ku="http://www.w3.org/2000/svg",Bu="http://www.w3.org/1998/Math/MathML",st=typeof document<"u"?document:null,Zr=st&&st.createElement("template"),Ku={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?st.createElementNS(ku,e):t==="mathml"?st.createElementNS(Bu,e):n?st.createElement(e,{is:n}):st.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>st.createTextNode(e),createComment:e=>st.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>st.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{Zr.innerHTML=pl(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Zr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ht="transition",nn="animation",zt=Symbol("_vtc"),gl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ml=he({},Li,gl),Uu=e=>(e.displayName="Transition",e.props=ml,e),Sd=Uu((e,{slots:t})=>xr(Vc,vl(e),t)),Tt=(e,t=[])=>{j(e)?e.forEach(n=>n(...t)):e&&e(...t)},eo=e=>e?j(e)?e.some(t=>t.length>1):e.length>1:!1;function vl(e){const t={};for(const M in e)M in gl||(t[M]=e[M]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,v=Wu(r),S=v&&v[0],$=v&&v[1],{onBeforeEnter:A,onEnter:I,onEnterCancelled:F,onLeave:N,onLeaveCancelled:k,onBeforeAppear:z=A,onAppear:q=I,onAppearCancelled:B=F}=t,x=(M,Y,de,Ee)=>{M._enterCancelled=Ee,gt(M,Y?u:l),gt(M,Y?a:i),de&&de()},K=(M,Y)=>{M._isLeaving=!1,gt(M,f),gt(M,g),gt(M,h),Y&&Y()},Q=M=>(Y,de)=>{const Ee=M?q:I,re=()=>x(Y,M,de);Tt(Ee,[Y,re]),to(()=>{gt(Y,M?c:o),Ye(Y,M?u:l),eo(Ee)||no(Y,s,S,re)})};return he(t,{onBeforeEnter(M){Tt(A,[M]),Ye(M,o),Ye(M,i)},onBeforeAppear(M){Tt(z,[M]),Ye(M,c),Ye(M,a)},onEnter:Q(!1),onAppear:Q(!0),onLeave(M,Y){M._isLeaving=!0;const de=()=>K(M,Y);Ye(M,f),M._enterCancelled?(Ye(M,h),zs()):(zs(),Ye(M,h)),to(()=>{M._isLeaving&&(gt(M,f),Ye(M,g),eo(N)||no(M,s,$,de))}),Tt(N,[M,de])},onEnterCancelled(M){x(M,!1,void 0,!0),Tt(F,[M])},onAppearCancelled(M){x(M,!0,void 0,!0),Tt(B,[M])},onLeaveCancelled(M){K(M),Tt(k,[M])}})}function Wu(e){if(e==null)return null;if(se(e))return[Ps(e.enter),Ps(e.leave)];{const t=Ps(e);return[t,t]}}function Ps(e){return zl(e)}function Ye(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[zt]||(e[zt]=new Set)).add(t)}function gt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[zt];n&&(n.delete(t),n.size||(e[zt]=void 0))}function to(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Gu=0;function no(e,t,n,s){const r=e._endId=++Gu,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=yl(e,t);if(!i)return s();const a=i+"end";let u=0;const f=()=>{e.removeEventListener(a,h),o()},h=g=>{g.target===e&&++u>=c&&f()};setTimeout(()=>{u(n[v]||"").split(", "),r=s(`${ht}Delay`),o=s(`${ht}Duration`),i=so(r,o),l=s(`${nn}Delay`),c=s(`${nn}Duration`),a=so(l,c);let u=null,f=0,h=0;t===ht?i>0&&(u=ht,f=i,h=o.length):t===nn?a>0&&(u=nn,f=a,h=c.length):(f=Math.max(i,a),u=f>0?i>a?ht:nn:null,h=u?u===ht?o.length:c.length:0);const g=u===ht&&/\b(transform|all)(,|$)/.test(s(`${ht}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:g}}function so(e,t){for(;e.lengthro(n)+ro(e[s])))}function ro(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function zs(){return document.body.offsetHeight}function qu(e,t,n){const s=e[zt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Zn=Symbol("_vod"),_l=Symbol("_vsh"),Ed={beforeMount(e,{value:t},{transition:n}){e[Zn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):sn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),sn(e,!0),s.enter(e)):s.leave(e,()=>{sn(e,!1)}):sn(e,t))},beforeUnmount(e,{value:t}){sn(e,t)}};function sn(e,t){e.style.display=t?e[Zn]:"none",e[_l]=!t}const zu=Symbol(""),Qu=/(^|;)\s*display\s*:/;function Ju(e,t,n){const s=e.style,r=ae(n);let o=!1;if(n&&!r){if(t)if(ae(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Un(s,l,"")}else for(const i in t)n[i]==null&&Un(s,i,"");for(const i in n)i==="display"&&(o=!0),Un(s,i,n[i])}else if(r){if(t!==n){const i=s[zu];i&&(n+=";"+i),s.cssText=n,o=Qu.test(n)}}else t&&e.removeAttribute("style");Zn in e&&(e[Zn]=o?s.display:"",e[_l]&&(s.display="none"))}const oo=/\s*!important$/;function Un(e,t,n){if(j(n))n.forEach(s=>Un(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Yu(e,t);oo.test(n)?e.setProperty(Rt(s),n.replace(oo,""),"important"):e[s]=n}}const io=["Webkit","Moz","ms"],Ts={};function Yu(e,t){const n=Ts[t];if(n)return n;let s=Ve(t);if(s!=="filter"&&s in e)return Ts[t]=s;s=ss(s);for(let r=0;rAs||(ta.then(()=>As=0),As=Date.now());function sa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Ue(ra(s,n.value),t,5,[s])};return n.value=e,n.attached=na(),n}function ra(e,t){if(j(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ho=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,oa=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?qu(e,s,i):t==="style"?Ju(e,n,s):ts(t)?nr(t)||Zu(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ia(e,t,s,i))?(uo(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&co(e,t,s,i,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ae(s))?uo(e,Ve(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),co(e,t,s,i))};function ia(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ho(t)&&W(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ho(t)&&ae(n)?!1:t in e}const bl=new WeakMap,wl=new WeakMap,es=Symbol("_moveCb"),po=Symbol("_enterCb"),la=e=>(delete e.props.mode,e),ca=la({name:"TransitionGroup",props:he({},ml,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Dt(),s=Ni();let r,o;return ki(()=>{if(!r.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!da(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(ua),r.forEach(aa);const l=r.filter(fa);zs(),l.forEach(c=>{const a=c.el,u=a.style;Ye(a,i),u.transform=u.webkitTransform=u.transitionDuration="";const f=a[es]=h=>{h&&h.target!==a||(!h||/transform$/.test(h.propertyName))&&(a.removeEventListener("transitionend",f),a[es]=null,gt(a,i))};a.addEventListener("transitionend",f)}),r=[]}),()=>{const i=J(e),l=vl(i);let c=i.tag||Ae;if(r=[],o)for(let a=0;a{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const o=t.nodeType===1?t:t.parentNode;o.appendChild(s);const{hasTransform:i}=yl(s);return o.removeChild(s),i}const xt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return j(t)?n=>Hn(t,n):t};function ha(e){e.target.composing=!0}function go(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const je=Symbol("_assign"),mo={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[je]=xt(r);const o=s||r.props&&r.props.type==="number";it(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=Wn(l)),e[je](l)}),n&&it(e,"change",()=>{e.value=e.value.trim()}),t||(it(e,"compositionstart",ha),it(e,"compositionend",go),it(e,"change",go))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[je]=xt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?Wn(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},pa={deep:!0,created(e,t,n){e[je]=xt(n),it(e,"change",()=>{const s=e._modelValue,r=Qt(e),o=e.checked,i=e[je];if(j(s)){const l=or(s,r),c=l!==-1;if(o&&!c)i(s.concat(r));else if(!o&&c){const a=[...s];a.splice(l,1),i(a)}}else if(Zt(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(Sl(e,o))})},mounted:vo,beforeUpdate(e,t,n){e[je]=xt(n),vo(e,t,n)}};function vo(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(j(t))r=or(t,s.props.value)>-1;else if(Zt(t))r=t.has(s.props.value);else{if(t===n)return;r=Ft(t,Sl(e,!0))}e.checked!==r&&(e.checked=r)}const ga={created(e,{value:t},n){e.checked=Ft(t,n.props.value),e[je]=xt(n),it(e,"change",()=>{e[je](Qt(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[je]=xt(s),t!==n&&(e.checked=Ft(t,s.props.value))}},ma={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=Zt(t);it(e,"change",()=>{const o=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?Wn(Qt(i)):Qt(i));e[je](e.multiple?r?new Set(o):o:o[0]),e._assigning=!0,Tn(()=>{e._assigning=!1})}),e[je]=xt(s)},mounted(e,{value:t}){yo(e,t)},beforeUpdate(e,t,n){e[je]=xt(n)},updated(e,{value:t}){e._assigning||yo(e,t)}};function yo(e,t){const n=e.multiple,s=j(t);if(!(n&&!s&&!Zt(t))){for(let r=0,o=e.options.length;rString(a)===String(l)):i.selected=or(t,l)>-1}else i.selected=t.has(l);else if(Ft(Qt(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Qt(e){return"_value"in e?e._value:e.value}function Sl(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Cd={created(e,t,n){Dn(e,t,n,null,"created")},mounted(e,t,n){Dn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Dn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Dn(e,t,n,s,"updated")}};function va(e,t){switch(e){case"SELECT":return ma;case"TEXTAREA":return mo;default:switch(t){case"checkbox":return pa;case"radio":return ga;default:return mo}}}function Dn(e,t,n,s,r){const i=va(e.tagName,n.props&&n.props.type)[r];i&&i(e,t,n,s)}const ya=["ctrl","shift","alt","meta"],_a={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ya.some(n=>e[`${n}Key`]&&!t.includes(n))},Rd=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const o=Rt(r.key);if(t.some(i=>i===o||ba[i]===o))return e(r)})},wa=he({patchProp:oa},Ku);let _o;function El(){return _o||(_o=du(wa))}const Pd=(...e)=>{El().render(...e)},Td=(...e)=>{const t=El().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Ea(s);if(!r)return;const o=t._component;!W(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Sa(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t};function Sa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Ea(e){return ae(e)?document.querySelector(e):e}/*! - * pinia v2.3.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let xl;const ms=e=>xl=e,Cl=Symbol();function Qs(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var pn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(pn||(pn={}));function Ad(){const e=si(!0),t=e.run(()=>ue({}));let n=[],s=[];const r=hr({install(o){ms(r),r._a=o,o.provide(Cl,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const Rl=()=>{};function bo(e,t,n,s=Rl){e.push(t);const r=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&ir()&&ri(r),r}function kt(e,...t){e.slice().forEach(n=>{n(...t)})}const xa=e=>e(),wo=Symbol(),Is=Symbol();function Js(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];Qs(r)&&Qs(s)&&e.hasOwnProperty(n)&&!fe(s)&&!lt(s)?e[n]=Js(r,s):e[n]=s}return e}const Ca=Symbol();function Ra(e){return!Qs(e)||!e.hasOwnProperty(Ca)}const{assign:mt}=Object;function Oa(e){return!!(fe(e)&&e.effect)}function Pa(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let c;function a(){l||(n.state.value[e]=r?r():{});const u=Rc(n.state.value[e]);return mt(u,o,Object.keys(i||{}).reduce((f,h)=>(f[h]=hr(be(()=>{ms(n);const g=n._s.get(e);return i[h].call(g,g)})),f),{}))}return c=Ol(e,a,t,n,s,!0),c}function Ol(e,t,n={},s,r,o){let i;const l=mt({actions:{}},n),c={deep:!0};let a,u,f=[],h=[],g;const v=s.state.value[e];!o&&!v&&(s.state.value[e]={}),ue({});let S;function $(B){let x;a=u=!1,typeof B=="function"?(B(s.state.value[e]),x={type:pn.patchFunction,storeId:e,events:g}):(Js(s.state.value[e],B),x={type:pn.patchObject,payload:B,storeId:e,events:g});const K=S=Symbol();Tn().then(()=>{S===K&&(a=!0)}),u=!0,kt(f,x,s.state.value[e])}const A=o?function(){const{state:x}=n,K=x?x():{};this.$patch(Q=>{mt(Q,K)})}:Rl;function I(){i.stop(),f=[],h=[],s._s.delete(e)}const F=(B,x="")=>{if(wo in B)return B[Is]=x,B;const K=function(){ms(s);const Q=Array.from(arguments),M=[],Y=[];function de(G){M.push(G)}function Ee(G){Y.push(G)}kt(h,{args:Q,name:K[Is],store:k,after:de,onError:Ee});let re;try{re=B.apply(this&&this.$id===e?this:k,Q)}catch(G){throw kt(Y,G),G}return re instanceof Promise?re.then(G=>(kt(M,G),G)).catch(G=>(kt(Y,G),Promise.reject(G))):(kt(M,re),re)};return K[wo]=!0,K[Is]=x,K},N={_p:s,$id:e,$onAction:bo.bind(null,h),$patch:$,$reset:A,$subscribe(B,x={}){const K=bo(f,B,x.detached,()=>Q()),Q=i.run(()=>Se(()=>s.state.value[e],M=>{(x.flush==="sync"?u:a)&&B({storeId:e,type:pn.direct,events:g},M)},mt({},c,x)));return K},$dispose:I},k=On(N);s._s.set(e,k);const q=(s._a&&s._a.runWithContext||xa)(()=>s._e.run(()=>(i=si()).run(()=>t({action:F}))));for(const B in q){const x=q[B];if(fe(x)&&!Oa(x)||lt(x))o||(v&&Ra(x)&&(fe(x)?x.value=v[B]:Js(x,v[B])),s.state.value[e][B]=x);else if(typeof x=="function"){const K=F(x,B);q[B]=K,l.actions[B]=x}}return mt(k,q),mt(J(k),q),Object.defineProperty(k,"$state",{get:()=>s.state.value[e],set:B=>{$(x=>{mt(x,B)})}}),s._p.forEach(B=>{mt(k,i.run(()=>B({store:k,app:s._a,pinia:s,options:l})))}),v&&o&&n.hydrate&&n.hydrate(k.$state,v),a=!0,u=!0,k}/*! #__NO_SIDE_EFFECTS__ */function Id(e,t,n){let s,r;const o=typeof t=="function";typeof e=="string"?(s=e,r=o?n:t):(r=e,s=e.id);function i(l,c){const a=ou();return l=l||(a?De(Cl,null):null),l&&ms(l),l=xl,l._s.has(s)||(o?Ol(s,t,r,l):Pa(s,r,l)),l._s.get(s)}return i.$id=s,i}function Md(e){{const t=J(e),n={};for(const s in t){const r=t[s];r.effect?n[s]=be({get:()=>e[s],set(o){e[s]=o}}):(fe(r)||lt(r))&&(n[s]=Tc(e,s))}return n}}var Ta=Object.defineProperty,Aa=Object.defineProperties,Ia=Object.getOwnPropertyDescriptors,So=Object.getOwnPropertySymbols,Ma=Object.prototype.hasOwnProperty,Na=Object.prototype.propertyIsEnumerable,Eo=(e,t,n)=>t in e?Ta(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,La=(e,t)=>{for(var n in t||(t={}))Ma.call(t,n)&&Eo(e,n,t[n]);if(So)for(var n of So(t))Na.call(t,n)&&Eo(e,n,t[n]);return e},Fa=(e,t)=>Aa(e,Ia(t));function Nd(e,t){var n;const s=bi();return yu(()=>{s.value=e()},Fa(La({},t),{flush:(n=void 0)!=null?n:"sync"})),us(s)}var xo;const vs=typeof window<"u",$a=e=>typeof e<"u",Ys=e=>typeof e=="function",Da=e=>typeof e=="string",Jt=()=>{},ja=vs&&((xo=window==null?void 0:window.navigator)==null?void 0:xo.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Ct(e){return typeof e=="function"?e():Nt(e)}function Pl(e,t){function n(...s){return new Promise((r,o)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(o)})}return n}function Ha(e,t={}){let n,s,r=Jt;const o=l=>{clearTimeout(l),r(),r=Jt};return l=>{const c=Ct(e),a=Ct(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(s&&(o(s),s=null),Promise.resolve(l())):new Promise((u,f)=>{r=t.rejectOnCancel?f:u,a&&!s&&(s=setTimeout(()=>{n&&o(n),s=null,u(l())},a)),n=setTimeout(()=>{s&&o(s),s=null,u(l())},c)})}}function Va(e,t=!0,n=!0,s=!1){let r=0,o,i=!0,l=Jt,c;const a=()=>{o&&(clearTimeout(o),o=void 0,l(),l=Jt)};return f=>{const h=Ct(e),g=Date.now()-r,v=()=>c=f();return a(),h<=0?(r=Date.now(),v()):(g>h&&(n||!i)?(r=Date.now(),v()):t&&(c=new Promise((S,$)=>{l=s?$:S,o=setTimeout(()=>{r=Date.now(),i=!0,S(v()),a()},Math.max(0,h-g))})),!n&&!o&&(o=setTimeout(()=>i=!0,h)),i=!1,c)}}function ka(e){return e}function Ba(e,t){let n,s,r;const o=ue(!0),i=()=>{o.value=!0,r()};Se(e,i,{flush:"sync"});const l=Ys(t)?t:t.get,c=Ys(t)?void 0:t.set,a=Cc((u,f)=>(s=u,r=f,{get(){return o.value&&(n=l(),o.value=!1),s(),n},set(h){c==null||c(h)}}));return Object.isExtensible(a)&&(a.trigger=i),a}function ys(e){return ir()?(ri(e),!0):!1}function Ka(e,t=200,n={}){return Pl(Ha(t,n),e)}function Ld(e,t=200,n={}){const s=ue(e.value),r=Ka(()=>{s.value=e.value},t,n);return Se(e,()=>r()),s}function Fd(e,t=200,n=!1,s=!0,r=!1){return Pl(Va(t,n,s,r),e)}function Cr(e,t=!0){Dt()?mr(e):t?e():Tn(e)}function $d(e,t,n={}){const{immediate:s=!0}=n,r=ue(!1);let o=null;function i(){o&&(clearTimeout(o),o=null)}function l(){r.value=!1,i()}function c(...a){i(),r.value=!0,o=setTimeout(()=>{r.value=!1,o=null,e(...a)},Ct(t))}return s&&(r.value=!0,vs&&c()),ys(l),{isPending:us(r),start:c,stop:l}}function Ne(e){var t;const n=Ct(e);return(t=n==null?void 0:n.$el)!=null?t:n}const ft=vs?window:void 0,Ua=vs?window.document:void 0;function He(...e){let t,n,s,r;if(Da(e[0])||Array.isArray(e[0])?([n,s,r]=e,t=ft):[t,n,s,r]=e,!t)return Jt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const o=[],i=()=>{o.forEach(u=>u()),o.length=0},l=(u,f,h,g)=>(u.addEventListener(f,h,g),()=>u.removeEventListener(f,h,g)),c=Se(()=>[Ne(t),Ct(r)],([u,f])=>{i(),u&&o.push(...n.flatMap(h=>s.map(g=>l(u,h,g,f))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return ys(a),a}let Co=!1;function Dd(e,t,n={}){const{window:s=ft,ignore:r=[],capture:o=!0,detectIframe:i=!1}=n;if(!s)return;ja&&!Co&&(Co=!0,Array.from(s.document.body.children).forEach(h=>h.addEventListener("click",Jt)));let l=!0;const c=h=>r.some(g=>{if(typeof g=="string")return Array.from(s.document.querySelectorAll(g)).some(v=>v===h.target||h.composedPath().includes(v));{const v=Ne(g);return v&&(h.target===v||h.composedPath().includes(v))}}),u=[He(s,"click",h=>{const g=Ne(e);if(!(!g||g===h.target||h.composedPath().includes(g))){if(h.detail===0&&(l=!c(h)),!l){l=!0;return}t(h)}},{passive:!0,capture:o}),He(s,"pointerdown",h=>{const g=Ne(e);g&&(l=!h.composedPath().includes(g)&&!c(h))},{passive:!0}),i&&He(s,"blur",h=>{var g;const v=Ne(e);((g=s.document.activeElement)==null?void 0:g.tagName)==="IFRAME"&&!(v!=null&&v.contains(s.document.activeElement))&&t(h)})].filter(Boolean);return()=>u.forEach(h=>h())}function jd(e={}){var t;const{window:n=ft}=e,s=(t=e.document)!=null?t:n==null?void 0:n.document,r=Ba(()=>null,()=>s==null?void 0:s.activeElement);return n&&(He(n,"blur",o=>{o.relatedTarget===null&&r.trigger()},!0),He(n,"focus",r.trigger,!0)),r}function Tl(e,t=!1){const n=ue(),s=()=>n.value=!!e();return s(),Cr(s,t),n}function Wa(e){return JSON.parse(JSON.stringify(e))}const Ro=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Oo="__vueuse_ssr_handlers__";Ro[Oo]=Ro[Oo]||{};function Hd(e,t,{window:n=ft,initialValue:s=""}={}){const r=ue(s),o=be(()=>{var i;return Ne(t)||((i=n==null?void 0:n.document)==null?void 0:i.documentElement)});return Se([o,()=>Ct(e)],([i,l])=>{var c;if(i&&n){const a=(c=n.getComputedStyle(i).getPropertyValue(l))==null?void 0:c.trim();r.value=a||s}},{immediate:!0}),Se(r,i=>{var l;(l=o.value)!=null&&l.style&&o.value.style.setProperty(Ct(e),i)}),r}function Vd({document:e=Ua}={}){if(!e)return ue("visible");const t=ue(e.visibilityState);return He(e,"visibilitychange",()=>{t.value=e.visibilityState}),t}var Po=Object.getOwnPropertySymbols,Ga=Object.prototype.hasOwnProperty,qa=Object.prototype.propertyIsEnumerable,za=(e,t)=>{var n={};for(var s in e)Ga.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&Po)for(var s of Po(e))t.indexOf(s)<0&&qa.call(e,s)&&(n[s]=e[s]);return n};function Al(e,t,n={}){const s=n,{window:r=ft}=s,o=za(s,["window"]);let i;const l=Tl(()=>r&&"ResizeObserver"in r),c=()=>{i&&(i.disconnect(),i=void 0)},a=Se(()=>Ne(e),f=>{c(),l.value&&r&&f&&(i=new ResizeObserver(t),i.observe(f,o))},{immediate:!0,flush:"post"}),u=()=>{c(),a()};return ys(u),{isSupported:l,stop:u}}function kd(e,t={}){const{reset:n=!0,windowResize:s=!0,windowScroll:r=!0,immediate:o=!0}=t,i=ue(0),l=ue(0),c=ue(0),a=ue(0),u=ue(0),f=ue(0),h=ue(0),g=ue(0);function v(){const S=Ne(e);if(!S){n&&(i.value=0,l.value=0,c.value=0,a.value=0,u.value=0,f.value=0,h.value=0,g.value=0);return}const $=S.getBoundingClientRect();i.value=$.height,l.value=$.bottom,c.value=$.left,a.value=$.right,u.value=$.top,f.value=$.width,h.value=$.x,g.value=$.y}return Al(e,v),Se(()=>Ne(e),S=>!S&&v()),r&&He("scroll",v,{capture:!0,passive:!0}),s&&He("resize",v,{passive:!0}),Cr(()=>{o&&v()}),{height:i,bottom:l,left:c,right:a,top:u,width:f,x:h,y:g,update:v}}function Bd(e,t={width:0,height:0},n={}){const{window:s=ft,box:r="content-box"}=n,o=be(()=>{var c,a;return(a=(c=Ne(e))==null?void 0:c.namespaceURI)==null?void 0:a.includes("svg")}),i=ue(t.width),l=ue(t.height);return Al(e,([c])=>{const a=r==="border-box"?c.borderBoxSize:r==="content-box"?c.contentBoxSize:c.devicePixelContentBoxSize;if(s&&o.value){const u=Ne(e);if(u){const f=s.getComputedStyle(u);i.value=parseFloat(f.width),l.value=parseFloat(f.height)}}else if(a){const u=Array.isArray(a)?a:[a];i.value=u.reduce((f,{inlineSize:h})=>f+h,0),l.value=u.reduce((f,{blockSize:h})=>f+h,0)}else i.value=c.contentRect.width,l.value=c.contentRect.height},n),Se(()=>Ne(e),c=>{i.value=c?t.width:0,l.value=c?t.height:0}),{width:i,height:l}}var To=Object.getOwnPropertySymbols,Qa=Object.prototype.hasOwnProperty,Ja=Object.prototype.propertyIsEnumerable,Ya=(e,t)=>{var n={};for(var s in e)Qa.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(e!=null&&To)for(var s of To(e))t.indexOf(s)<0&&Ja.call(e,s)&&(n[s]=e[s]);return n};function Kd(e,t,n={}){const s=n,{window:r=ft}=s,o=Ya(s,["window"]);let i;const l=Tl(()=>r&&"MutationObserver"in r),c=()=>{i&&(i.disconnect(),i=void 0)},a=Se(()=>Ne(e),f=>{c(),l.value&&r&&f&&(i=new MutationObserver(t),i.observe(f,o))},{immediate:!0}),u=()=>{c(),a()};return ys(u),{isSupported:l,stop:u}}var Ao;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Ao||(Ao={}));var Xa=Object.defineProperty,Io=Object.getOwnPropertySymbols,Za=Object.prototype.hasOwnProperty,ef=Object.prototype.propertyIsEnumerable,Mo=(e,t,n)=>t in e?Xa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,tf=(e,t)=>{for(var n in t||(t={}))Za.call(t,n)&&Mo(e,n,t[n]);if(Io)for(var n of Io(t))ef.call(t,n)&&Mo(e,n,t[n]);return e};const nf={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};tf({linear:ka},nf);function Ud(e,t,n,s={}){var r,o,i;const{clone:l=!1,passive:c=!1,eventName:a,deep:u=!1,defaultValue:f}=s,h=Dt(),g=n||(h==null?void 0:h.emit)||((r=h==null?void 0:h.$emit)==null?void 0:r.bind(h))||((i=(o=h==null?void 0:h.proxy)==null?void 0:o.$emit)==null?void 0:i.bind(h==null?void 0:h.proxy));let v=a;t||(t="modelValue"),v=a||v||`update:${t.toString()}`;const S=A=>l?Ys(l)?l(A):Wa(A):A,$=()=>$a(e[t])?S(e[t]):f;if(c){const A=$(),I=ue(A);return Se(()=>e[t],F=>I.value=S(F)),Se(I,F=>{(F!==e[t]||u)&&g(v,F)},{deep:u}),I}else return be({get(){return $()},set(A){g(v,A)}})}function Wd({window:e=ft}={}){if(!e)return ue(!1);const t=ue(e.document.hasFocus());return He(e,"blur",()=>{t.value=!1}),He(e,"focus",()=>{t.value=!0}),t}function Gd(e={}){const{window:t=ft,initialWidth:n=1/0,initialHeight:s=1/0,listenOrientation:r=!0,includeScrollbar:o=!0}=e,i=ue(n),l=ue(s),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};return c(),Cr(c),He("resize",c,{passive:!0}),r&&He("orientationchange",c,{passive:!0}),{width:i,height:l}}/*! - * vue-router v4.5.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const Kt=typeof document<"u";function Il(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Il(e.default)}const ee=Object.assign;function Ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=We(r)?r.map(e):e(r)}return n}const gn=()=>{},We=Array.isArray,Ml=/#/g,rf=/&/g,of=/\//g,lf=/=/g,cf=/\?/g,Nl=/\+/g,uf=/%5B/g,af=/%5D/g,Ll=/%5E/g,ff=/%60/g,Fl=/%7B/g,df=/%7C/g,$l=/%7D/g,hf=/%20/g;function Rr(e){return encodeURI(""+e).replace(df,"|").replace(uf,"[").replace(af,"]")}function pf(e){return Rr(e).replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function Xs(e){return Rr(e).replace(Nl,"%2B").replace(hf,"+").replace(Ml,"%23").replace(rf,"%26").replace(ff,"`").replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function gf(e){return Xs(e).replace(lf,"%3D")}function mf(e){return Rr(e).replace(Ml,"%23").replace(cf,"%3F")}function vf(e){return e==null?"":mf(e).replace(of,"%2F")}function xn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const yf=/\/$/,_f=e=>e.replace(yf,"");function Ns(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),o=t.slice(c+1,l>-1?l:t.length),r=e(o)),l>-1&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Ef(s??t,n),{fullPath:s+(o&&"?")+o+i,path:s,query:r,hash:xn(i)}}function bf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function No(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function wf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Yt(t.matched[s],n.matched[r])&&Dl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Yt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Dl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Sf(e[n],t[n]))return!1;return!0}function Sf(e,t){return We(e)?Lo(e,t):We(t)?Lo(t,e):e===t}function Lo(e,t){return We(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ef(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cn;(function(e){e.pop="pop",e.push="push"})(Cn||(Cn={}));var mn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mn||(mn={}));function xf(e){if(!e)if(Kt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),_f(e)}const Cf=/^[^#]+#/;function Rf(e,t){return e.replace(Cf,"#")+t}function Of(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const _s=()=>({left:window.scrollX,top:window.scrollY});function Pf(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Of(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Fo(e,t){return(history.state?history.state.position-t:-1)+e}const Zs=new Map;function Tf(e,t){Zs.set(e,t)}function Af(e){const t=Zs.get(e);return Zs.delete(e),t}let If=()=>location.protocol+"//"+location.host;function jl(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let l=r.includes(e.slice(o))?e.slice(o).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),No(c,"")}return No(n,e)+s+r}function Mf(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const g=jl(e,location),v=n.value,S=t.value;let $=0;if(h){if(n.value=g,t.value=h,i&&i===v){i=null;return}$=S?h.position-S.position:0}else s(g);r.forEach(A=>{A(n.value,v,{delta:$,type:Cn.pop,direction:$?$>0?mn.forward:mn.back:mn.unknown})})};function c(){i=n.value}function a(h){r.push(h);const g=()=>{const v=r.indexOf(h);v>-1&&r.splice(v,1)};return o.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(ee({},h.state,{scroll:_s()}),"")}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:c,listen:a,destroy:f}}function $o(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?_s():null}}function Nf(e){const{history:t,location:n}=window,s={value:jl(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,a,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:If()+e+c;try{t[u?"replaceState":"pushState"](a,"",h),r.value=a}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(c,a){const u=ee({},t.state,$o(r.value.back,c,r.value.forward,!0),a,{position:r.value.position});o(c,u,!0),s.value=c}function l(c,a){const u=ee({},r.value,t.state,{forward:c,scroll:_s()});o(u.current,u,!0);const f=ee({},$o(s.value,c,null),{position:u.position+1},a);o(c,f,!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function qd(e){e=xf(e);const t=Nf(e),n=Mf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ee({location:"",base:e,go:s,createHref:Rf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Lf(e){return typeof e=="string"||e&&typeof e=="object"}function Hl(e){return typeof e=="string"||typeof e=="symbol"}const Vl=Symbol("");var Do;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Do||(Do={}));function Xt(e,t){return ee(new Error,{type:e,[Vl]:!0},t)}function nt(e,t){return e instanceof Error&&Vl in e&&(t==null||!!(e.type&t))}const jo="[^/]+?",Ff={sensitive:!1,strict:!1,start:!0,end:!0},$f=/[.+*?^${}()[\]/\\]/g;function Df(e,t){const n=ee({},Ff,t),s=[];let r=n.start?"^":"";const o=[];for(const a of e){const u=a.length?[]:[90];n.strict&&!a.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function kl(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Hf={type:0,value:""},Vf=/[a-zA-Z0-9_]/;function kf(e){if(!e)return[[]];if(e==="/")return[[Hf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${a}": ${g}`)}let n=0,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,a="",u="";function f(){a&&(n===0?o.push({type:0,value:a}):n===1||n===2||n===3?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:a,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function h(){a+=c}for(;l{i(F)}:gn}function i(f){if(Hl(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function c(f){const h=Gf(f,n);n.splice(h,0,f),f.record.name&&!Bo(f)&&s.set(f.record.name,f)}function a(f,h){let g,v={},S,$;if("name"in f&&f.name){if(g=s.get(f.name),!g)throw Xt(1,{location:f});$=g.record.name,v=ee(Vo(h.params,g.keys.filter(F=>!F.optional).concat(g.parent?g.parent.keys.filter(F=>F.optional):[]).map(F=>F.name)),f.params&&Vo(f.params,g.keys.map(F=>F.name))),S=g.stringify(v)}else if(f.path!=null)S=f.path,g=n.find(F=>F.re.test(S)),g&&(v=g.parse(S),$=g.record.name);else{if(g=h.name?s.get(h.name):n.find(F=>F.re.test(h.path)),!g)throw Xt(1,{location:f,currentLocation:h});$=g.record.name,v=ee({},h.params,f.params),S=g.stringify(v)}const A=[];let I=g;for(;I;)A.unshift(I.record),I=I.parent;return{name:$,path:S,params:v,matched:A,meta:Wf(A)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:a,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Vo(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ko(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Uf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Uf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Bo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wf(e){return e.reduce((t,n)=>ee(t,n.meta),{})}function Ko(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function Gf(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;kl(e,t[o])<0?s=o:n=o+1}const r=qf(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qf(e){let t=e;for(;t=t.parent;)if(Bl(t)&&kl(e,t)===0)return t}function Bl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zf(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ro&&Xs(o)):[s&&Xs(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Qf(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=We(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Jf=Symbol(""),Wo=Symbol(""),bs=Symbol(""),Or=Symbol(""),er=Symbol("");function rn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function bt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const a=h=>{h===!1?c(Xt(4,{from:n,to:t})):h instanceof Error?c(h):Lf(h)?c(Xt(2,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},u=o(()=>e.call(s&&s.instances[r],t,n,a));let f=Promise.resolve(u);e.length<3&&(f=f.then(a)),f.catch(h=>c(h))})}function Ls(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Il(c)){const u=(c.__vccOpts||c)[t];u&&o.push(bt(u,n,s,i,l,r))}else{let a=c();o.push(()=>a.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=sf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const g=(f.__vccOpts||f)[t];return g&&bt(g,n,s,i,l,r)()}))}}return o}function Go(e){const t=De(bs),n=De(Or),s=be(()=>{const c=Nt(e.to);return t.resolve(c)}),r=be(()=>{const{matched:c}=s.value,{length:a}=c,u=c[a-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(Yt.bind(null,u));if(h>-1)return h;const g=qo(c[a-2]);return a>1&&qo(u)===g&&f[f.length-1].path!==g?f.findIndex(Yt.bind(null,c[a-2])):h}),o=be(()=>r.value>-1&&td(n.params,s.value.params)),i=be(()=>r.value>-1&&r.value===n.matched.length-1&&Dl(n.params,s.value.params));function l(c={}){if(ed(c)){const a=t[Nt(e.replace)?"replace":"push"](Nt(e.to)).catch(gn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>a),a}return Promise.resolve()}return{route:s,href:be(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Yf(e){return e.length===1?e[0]:e}const Xf=ji({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Go,setup(e,{slots:t}){const n=On(Go(e)),{options:s}=De(bs),r=be(()=>({[zo(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[zo(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Yf(t.default(n));return e.custom?o:xr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Zf=Xf;function ed(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function td(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!We(r)||r.length!==s.length||s.some((o,i)=>o!==r[i]))return!1}return!0}function qo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const zo=(e,t,n)=>e??t??n,nd=ji({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=De(er),r=be(()=>e.route||s.value),o=De(Wo,0),i=be(()=>{let a=Nt(o);const{matched:u}=r.value;let f;for(;(f=u[a])&&!f.components;)a++;return a}),l=be(()=>r.value.matched[i.value]);kn(Wo,be(()=>i.value+1)),kn(Jf,l),kn(er,r);const c=ue();return Se(()=>[c.value,l.value,e.name],([a,u,f],[h,g,v])=>{u&&(u.instances[f]=a,g&&g!==u&&a&&a===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),a&&u&&(!g||!Yt(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(S=>S(a))},{flush:"post"}),()=>{const a=r.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Qo(n.default,{Component:h,route:a});const g=f.props[u],v=g?g===!0?a.params:typeof g=="function"?g(a):g:null,$=xr(h,ee({},v,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(f.instances[u]=null)},ref:c}));return Qo(n.default,{Component:$,route:a})||$}}});function Qo(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const sd=nd;function zd(e){const t=Kf(e.routes,e),n=e.parseQuery||zf,s=e.stringifyQuery||Uo,r=e.history,o=rn(),i=rn(),l=rn(),c=bi(pt);let a=pt;Kt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ms.bind(null,_=>""+_),f=Ms.bind(null,vf),h=Ms.bind(null,xn);function g(_,L){let P,D;return Hl(_)?(P=t.getRecordMatcher(_),D=L):D=_,t.addRoute(D,P)}function v(_){const L=t.getRecordMatcher(_);L&&t.removeRoute(L)}function S(){return t.getRoutes().map(_=>_.record)}function $(_){return!!t.getRecordMatcher(_)}function A(_,L){if(L=ee({},L||c.value),typeof _=="string"){const m=Ns(n,_,L.path),y=t.resolve({path:m.path},L),w=r.createHref(m.fullPath);return ee(m,y,{params:h(y.params),hash:xn(m.hash),redirectedFrom:void 0,href:w})}let P;if(_.path!=null)P=ee({},_,{path:Ns(n,_.path,L.path).path});else{const m=ee({},_.params);for(const y in m)m[y]==null&&delete m[y];P=ee({},_,{params:f(m)}),L.params=f(L.params)}const D=t.resolve(P,L),oe=_.hash||"";D.params=u(h(D.params));const d=bf(s,ee({},_,{hash:pf(oe),path:D.path})),p=r.createHref(d);return ee({fullPath:d,hash:oe,query:s===Uo?Qf(_.query):_.query||{}},D,{redirectedFrom:void 0,href:p})}function I(_){return typeof _=="string"?Ns(n,_,c.value.path):ee({},_)}function F(_,L){if(a!==_)return Xt(8,{from:L,to:_})}function N(_){return q(_)}function k(_){return N(ee(I(_),{replace:!0}))}function z(_){const L=_.matched[_.matched.length-1];if(L&&L.redirect){const{redirect:P}=L;let D=typeof P=="function"?P(_):P;return typeof D=="string"&&(D=D.includes("?")||D.includes("#")?D=I(D):{path:D},D.params={}),ee({query:_.query,hash:_.hash,params:D.path!=null?{}:_.params},D)}}function q(_,L){const P=a=A(_),D=c.value,oe=_.state,d=_.force,p=_.replace===!0,m=z(P);if(m)return q(ee(I(m),{state:typeof m=="object"?ee({},oe,m.state):oe,force:d,replace:p}),L||P);const y=P;y.redirectedFrom=L;let w;return!d&&wf(s,D,P)&&(w=Xt(16,{to:y,from:D}),Ge(D,D,!0,!1)),(w?Promise.resolve(w):K(y,D)).catch(b=>nt(b)?nt(b,2)?b:dt(b):Z(b,y,D)).then(b=>{if(b){if(nt(b,2))return q(ee({replace:p},I(b.to),{state:typeof b.to=="object"?ee({},oe,b.to.state):oe,force:d}),L||y)}else b=M(y,D,!0,p,oe);return Q(y,D,b),b})}function B(_,L){const P=F(_,L);return P?Promise.reject(P):Promise.resolve()}function x(_){const L=Ht.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(_):_()}function K(_,L){let P;const[D,oe,d]=rd(_,L);P=Ls(D.reverse(),"beforeRouteLeave",_,L);for(const m of D)m.leaveGuards.forEach(y=>{P.push(bt(y,_,L))});const p=B.bind(null,_,L);return P.push(p),Le(P).then(()=>{P=[];for(const m of o.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).then(()=>{P=Ls(oe,"beforeRouteUpdate",_,L);for(const m of oe)m.updateGuards.forEach(y=>{P.push(bt(y,_,L))});return P.push(p),Le(P)}).then(()=>{P=[];for(const m of d)if(m.beforeEnter)if(We(m.beforeEnter))for(const y of m.beforeEnter)P.push(bt(y,_,L));else P.push(bt(m.beforeEnter,_,L));return P.push(p),Le(P)}).then(()=>(_.matched.forEach(m=>m.enterCallbacks={}),P=Ls(d,"beforeRouteEnter",_,L,x),P.push(p),Le(P))).then(()=>{P=[];for(const m of i.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).catch(m=>nt(m,8)?m:Promise.reject(m))}function Q(_,L,P){l.list().forEach(D=>x(()=>D(_,L,P)))}function M(_,L,P,D,oe){const d=F(_,L);if(d)return d;const p=L===pt,m=Kt?history.state:{};P&&(D||p?r.replace(_.fullPath,ee({scroll:p&&m&&m.scroll},oe)):r.push(_.fullPath,oe)),c.value=_,Ge(_,L,P,p),dt()}let Y;function de(){Y||(Y=r.listen((_,L,P)=>{if(!In.listening)return;const D=A(_),oe=z(D);if(oe){q(ee(oe,{replace:!0,force:!0}),D).catch(gn);return}a=D;const d=c.value;Kt&&Tf(Fo(d.fullPath,P.delta),_s()),K(D,d).catch(p=>nt(p,12)?p:nt(p,2)?(q(ee(I(p.to),{force:!0}),D).then(m=>{nt(m,20)&&!P.delta&&P.type===Cn.pop&&r.go(-1,!1)}).catch(gn),Promise.reject()):(P.delta&&r.go(-P.delta,!1),Z(p,D,d))).then(p=>{p=p||M(D,d,!1),p&&(P.delta&&!nt(p,8)?r.go(-P.delta,!1):P.type===Cn.pop&&nt(p,20)&&r.go(-1,!1)),Q(D,d,p)}).catch(gn)}))}let Ee=rn(),re=rn(),G;function Z(_,L,P){dt(_);const D=re.list();return D.length?D.forEach(oe=>oe(_,L,P)):console.error(_),Promise.reject(_)}function et(){return G&&c.value!==pt?Promise.resolve():new Promise((_,L)=>{Ee.add([_,L])})}function dt(_){return G||(G=!_,de(),Ee.list().forEach(([L,P])=>_?P(_):L()),Ee.reset()),_}function Ge(_,L,P,D){const{scrollBehavior:oe}=e;if(!Kt||!oe)return Promise.resolve();const d=!P&&Af(Fo(_.fullPath,0))||(D||!P)&&history.state&&history.state.scroll||null;return Tn().then(()=>oe(_,L,d)).then(p=>p&&Pf(p)).catch(p=>Z(p,_,L))}const Oe=_=>r.go(_);let jt;const Ht=new Set,In={currentRoute:c,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:$,getRoutes:S,resolve:A,options:e,push:N,replace:k,go:Oe,back:()=>Oe(-1),forward:()=>Oe(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:et,install(_){const L=this;_.component("RouterLink",Zf),_.component("RouterView",sd),_.config.globalProperties.$router=L,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>Nt(c)}),Kt&&!jt&&c.value===pt&&(jt=!0,N(r.location).catch(oe=>{}));const P={};for(const oe in pt)Object.defineProperty(P,oe,{get:()=>c.value[oe],enumerable:!0});_.provide(bs,L),_.provide(Or,_i(P)),_.provide(er,c);const D=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(a=pt,Y&&Y(),Y=null,c.value=pt,jt=!1,G=!1),D()}}};function Le(_){return _.reduce((L,P)=>L.then(()=>x(P)),Promise.resolve())}return In}function rd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iYt(a,l))?s.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(a=>Yt(a,c))||r.push(c))}return[n,s,r]}function Qd(){return De(bs)}function Jd(e){return De(Or)}export{kc as $,pd as A,os as B,is as C,Tn as D,Iu as E,ys as F,md as G,Tc as H,Ws as I,Dc as J,ld as K,bd as L,ad as M,ke as N,Au as O,nc as P,Ae as Q,we as R,Ed as S,Sd as T,Nd as U,Ki as V,vd as W,Al as X,Rd as Y,Bi as Z,On as _,ae as a,ki as a0,Et as a1,ps as a2,ye as a3,Ne as a4,cd as a5,Uc as a6,Dd as a7,us as a8,Bc as a9,ss as aA,ja as aB,Xo as aC,fd as aD,jn as aE,Kd as aF,Pd as aG,Vd as aH,Wd as aI,Ud as aJ,jd as aK,Bd as aL,Td as aM,Rt as aN,_i as aO,Id as aP,zd as aQ,qd as aR,Ad as aS,_d as aT,Qd as aU,ma as aV,Jd as aW,Md as aX,Cd as aY,Od as aa,hd as ab,dd as ac,Fd as ad,Ir as ae,od as af,Tu as ag,Sn as ah,xr as ai,id as aj,J as ak,pa as al,Rc as am,ga as an,Wc as ao,Jo as ap,mo as aq,Hd as ar,gd as as,ri as at,$d as au,ud as av,Ld as aw,xd as ax,hr as ay,si as az,j as b,be as c,se as d,vs as e,fe as f,Dt as g,te as h,De as i,W as j,Ve as k,ji as l,Gd as m,kd as n,Se as o,kn as p,mr as q,ue as r,bi as s,He as t,Nt as u,yu as v,wd as w,yd as x,Us as y,al as z}; diff --git a/index.html b/index.html index 417ed7ae..a72d6539 100644 --- a/index.html +++ b/index.html @@ -19,12 +19,13 @@ - - + - + + + - + diff --git a/web/admin-spa/dist/assets/AccountUsageRecordsView-DgdPiUJQ.js b/web/admin-spa/dist/assets/AccountUsageRecordsView-CUkKidfm.js similarity index 50% rename from web/admin-spa/dist/assets/AccountUsageRecordsView-DgdPiUJQ.js rename to web/admin-spa/dist/assets/AccountUsageRecordsView-CUkKidfm.js index affcd3b2..745a4178 100644 --- a/web/admin-spa/dist/assets/AccountUsageRecordsView-DgdPiUJQ.js +++ b/web/admin-spa/dist/assets/AccountUsageRecordsView-CUkKidfm.js @@ -1,2 +1,2 @@ -import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BUfCkBQO.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-R8HMg95E.js";import{c as W,s as j}from"./index-Cr7hSgrN.js";import{f as x,R as me}from"./RecordDetailModal-lW2AGtWL.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(` -`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default}; +import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-CKhypU-Q.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-BVUySZOn.js";import{c as W,s as j}from"./index-BAse2XU9.js";import{f as x,R as me}from"./RecordDetailModal-CVWv3dXE.js";import"./chart-ChB167Jv.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},_t={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(` +`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{_t as default}; diff --git a/web/admin-spa/dist/assets/AccountsView-ChRk8WT-.css b/web/admin-spa/dist/assets/AccountsView-ChRk8WT-.css deleted file mode 100644 index 060a12af..00000000 --- a/web/admin-spa/dist/assets/AccountsView-ChRk8WT-.css +++ /dev/null @@ -1 +0,0 @@ -@keyframes fadeIn-6af2e40f{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-6af2e40f]{animation:fadeIn-6af2e40f .3s ease-out}.loading-spinner[data-v-2a966370]{width:20px;height:20px;border:2px solid #e5e7eb;border-top:2px solid #14b8a6;border-radius:50%;animation:spin-2a966370 1s linear infinite}@keyframes spin-2a966370{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-spinner[data-v-ff3a5b72]{border-top-color:transparent;border-radius:9999px;animation:spin-ff3a5b72 .8s linear infinite}@keyframes spin-ff3a5b72{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fadeIn-f19e4a71{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-f19e4a71]{animation:fadeIn-f19e4a71 .2s ease-out}.loading-spinner[data-v-f19e4a71]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-f19e4a71 .8s linear infinite;display:inline-block}@keyframes spin-f19e4a71{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-v-13083b1f] .balance-script-dialog{max-height:90vh;display:flex;flex-direction:column}[data-v-13083b1f] .balance-script-dialog .el-dialog__body{flex:1 1 auto;min-height:0;overflow:auto}[data-v-13083b1f] .balance-script-dialog .el-dialog__footer{border-top:1px solid rgba(229,231,235,.7)}.input-text[data-v-13083b1f]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-text[data-v-13083b1f]:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.input-text[data-v-13083b1f]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.input-text[data-v-13083b1f]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1))}.accounts-container[data-v-ae15b3bf]{min-height:calc(100vh - 300px)}.loading-spinner[data-v-ae15b3bf]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-ae15b3bf 1s linear infinite}@keyframes spin-ae15b3bf{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-wrapper[data-v-ae15b3bf]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.dark .table-wrapper[data-v-ae15b3bf]{border-color:#ffffff1a}.table-container[data-v-ae15b3bf]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-ae15b3bf]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-ae15b3bf]::-webkit-scrollbar{height:8px}.table-container[data-v-ae15b3bf]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-ae15b3bf]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-ae15b3bf]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-ae15b3bf]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-ae15b3bf]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-ae15b3bf]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-ae15b3bf]{transition:all .2s ease}.table-row[data-v-ae15b3bf]:hover{background-color:#00000005}.dark .table-row[data-v-ae15b3bf]:hover{background-color:#ffffff05}.table-container thead .checkbox-column[data-v-ae15b3bf],.table-container thead .name-column[data-v-ae15b3bf]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-ae15b3bf],.dark .table-container thead .name-column[data-v-ae15b3bf]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container thead .operations-column[data-v-ae15b3bf]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-ae15b3bf]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-ae15b3bf],.table-container tbody tr:nth-child(odd) .name-column[data-v-ae15b3bf]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-ae15b3bf],.table-container tbody tr:nth-child(2n) .name-column[data-v-ae15b3bf]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-ae15b3bf],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-ae15b3bf]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-ae15b3bf],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-ae15b3bf]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-ae15b3bf],.table-container tbody tr:hover .name-column[data-v-ae15b3bf]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-ae15b3bf],.dark .table-container tbody tr:hover .name-column[data-v-ae15b3bf]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-ae15b3bf]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-ae15b3bf]{box-shadow:8px 0 12px -8px #1e293b73}.table-container tbody tr:nth-child(odd) .operations-column[data-v-ae15b3bf]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-ae15b3bf]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-ae15b3bf]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-ae15b3bf]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-ae15b3bf]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-ae15b3bf]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-ae15b3bf]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-ae15b3bf]{box-shadow:-8px 0 12px -8px #1e293b73} diff --git a/web/admin-spa/dist/assets/AccountsView-2rnZ6KJ6.js b/web/admin-spa/dist/assets/AccountsView-DXROeeN3.js similarity index 99% rename from web/admin-spa/dist/assets/AccountsView-2rnZ6KJ6.js rename to web/admin-spa/dist/assets/AccountsView-DXROeeN3.js index e88a8de2..7702b7bc 100644 --- a/web/admin-spa/dist/assets/AccountsView-2rnZ6KJ6.js +++ b/web/admin-spa/dist/assets/AccountsView-DXROeeN3.js @@ -1,4 +1,4 @@ -import{b as Kr,e as br,f as Sr}from"./element-plus-BUfCkBQO.js";import{r as w,aP as Mr,o as we,V as Ya,x as n,y as o,z as e,L as y,K as b,al as ze,aT as Nt,O as f,aq as L,aa as Dr,P as u,aV as Ha,aY as ba,C as K,c as se,Z as jr,an as Ke,Q as Ae,q as ta,I as Je,ac as We,a5 as Mt,R as Oe,B as He,u as st,aX as Pr,aU as Lr,D as ar,_ as vr,J as nt,Y as St}from"./vue-vendor-R8HMg95E.js";import{c as B,s as j,_ as aa,a as zr,A as Ja}from"./index-Cr7hSgrN.js";import{C as kr}from"./ConfirmModal-CZV4xGP-.js";import{C as Rr}from"./chart-yFHxLHpB.js";import{C as Ba,_ as Vr}from"./ActionDropdown-C3hc7yXw.js";import"./vendor-Dr8jvgFu.js";const Qa=w(!1),gr=w({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Et=w(null);function hr(){return{showConfirmModal:Qa,confirmOptions:gr,showConfirm:(N,T,z="继续",C="取消")=>new Promise(A=>{gr.value={title:N,message:T,confirmText:z,cancelText:C},Et.value=A,Qa.value=!0}),handleConfirm:()=>{Qa.value=!1,Et.value&&(Et.value(!0),Et.value=null)},handleCancel:()=>{Qa.value=!1,Et.value&&(Et.value(!1),Et.value=null)}}}const wr=Mr("accounts",()=>{const H=w([]),De=w([]),g=w([]),N=w([]),T=w([]),z=w([]),C=w([]),A=w([]),v=w(!1),k=w(null),F=w(""),ie=w("asc"),Z=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-accounts");if(h.success)H.value=h.data||[];else throw new Error(h.message||"获取Claude账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},de=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-console-accounts");if(h.success)De.value=h.data||[];else throw new Error(h.message||"获取Claude Console账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},Q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/bedrock-accounts");if(h.success)g.value=h.data||[];else throw new Error(h.message||"获取Bedrock账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/gemini-accounts");if(h.success)N.value=h.data||[];else throw new Error(h.message||"获取Gemini账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},R=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-accounts");if(h.success)T.value=h.data||[];else throw new Error(h.message||"获取OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},c=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/azure-openai-accounts");if(h.success)z.value=h.data||[];else throw new Error(h.message||"获取Azure OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},p=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-responses-accounts");if(h.success)C.value=h.data||[];else throw new Error(h.message||"获取OpenAI-Responses账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/droid-accounts");if(h.success)A.value=h.data||[];else throw new Error(h.message||"获取Droid账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:De,bedrockAccounts:g,geminiAccounts:N,openaiAccounts:T,azureOpenaiAccounts:z,openaiResponsesAccounts:C,droidAccounts:A,loading:v,error:k,sortBy:F,sortOrder:ie,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:de,fetchBedrockAccounts:Q,fetchGeminiAccounts:q,fetchOpenAIAccounts:R,fetchAzureOpenAIAccounts:c,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),de(),Q(),q(),R(),c(),p(),D()])}catch(h){throw k.value=h.message,h}finally{v.value=!1}},createClaudeAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-accounts",h);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-console-accounts",h);if(m.success)return await de(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/bedrock-accounts",h);if(m.success)return await Q(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-accounts",h);if(m.success)return await R(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/droid-accounts",h);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/droid-accounts/${h}`,m);if(O.success)return await D(),O.data;throw new Error(O.message||"更新Droid账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},createAzureOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/azure-openai-accounts",h);if(m.success)return await c(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-responses-accounts",h);if(m.success)return await p(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-api-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-accounts/${h}`,m);if(O.success)return await Z(),O;throw new Error(O.message||"更新Claude账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateClaudeConsoleAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-console-accounts/${h}`,m);if(O.success)return await de(),O;throw new Error(O.message||"更新Claude Console账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateBedrockAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/bedrock-accounts/${h}`,m);if(O.success)return await Q(),O;throw new Error(O.message||"更新Bedrock账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-accounts/${h}`,m);if(O.success)return await R(),O;throw new Error(O.message||"更新OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateAzureOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/azure-openai-accounts/${h}`,m);if(O.success)return await c(),O;throw new Error(O.message||"更新Azure OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIResponsesAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-responses-accounts/${h}`,m);if(O.success)return await p(),O;throw new Error(O.message||"更新OpenAI-Responses账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiApiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-api-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini API账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},toggleAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}/toggle`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}/toggle`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}/toggle`:h==="gemini"?O=`/admin/gemini-accounts/${m}/toggle`:h==="openai"?O=`/admin/openai-accounts/${m}/toggle`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}/toggle`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}/toggle`:O=`/admin/openai-accounts/${m}/toggle`;const Qe=await B.put(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},deleteAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}`:h==="gemini"?O=`/admin/gemini-accounts/${m}`:h==="openai"?O=`/admin/openai-accounts/${m}`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}`:O=`/admin/openai-accounts/${m}`;const Qe=await B.delete(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"删除失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},refreshClaudeToken:async h=>{v.value=!0,k.value=null;try{const m=await B.post(`/admin/claude-accounts/${h}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-setup-token-url",h);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-setup-token-code",h);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/oauth-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/setup-token-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async h=>{try{const m=await B.post("/admin/gemini-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async h=>{try{const m=await B.post("/admin/gemini-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async h=>{try{const m=await B.post("/admin/openai-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async h=>{try{const m=await B.post("/admin/openai-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async h=>{k.value=null;try{const m=await B.post("/admin/droid-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async h=>{k.value=null;try{return await B.post("/admin/droid-accounts/exchange-code",h)}catch(m){throw k.value=m.message,m}},sortAccounts:h=>{F.value===h?ie.value=ie.value==="asc"?"desc":"asc":(F.value=h,ie.value="asc")},reset:()=>{H.value=[],De.value=[],g.value=[],N.value=[],T.value=[],z.value=[],C.value=[],A.value=[],v.value=!1,k.value=null,F.value="",ie.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Fr={class:"relative"},Wr={key:0,class:"mt-1 text-xs text-red-500"},Gr={key:1,class:"mt-1 text-xs text-green-500"},Br={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:De}){const g=H,N=De,T=w({...g.modelValue}),z=w(!!(T.value.username||T.value.password)),C=w(!1),A=w(""),v=w(""),k=w(!1);we(()=>g.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(T.value)&&(T.value={...R},z.value=!!(R.username||R.password))},{deep:!0}),we(()=>T.value.enabled,()=>{ie()}),we(()=>T.value.type,()=>{ie()}),we(()=>T.value.host,()=>{ie()}),we(()=>T.value.port,()=>{ie()}),we(()=>T.value.username,()=>{ie()}),we(()=>T.value.password,()=>{ie()}),we(z,R=>{R||(T.value.username="",T.value.password="",ie())});let F=null;function ie(){F&&clearTimeout(F),F=setTimeout(()=>{const R={...T.value};z.value||(R.username="",R.password=""),N("update:modelValue",R)},100)}function Z(){if(v.value="",k.value=!1,!!A.value)try{const R=A.value.split("#")[0].trim();if(!R)return;const c=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(c);if(!p){const Y=/^([^:]+):(\d+)$/,re=R.match(Y);if(re){T.value.type="socks5",T.value.host=re[1],T.value.port=re[2],T.value.username="",T.value.password="",z.value=!1,k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ge,G,I,U]=p;T.value.type=D.toLowerCase(),T.value.host=I,T.value.port=U,ge&&G?(T.value.username=decodeURIComponent(ge),T.value.password=decodeURIComponent(G),z.value=!0):(T.value.username="",T.value.password="",z.value=!1),k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function de(){A.value="",v.value="",k.value=!1}function Q(){setTimeout(()=>{Z()},0)}function q(){const R=A.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&Z():/^[^:]+:\d{2,5}$/.test(R)&&Z()}return Ya(()=>{F&&clearTimeout(F)}),(R,c)=>(o(),n("div",Or,[e("div",Er,[c[10]||(c[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>T.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,T.value.enabled]]),c[9]||(c[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),T.value.enabled?(o(),n("div",qr,[c[22]||(c[22]=Nt('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[c[14]||(c[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Fr,[b(e("input",{"onUpdate:modelValue":c[1]||(c[1]=p=>A.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:q,onKeyup:Dr(Z,["enter"]),onPaste:Q},null,544),[[L,A.value]]),A.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:de},c[11]||(c[11]=[e("i",{class:"fas fa-times"},null,-1)]))):y("",!0)]),v.value?(o(),n("p",Wr,[c[12]||(c[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(v.value),1)])):k.value?(o(),n("p",Gr,c[13]||(c[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):y("",!0)]),c[23]||(c[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[c[16]||(c[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":c[2]||(c[2]=p=>T.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},c[15]||(c[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ha,T.value.type]])]),e("div",Br,[e("div",null,[c[17]||(c[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":c[3]||(c[3]=p=>T.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[L,T.value.host]])]),e("div",null,[c[18]||(c[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":c[4]||(c[4]=p=>T.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[L,T.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":c[5]||(c[5]=p=>z.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,z.value]]),c[19]||(c[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),z.value?(o(),n("div",Jr,[e("div",null,[c[20]||(c[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":c[6]||(c[6]=p=>T.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[L,T.value.username]])]),e("div",null,[c[21]||(c[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":c[7]||(c[7]=p=>T.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:C.value?"text":"password"},null,8,Zr),[[ba,T.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:c[8]||(c[8]=p=>C.value=!C.value)},[e("i",{class:K(C.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):y("",!0)]),c[24]||(c[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):y("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},ps={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},gs={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Us={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Ts={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},js={class:"space-y-3"},Ps={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},zs={class:"flex items-start gap-4"},Rs={class:"flex-1"},Vs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Fs={class:"flex items-start gap-3"},Ws={class:"flex-1"},Gs=["disabled"],Bs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],pl={key:0,class:"fas fa-link mr-2"},gl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Ul={class:"flex items-start gap-3"},Il={class:"flex-1"},Tl=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},jl={class:"flex items-center gap-2"},Pl=["value"],Ll={class:"space-y-2"},zl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},Rl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Vl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:De,emit:g}){const N=H,T=g,z=wr(),C=w(!1),A=w(!1),v=w(""),k=w(""),F=w(!1),ie=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=w(""),de=w(""),Q=w(""),q=w(""),R=w(0);let c=null;const p=w("manual"),D=w(""),ge=w(!1),G=w(""),I=w(!1),U=w({current:0,total:0}),Y=se(()=>D.value.split(` +import{b as Kr,e as br,f as Sr}from"./element-plus-CKhypU-Q.js";import{r as w,aP as Mr,o as we,V as Ya,x as n,y as o,z as e,L as y,K as b,al as ze,aT as Nt,O as f,aq as L,aa as Dr,P as u,aV as Ha,aY as ba,C as K,c as se,Z as jr,an as Ke,Q as Ae,q as ta,I as Je,ac as We,a5 as Mt,R as Oe,B as He,u as st,aX as Pr,aU as Lr,D as ar,_ as vr,J as nt,Y as St}from"./vue-vendor-BVUySZOn.js";import{c as B,s as j,_ as aa,a as zr,A as Ja}from"./index-BAse2XU9.js";import{C as kr}from"./ConfirmModal-BGRLg47v.js";import{C as Rr}from"./chart-ChB167Jv.js";import{C as Ba,_ as Vr}from"./ActionDropdown-XGihbnCH.js";import"./vendor-Dr8jvgFu.js";const Qa=w(!1),gr=w({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Et=w(null);function hr(){return{showConfirmModal:Qa,confirmOptions:gr,showConfirm:(N,T,z="继续",C="取消")=>new Promise(A=>{gr.value={title:N,message:T,confirmText:z,cancelText:C},Et.value=A,Qa.value=!0}),handleConfirm:()=>{Qa.value=!1,Et.value&&(Et.value(!0),Et.value=null)},handleCancel:()=>{Qa.value=!1,Et.value&&(Et.value(!1),Et.value=null)}}}const wr=Mr("accounts",()=>{const H=w([]),De=w([]),g=w([]),N=w([]),T=w([]),z=w([]),C=w([]),A=w([]),v=w(!1),k=w(null),F=w(""),ie=w("asc"),Z=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-accounts");if(h.success)H.value=h.data||[];else throw new Error(h.message||"获取Claude账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},de=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/claude-console-accounts");if(h.success)De.value=h.data||[];else throw new Error(h.message||"获取Claude Console账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},Q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/bedrock-accounts");if(h.success)g.value=h.data||[];else throw new Error(h.message||"获取Bedrock账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},q=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/gemini-accounts");if(h.success)N.value=h.data||[];else throw new Error(h.message||"获取Gemini账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},R=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-accounts");if(h.success)T.value=h.data||[];else throw new Error(h.message||"获取OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},c=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/azure-openai-accounts");if(h.success)z.value=h.data||[];else throw new Error(h.message||"获取Azure OpenAI账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},p=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/openai-responses-accounts");if(h.success)C.value=h.data||[];else throw new Error(h.message||"获取OpenAI-Responses账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const h=await B.get("/admin/droid-accounts");if(h.success)A.value=h.data||[];else throw new Error(h.message||"获取Droid账户失败")}catch(h){throw k.value=h.message,h}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:De,bedrockAccounts:g,geminiAccounts:N,openaiAccounts:T,azureOpenaiAccounts:z,openaiResponsesAccounts:C,droidAccounts:A,loading:v,error:k,sortBy:F,sortOrder:ie,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:de,fetchBedrockAccounts:Q,fetchGeminiAccounts:q,fetchOpenAIAccounts:R,fetchAzureOpenAIAccounts:c,fetchOpenAIResponsesAccounts:p,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),de(),Q(),q(),R(),c(),p(),D()])}catch(h){throw k.value=h.message,h}finally{v.value=!1}},createClaudeAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-accounts",h);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/claude-console-accounts",h);if(m.success)return await de(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/bedrock-accounts",h);if(m.success)return await Q(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-accounts",h);if(m.success)return await R(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/droid-accounts",h);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/droid-accounts/${h}`,m);if(O.success)return await D(),O.data;throw new Error(O.message||"更新Droid账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},createAzureOpenAIAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/azure-openai-accounts",h);if(m.success)return await c(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/openai-responses-accounts",h);if(m.success)return await p(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async h=>{v.value=!0,k.value=null;try{const m=await B.post("/admin/gemini-api-accounts",h);if(m.success)return await q(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-accounts/${h}`,m);if(O.success)return await Z(),O;throw new Error(O.message||"更新Claude账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateClaudeConsoleAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/claude-console-accounts/${h}`,m);if(O.success)return await de(),O;throw new Error(O.message||"更新Claude Console账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateBedrockAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/bedrock-accounts/${h}`,m);if(O.success)return await Q(),O;throw new Error(O.message||"更新Bedrock账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-accounts/${h}`,m);if(O.success)return await R(),O;throw new Error(O.message||"更新OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateAzureOpenAIAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/azure-openai-accounts/${h}`,m);if(O.success)return await c(),O;throw new Error(O.message||"更新Azure OpenAI账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateOpenAIResponsesAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/openai-responses-accounts/${h}`,m);if(O.success)return await p(),O;throw new Error(O.message||"更新OpenAI-Responses账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},updateGeminiApiAccount:async(h,m)=>{v.value=!0,k.value=null;try{const O=await B.put(`/admin/gemini-api-accounts/${h}`,m);if(O.success)return await q(),O;throw new Error(O.message||"更新Gemini API账户失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},toggleAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}/toggle`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}/toggle`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}/toggle`:h==="gemini"?O=`/admin/gemini-accounts/${m}/toggle`:h==="openai"?O=`/admin/openai-accounts/${m}/toggle`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}/toggle`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}/toggle`:O=`/admin/openai-accounts/${m}/toggle`;const Qe=await B.put(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},deleteAccount:async(h,m)=>{v.value=!0,k.value=null;try{let O;h==="claude"?O=`/admin/claude-accounts/${m}`:h==="claude-console"?O=`/admin/claude-console-accounts/${m}`:h==="bedrock"?O=`/admin/bedrock-accounts/${m}`:h==="gemini"?O=`/admin/gemini-accounts/${m}`:h==="openai"?O=`/admin/openai-accounts/${m}`:h==="azure_openai"?O=`/admin/azure-openai-accounts/${m}`:h==="openai-responses"?O=`/admin/openai-responses-accounts/${m}`:O=`/admin/openai-accounts/${m}`;const Qe=await B.delete(O);if(Qe.success)return h==="claude"?await Z():h==="claude-console"?await de():h==="bedrock"?await Q():h==="gemini"?await q():h==="openai"?await R():h==="azure_openai"?await c():h==="openai-responses"?await p():await R(),Qe;throw new Error(Qe.message||"删除失败")}catch(O){throw k.value=O.message,O}finally{v.value=!1}},refreshClaudeToken:async h=>{v.value=!0,k.value=null;try{const m=await B.post(`/admin/claude-accounts/${h}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async h=>{try{const m=await B.post("/admin/claude-accounts/generate-setup-token-url",h);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async h=>{try{const m=await B.post("/admin/claude-accounts/exchange-setup-token-code",h);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/oauth-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async h=>{try{const m=await B.post("/admin/claude-accounts/setup-token-with-cookie",h);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async h=>{try{const m=await B.post("/admin/gemini-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async h=>{try{const m=await B.post("/admin/gemini-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async h=>{try{const m=await B.post("/admin/openai-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async h=>{try{const m=await B.post("/admin/openai-accounts/exchange-code",h);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async h=>{k.value=null;try{const m=await B.post("/admin/droid-accounts/generate-auth-url",h);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async h=>{k.value=null;try{return await B.post("/admin/droid-accounts/exchange-code",h)}catch(m){throw k.value=m.message,m}},sortAccounts:h=>{F.value===h?ie.value=ie.value==="asc"?"desc":"asc":(F.value=h,ie.value="asc")},reset:()=>{H.value=[],De.value=[],g.value=[],N.value=[],T.value=[],z.value=[],C.value=[],A.value=[],v.value=!1,k.value=null,F.value="",ie.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Fr={class:"relative"},Wr={key:0,class:"mt-1 text-xs text-red-500"},Gr={key:1,class:"mt-1 text-xs text-green-500"},Br={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:De}){const g=H,N=De,T=w({...g.modelValue}),z=w(!!(T.value.username||T.value.password)),C=w(!1),A=w(""),v=w(""),k=w(!1);we(()=>g.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(T.value)&&(T.value={...R},z.value=!!(R.username||R.password))},{deep:!0}),we(()=>T.value.enabled,()=>{ie()}),we(()=>T.value.type,()=>{ie()}),we(()=>T.value.host,()=>{ie()}),we(()=>T.value.port,()=>{ie()}),we(()=>T.value.username,()=>{ie()}),we(()=>T.value.password,()=>{ie()}),we(z,R=>{R||(T.value.username="",T.value.password="",ie())});let F=null;function ie(){F&&clearTimeout(F),F=setTimeout(()=>{const R={...T.value};z.value||(R.username="",R.password=""),N("update:modelValue",R)},100)}function Z(){if(v.value="",k.value=!1,!!A.value)try{const R=A.value.split("#")[0].trim();if(!R)return;const c=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(c);if(!p){const Y=/^([^:]+):(\d+)$/,re=R.match(Y);if(re){T.value.type="socks5",T.value.host=re[1],T.value.port=re[2],T.value.username="",T.value.password="",z.value=!1,k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ge,G,I,U]=p;T.value.type=D.toLowerCase(),T.value.host=I,T.value.port=U,ge&&G?(T.value.username=decodeURIComponent(ge),T.value.password=decodeURIComponent(G),z.value=!0):(T.value.username="",T.value.password="",z.value=!1),k.value=!0,ie(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function de(){A.value="",v.value="",k.value=!1}function Q(){setTimeout(()=>{Z()},0)}function q(){const R=A.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&Z():/^[^:]+:\d{2,5}$/.test(R)&&Z()}return Ya(()=>{F&&clearTimeout(F)}),(R,c)=>(o(),n("div",Or,[e("div",Er,[c[10]||(c[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>T.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,T.value.enabled]]),c[9]||(c[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),T.value.enabled?(o(),n("div",qr,[c[22]||(c[22]=Nt('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[c[14]||(c[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Fr,[b(e("input",{"onUpdate:modelValue":c[1]||(c[1]=p=>A.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:q,onKeyup:Dr(Z,["enter"]),onPaste:Q},null,544),[[L,A.value]]),A.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:de},c[11]||(c[11]=[e("i",{class:"fas fa-times"},null,-1)]))):y("",!0)]),v.value?(o(),n("p",Wr,[c[12]||(c[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(v.value),1)])):k.value?(o(),n("p",Gr,c[13]||(c[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):y("",!0)]),c[23]||(c[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[c[16]||(c[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":c[2]||(c[2]=p=>T.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},c[15]||(c[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ha,T.value.type]])]),e("div",Br,[e("div",null,[c[17]||(c[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":c[3]||(c[3]=p=>T.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[L,T.value.host]])]),e("div",null,[c[18]||(c[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":c[4]||(c[4]=p=>T.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[L,T.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":c[5]||(c[5]=p=>z.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,z.value]]),c[19]||(c[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),z.value?(o(),n("div",Jr,[e("div",null,[c[20]||(c[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":c[6]||(c[6]=p=>T.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[L,T.value.username]])]),e("div",null,[c[21]||(c[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":c[7]||(c[7]=p=>T.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:C.value?"text":"password"},null,8,Zr),[[ba,T.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:c[8]||(c[8]=p=>C.value=!C.value)},[e("i",{class:K(C.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):y("",!0)]),c[24]||(c[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):y("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},ps={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},gs={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Us={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Ts={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},js={class:"space-y-3"},Ps={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},zs={class:"flex items-start gap-4"},Rs={class:"flex-1"},Vs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Fs={class:"flex items-start gap-3"},Ws={class:"flex-1"},Gs=["disabled"],Bs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],pl={key:0,class:"fas fa-link mr-2"},gl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Ul={class:"flex items-start gap-3"},Il={class:"flex-1"},Tl=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},jl={class:"flex items-center gap-2"},Pl=["value"],Ll={class:"space-y-2"},zl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},Rl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Vl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:De,emit:g}){const N=H,T=g,z=wr(),C=w(!1),A=w(!1),v=w(""),k=w(""),F=w(!1),ie=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=w(""),de=w(""),Q=w(""),q=w(""),R=w(0);let c=null;const p=w("manual"),D=w(""),ge=w(!1),G=w(""),I=w(!1),U=w({current:0,total:0}),Y=se(()=>D.value.split(` `).map(me=>me.trim()).filter(me=>me.length>0).length),re=se(()=>N.platform==="droid"?!!Z.value:v.value&&k.value.trim()),be=se(()=>{if(!R.value||R.value<=0)return"00:00";const me=Math.floor(R.value/60),a=R.value%60;return`${me.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`}),Ie=me=>{if(W(),!me||me<=0){R.value=0;return}R.value=Math.floor(me),c=setInterval(()=>{R.value<=1?(R.value=0,W()):R.value-=1},1e3)},W=()=>{c&&(clearInterval(c),c=null)};we(k,me=>{if(N.platform==="droid"||!me||typeof me!="string")return;const a=me.trim();if(!a)return;if(a.startsWith("http://")||a.startsWith("https://"))if(a.startsWith("http://localhost:45462")||a.startsWith("http://localhost:1455"))try{const Be=new URL(a).searchParams.get("code");Be?(k.value=Be,j("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):j("URL 中未找到授权码参数,请检查链接是否正确","error")}catch($e){console.error("Failed to parse URL:",$e),j("链接格式错误,请检查是否为完整的 URL","error")}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"||N.platform==="openai")try{const Be=new URL(a).searchParams.get("code");Be&&(k.value=Be,j("成功提取授权码!","success"))}catch{}else j("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const S=async()=>{var me;W(),v.value="",k.value="",de.value="",Q.value="",q.value="",R.value=0,Z.value="",F.value=!1,C.value=!0;try{const a=(me=N.proxy)!=null&&me.enabled?{proxy:{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}}:{};if(N.platform==="claude"){const X=await z.generateClaudeAuthUrl(a);v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"){const X=await z.generateGeminiAuthUrl({...a,oauthProvider:ie.value});v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="openai"){const X=await z.generateOpenAIAuthUrl(a);v.value=X.authUrl,Z.value=X.sessionId}else if(N.platform==="droid"){const X=await z.generateDroidAuthUrl(a);v.value=X.verificationUriComplete||X.verificationUri,Q.value=X.verificationUri,q.value=X.verificationUriComplete||X.verificationUri,de.value=X.userCode,Ie(X.expiresIn||300),Z.value=X.sessionId}}catch(a){j(a.message||"生成授权链接失败","error")}finally{C.value=!1}},Te=()=>{W(),v.value="",k.value="",de.value="",Q.value="",q.value="",R.value=0,Z.value="",S()},ne=async()=>{if(!v.value){j("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(v.value),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}catch{const a=document.createElement("input");a.value=v.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),F.value=!0,j("链接已复制","success"),setTimeout(()=>{F.value=!1},2e3)}},Ee=async()=>{if(!de.value){j("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(de.value),j("验证码已复制","success")}catch{const a=document.createElement("input");a.value=de.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),j("验证码已复制","success")}},ae=()=>{q.value?window.open(q.value,"_blank","noopener"):Q.value&&window.open(Q.value,"_blank","noopener")},_=async()=>{var me;if(re.value){A.value=!0;try{let a={};N.platform==="claude"?a={sessionId:Z.value,callbackUrl:k.value.trim()}:N.platform==="gemini"||N.platform==="gemini-antigravity"?a={code:k.value.trim(),sessionId:Z.value,oauthProvider:ie.value}:N.platform==="openai"?a={code:k.value.trim(),sessionId:Z.value}:N.platform==="droid"&&(a={sessionId:Z.value}),(me=N.proxy)!=null&&me.enabled&&(a.proxy={type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null});let X;if(N.platform==="claude")X=await z.exchangeClaudeCode(a);else if(N.platform==="gemini"||N.platform==="gemini-antigravity")X=await z.exchangeGeminiCode(a),X&&(X.oauthProvider=ie.value);else if(N.platform==="openai")X=await z.exchangeOpenAICode(a);else if(N.platform==="droid"){const $e=await z.exchangeDroidCode(a);if(!$e.success){if($e.pending){const Be=$e.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";j(Be,"info"),typeof $e.expiresIn=="number"&&$e.expiresIn>=0&&Ie($e.expiresIn);return}throw new Error($e.message||"授权失败,请重试")}X=$e.data,W()}T("success",X)}catch(a){j(a.message||"授权失败,请检查授权码是否正确","error")}finally{A.value=!1}}};jr(()=>{W()});const E=async()=>{var Be;const me=D.value.split(` `).map(Me=>Me.trim()).filter(Me=>Me.length>0);if(me.length===0){G.value="请输入至少一个 sessionKey";return}ge.value=!0,G.value="",U.value={current:0,total:me.length};const a=(Be=N.proxy)!=null&&Be.enabled?{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}:null,X=[],$e=[];for(let Me=0;Me0?T("success",X):ge.value=!1,$e.length>0&&X.length===0?G.value="全部授权失败,请检查 sessionKey 是否有效":$e.length>0&&(G.value=`${$e.length} 个授权失败`)},ke=()=>{D.value="",G.value="",ge.value=!1,U.value={current:0,total:0}},fe=()=>{ke(),v.value="",k.value="",Z.value=""};return De({resetCookieAuth:ke}),(me,a)=>(o(),n("div",Xr,[H.platform==="claude"?(o(),n("div",es,[e("div",ts,[e("div",as,[a[29]||(a[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",rs,[a[28]||(a[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ss,[a[10]||(a[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",ls,[e("label",os,[b(e("input",{"onUpdate:modelValue":a[0]||(a[0]=X=>p.value=X),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:fe},null,544),[[Ke,p.value]]),a[8]||(a[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",ns,[b(e("input",{"onUpdate:modelValue":a[1]||(a[1]=X=>p.value=X),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:fe},null,544),[[Ke,p.value]]),a[9]||(a[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),p.value==="cookie"?(o(),n("div",is,[e("div",ds,[a[17]||(a[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",us,[e("label",ps,[a[12]||(a[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),a[13]||(a[13]=f(" sessionKey ",-1)),Y.value>1?(o(),n("span",gs,u(Y.value)+" 个 ",1)):y("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:a[2]||(a[2]=X=>I.value=!I.value)},a[11]||(a[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":a[3]||(a[3]=X=>D.value=X),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如: sk-ant-sid01-xxxxx... diff --git a/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css b/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css deleted file mode 100644 index 270f0c8e..00000000 --- a/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css +++ /dev/null @@ -1 +0,0 @@ -.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar{width:6px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:3px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-thumb:hover{background:#9ca3af} diff --git a/assets/ActionDropdown-C3hc7yXw.js b/web/admin-spa/dist/assets/ActionDropdown-XGihbnCH.js similarity index 98% rename from assets/ActionDropdown-C3hc7yXw.js rename to web/admin-spa/dist/assets/ActionDropdown-XGihbnCH.js index cd1da119..ca07b75c 100644 --- a/assets/ActionDropdown-C3hc7yXw.js +++ b/web/admin-spa/dist/assets/ActionDropdown-XGihbnCH.js @@ -1 +1 @@ -import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-Cr7hSgrN.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _}; +import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-BVUySZOn.js";import{_ as J}from"./index-BAse2XU9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _}; diff --git a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js new file mode 100644 index 00000000..926d4988 --- /dev/null +++ b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-2qB4i7ZK.js @@ -0,0 +1,2 @@ +import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-CKhypU-Q.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as pe,r as b,_ as z,o as L,q as ue,x as i,z as e,R as u,P as r,u as g,J as h,O as I,Q as $,ac as O,aU as ge,y as d,I as A}from"./vue-vendor-BVUySZOn.js";import{c as J,s as Y}from"./index-BAse2XU9.js";import{f as x,R as xe}from"./RecordDetailModal-CVWv3dXE.js";import"./chart-ChB167Jv.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},yt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=pe(),W=ge(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(p=>{const V=[T(p.timestamp),p.accountName||"",p.accountTypeName||"",p.model||"",p.inputTokens||0,p.outputTokens||0,p.cacheCreateTokens||0,p.cacheReadTokens||0,p.totalTokens||0,p.costFormatted||C(p.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(` +`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ue(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(g(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(g(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[u(c,{label:"时间降序",value:"desc"}),u(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(g(x)(a.inputTokens)),1),e("td",Qe,r(g(x)(a.outputTokens)),1),e("td",We,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",Ze,r(g(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[u(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),u(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),u(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{yt as default}; diff --git a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-BKxEbtcs.js b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-BKxEbtcs.js deleted file mode 100644 index 52e53377..00000000 --- a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-BKxEbtcs.js +++ /dev/null @@ -1,2 +0,0 @@ -import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BUfCkBQO.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as ue,r as b,_ as z,o as L,q as ge,x as i,z as e,R as g,P as r,u as p,J as h,O as I,Q as $,ac as O,aU as pe,y as d,I as A}from"./vue-vendor-R8HMg95E.js";import{c as J,s as Y}from"./index-Cr7hSgrN.js";import{f as x,R as xe}from"./RecordDetailModal-lW2AGtWL.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ue(),W=pe(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[T(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||C(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(` -`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ge(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(p(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(p(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[g(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[g(c,{label:"时间降序",value:"desc"}),g(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(p(x)(a.inputTokens)),1),e("td",Qe,r(p(x)(a.outputTokens)),1),e("td",We,r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("td",Ze,r(p(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(p(x)(a.totalTokens)),1),e("div",null,"输入:"+r(p(x)(a.inputTokens)),1),e("div",null,"输出:"+r(p(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),g(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),g(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default}; diff --git a/web/admin-spa/dist/assets/ApiKeysView-p16y4zjX.js b/web/admin-spa/dist/assets/ApiKeysView-P3GV4oxx.js similarity index 90% rename from web/admin-spa/dist/assets/ApiKeysView-p16y4zjX.js rename to web/admin-spa/dist/assets/ApiKeysView-P3GV4oxx.js index 9d4af9f6..5955e9bb 100644 --- a/web/admin-spa/dist/assets/ApiKeysView-p16y4zjX.js +++ b/web/admin-spa/dist/assets/ApiKeysView-P3GV4oxx.js @@ -1,4 +1,4 @@ -import{E as ua}from"./element-plus-BUfCkBQO.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as Ct,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as Ce,f as lt,u as nt,aU as ma}from"./vue-vendor-R8HMg95E.js";import{c as E,_ as Se,s as V,u as xa}from"./index-Cr7hSgrN.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-DF7xS2EZ.js";import{C as $t,_ as fa}from"./ActionDropdown-C3hc7yXw.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),$=async()=>{N.value=!0,g.value=null;try{const T=await E.get("/admin/api-keys");if(T.success)k.value=T.data||[];else throw new Error(T.message||"获取API Keys失败")}catch(T){throw g.value=T.message,T}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:$,createApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",T);if(q.success)return await $(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${T}/toggle`);if(q.success)return await $(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${T}`);if(q.success)return await $(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(T,q="all")=>{try{const K=await E.get(`/admin/api-keys/${T}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const T=await E.get("/admin/api-keys/tags");if(T.success)return T.data||[];throw new Error(T.message||"获取标签失败")}catch(T){return console.error("获取标签失败:",T),[]}},sortApiKeys:T=>{j.value===T?L.value=L.value==="asc"?"desc":"asc":(j.value=T,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},$a={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ca={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),$=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),T=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),C=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||T.value.length>0||q.value.length>0||K.value.length>0||C.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=$.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},_=()=>{var p;L.value="",(p=$.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Ct(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:$,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:_},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",$a,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",Ca,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),T.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(T.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&C.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe(C.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},$r={class:"space-y-2"},Cr={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Co={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},T=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},C=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},_=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 +import{E as ua}from"./element-plus-CKhypU-Q.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as Ct,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as Ce,f as lt,u as nt,aU as ma}from"./vue-vendor-BVUySZOn.js";import{c as E,_ as Se,s as V,u as xa}from"./index-BAse2XU9.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-Cb_iHkvc.js";import{C as $t,_ as fa}from"./ActionDropdown-XGihbnCH.js";import"./chart-ChB167Jv.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),$=async()=>{N.value=!0,g.value=null;try{const T=await E.get("/admin/api-keys");if(T.success)k.value=T.data||[];else throw new Error(T.message||"获取API Keys失败")}catch(T){throw g.value=T.message,T}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:$,createApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",T);if(q.success)return await $(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${T}/toggle`);if(q.success)return await $(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(T,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${T}`,q);if(K.success)return await $(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async T=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${T}`);if(q.success)return await $(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(T,q="all")=>{try{const K=await E.get(`/admin/api-keys/${T}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const T=await E.get("/admin/api-keys/tags");if(T.success)return T.data||[];throw new Error(T.message||"获取标签失败")}catch(T){return console.error("获取标签失败:",T),[]}},sortApiKeys:T=>{j.value===T?L.value=L.value==="asc"?"desc":"asc":(j.value=T,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},$a={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ca={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),$=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),T=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),C=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||T.value.length>0||q.value.length>0||K.value.length>0||C.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=$.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},_=()=>{var p;L.value="",(p=$.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Ct(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:$,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:_},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",$a,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",Ca,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),T.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(T.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&C.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe(C.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},$r={class:"space-y-2"},Cr={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],$o={key:0,class:"loading-spinner mr-2"},Co={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},T=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},C=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},_=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`,"继续创建","返回修改"):u=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 是否继续?`),!u)return}$.value=!0;try{const u={description:a.description||void 0,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(u.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete u.claudeAccountId):(u.claudeAccountId=a.claudeAccountId,delete u.claudeConsoleAccountId)),a.geminiAccountId&&(u.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(u.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(u.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(u.droidAccountId=a.droidAccountId),a.createType==="single"){const i={...u,name:a.name},y=await E.post("/admin/api-keys",i);y.success?(V("API Key 创建成功","success"),F("success",y.data),F("close")):V(y.message||"创建失败","error")}else{const i={...u,createType:"batch",baseName:a.name,count:a.batchCount},y=await E.post("/admin/api-keys/batch",i);y.success?(V(`成功创建 ${y.data.length} 个 API Key`,"success"),F("batch-success",y.data),F("close")):V(y.message||"批量创建失败","error")}}catch{V("创建失败","error")}finally{$.value=!1}};return(u,i)=>(n(),we(Ee,{to:"body"},[e("div",er,[e("div",tr,[e("div",sr,[i[48]||(i[48]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=y=>u.$emit("close"))},i[47]||(i[47]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:_e(A,["prevent"])},[e("div",ar,[e("div",{class:O(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[i[51]||(i[51]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",rr,[e("label",or,[D(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[Ie,a.createType]]),i[49]||(i[49]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),h(" 单个创建 ")],-1))]),e("label",lr,[D(e("input",{"onUpdate:modelValue":i[2]||(i[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[Ie,a.createType]]),i[50]||(i[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),h(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(n(),d("div",nr,[e("div",ir,[e("div",dr,[i[53]||(i[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ur,[D(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[te,a.batchCount,void 0,{number:!0}]]),i[52]||(i[52]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",cr,[i[54]||(i[54]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(a.name||"MyKey")+"_1, "+c(a.name||"MyKey")+"_2 ...",1)])])):w("",!0)]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[h("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>a.name=y),class:O(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:i[5]||(i[5]=y=>Q.value.name="")},null,42,gr),[[te,a.name]])]),Q.value.name?(n(),d("p",pr,c(Q.value.name),1)):w("",!0)]),e("div",null,[i[63]||(i[63]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",mr,[a.tags.length>0?(n(),d("div",xr,[i[57]||(i[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",yr,[(n(!0),d(Z,null,oe(a.tags,(y,ie)=>(n(),d("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:me=>l(ie)},i[56]||(i[56]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,fr)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",br,[i[59]||(i[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",vr,[(n(!0),d(Z,null,oe(f.value,y=>(n(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>_(y)},[i[58]||(i[58]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(y),1)],8,kr))),128))])])):w("",!0),e("div",null,[i[61]||(i[61]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",wr,[D(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>H.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(Ke,["prevent"]),["enter"])},null,40,hr),[[te,H.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ke},i[60]||(i[60]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[62]||(i[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ar,[i[71]||(i[71]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",$r,[e("div",Cr,[e("div",null,[i[64]||(i[64]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),i[65]||(i[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[66]||(i[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":i[8]||(i[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),i[67]||(i[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[68]||(i[68]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":i[9]||(i[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),i[69]||(i[69]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[70]||(i[70]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[73]||(i[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Ir,[e("div",Kr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[12]||(i[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[14]||(i[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),i[72]||(i[72]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[75]||(i[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Lr,[e("div",Dr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[17]||(i[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=y=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[19]||(i[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),i[74]||(i[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[77]||(i[77]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Opus 模型周费用限制 (美元)",-1)),e("div",_r,[e("div",Tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[22]||(i[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[23]||(i[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[24]||(i[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),i[76]||(i[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户,0 或留空表示无限制 ",-1))])]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),D(e("input",{"onUpdate:modelValue":i[25]||(i[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[i[80]||(i[80]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),D(e("textarea",{"onUpdate:modelValue":i[26]||(i[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[te,a.description]])]),e("div",null,[i[88]||(i[88]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Sr,[e("div",Ur,[e("label",Rr,[D(e("input",{"onUpdate:modelValue":i[27]||(i[27]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[Ie,a.expirationMode]]),i[81]||(i[81]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Mr,[D(e("input",{"onUpdate:modelValue":i[28]||(i[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[Ie,a.expirationMode]]),i[82]||(i[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Pr,[a.expirationMode==="fixed"?(n(),d("span",Vr,i[83]||(i[83]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(n(),d("span",Er,i[84]||(i[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(n(),d("div",Or,[D(e("select",{"onUpdate:modelValue":i[29]||(i[29]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:q},i[85]||(i[85]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[dt,a.expireDuration]]),a.expireDuration==="custom"?(n(),d("div",jr,[D(e("input",{"onUpdate:modelValue":i[30]||(i[30]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:T.value,type:"datetime-local",onChange:K},null,40,Gr),[[te,a.customExpireDate]])])):w("",!0),a.expiresAt?(n(),d("p",zr," 将于 "+c(C(a.expiresAt))+" 过期 ",1)):w("",!0)])):(n(),d("div",qr,[e("div",Fr,[D(e("input",{"onUpdate:modelValue":i[31]||(i[31]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,Wr),[[te,a.activationDays,void 0,{number:!0}]]),D(e("select",{"onUpdate:modelValue":i[32]||(i[32]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:p},i[86]||(i[86]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[dt,a.activationUnit]])]),e("div",Br,[(n(!0),d(Z,null,oe(o(),y=>(n(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ie=>a.activationDays=y.value},c(y.label),9,Nr))),128))]),e("p",Hr,[i[87]||(i[87]=e("i",{class:"fas fa-clock mr-1"},null,-1)),h(" Key 将在首次使用后激活,激活后 "+c(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+c(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Yr,[e("label",Qr,[D(e("input",{"onUpdate:modelValue":i[33]||(i[33]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[Ce,a.permissions]]),i[89]||(i[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Jr,[D(e("input",{"onUpdate:modelValue":i[34]||(i[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[Ce,a.permissions]]),i[90]||(i[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Xr,[D(e("input",{"onUpdate:modelValue":i[35]||(i[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[Ce,a.permissions]]),i[91]||(i[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Zr,[D(e("input",{"onUpdate:modelValue":i[36]||(i[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[Ce,a.permissions]]),i[92]||(i[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[94]||(i[94]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",eo,[i[95]||(i[95]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:z},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,to)]),e("div",so,[e("div",null,[i[96]||(i[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[37]||(i[37]=y=>a.claudeAccountId=y),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[97]||(i[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[38]||(i[38]=y=>a.geminiAccountId=y),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[98]||(i[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[39]||(i[39]=y=>a.openaiAccountId=y),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[99]||(i[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[40]||(i[40]=y=>a.bedrockAccountId=y),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[100]||(i[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[41]||(i[41]=y=>a.droidAccountId=y),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[101]||(i[101]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",ao,[D(e("input",{id:"enableModelRestriction","onUpdate:modelValue":i[42]||(i[42]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableModelRestriction]]),i[102]||(i[102]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",ro,[e("div",null,[i[105]||(i[105]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",oo,[(n(!0),d(Z,null,oe(a.restrictedModels,(y,ie)=>(n(),d("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[h(c(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:me=>le(ie)},i[103]||(i[103]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,lo)]))),128)),a.restrictedModels.length===0?(n(),d("span",no," 暂无限制的模型 ")):w("",!0)]),e("div",io,[e("div",uo,[(n(!0),d(Z,null,oe(fe.value,y=>(n(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ie=>pe(y)},c(y),9,co))),128)),fe.value.length===0?(n(),d("span",go," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",po,[D(e("input",{"onUpdate:modelValue":i[43]||(i[43]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(X,["prevent"]),["enter"])},null,40,mo),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:X},i[104]||(i[104]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[106]||(i[106]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",xo,[D(e("input",{id:"enableClientRestriction","onUpdate:modelValue":i[44]||(i[44]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ce,a.enableClientRestriction]]),i[107]||(i[107]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",yo,[e("div",null,[i[108]||(i[108]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",fo,[(n(!0),d(Z,null,oe(x.value,y=>(n(),d("div",{key:y.id,class:"flex items-start"},[D(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":i[45]||(i[45]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,bo),[[Ce,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",ko,c(y.name),1),e("span",wo,c(y.description),1)],8,vo)]))),128))])])])):w("",!0)]),e("div",ho,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[46]||(i[46]=y=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:$.value,type:"submit"},[$.value?(n(),d("div",$o)):(n(),d("i",Co)),h(" "+c($.value?"创建中...":"创建"),1)],8,Ao)])],32)])])]))}},Ko=Se(Io,[["__scopeId","data-v-b8b28d06"]]),Lo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Do={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},To=["value"],So={key:0,class:"text-gray-500"},Uo={class:"space-y-4"},Ro={key:0},Mo={class:"flex flex-wrap gap-2"},Po=["onClick"],Vo={key:1},Eo={class:"flex flex-wrap gap-2"},Oo=["onClick"],jo={class:"flex gap-2"},Go=["onKeypress"],zo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},qo={class:"space-y-2"},Fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wo={class:"space-y-3"},Bo={class:"flex gap-2"},No={class:"space-y-3"},Ho={class:"flex gap-2"},Yo={class:"space-y-3"},Qo={class:"flex gap-2"},Jo={class:"mb-3 flex items-center"},Xo={class:"flex flex-wrap gap-4"},Zo={class:"flex cursor-pointer items-center"},el={class:"flex cursor-pointer items-center"},tl={class:"flex cursor-pointer items-center"},sl={class:"flex cursor-pointer items-center"},al={class:"mb-3 flex items-center justify-between"},rl=["disabled"],ol={class:"grid grid-cols-1 gap-3"},ll={class:"mb-3 flex items-center"},nl={key:0,class:"space-y-3"},il={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},dl=["onClick"],ul={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},cl={class:"space-y-3"},gl={class:"flex flex-wrap gap-2"},pl=["onClick"],ml={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},xl={class:"flex gap-2"},yl=["onKeydown"],fl={class:"mb-3 flex items-center"},bl={key:0,class:"space-y-3"},vl={class:"space-y-2"},kl=["id","value"],wl=["for"],hl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Al={class:"block text-xs text-gray-500 dark:text-gray-400"},$l={class:"flex gap-3 pt-4"},Cl=["disabled"],Il={key:0,class:"loading-spinner mr-2"},Kl={key:1,class:"fas fa-save mr-2"},Ll={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),$=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I([]),H=I([]),B=I(""),f=I([]),x=R(()=>f.value.filter(_=>!a.tags.includes(_))),a=Ye({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),z=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},T=_=>{a.restrictedModels.splice(_,1)},q=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=R(()=>q.value.filter(_=>!a.restrictedModels.includes(_))),C=_=>{a.restrictedModels.includes(_)||a.restrictedModels.push(_)},X=()=>{if(B.value&&B.value.trim()){const _=B.value.trim();a.tags.includes(_)||a.tags.push(_),B.value=""}},le=_=>{a.tags.includes(_)||a.tags.push(_)},ue=_=>{a.tags.splice(_,1)},fe=async()=>{if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let _=!1;if(window.showConfirm?_=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。 @@ -27,4 +27,4 @@ export ANTHROPIC_AUTH_TOKEN="${a}"`;await Q(z,"配置信息已复制到剪贴板 `);V(`${A} 个编辑失败: ${i}`,"warning")}}else V("所有 API Keys 编辑失败","error");F("success"),F("close")}else V(o.message||"批量编辑失败","error")}catch(l){V("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",l)}finally{L.value=!1}};return ut(async()=>{if(Q.value=await j.fetchTags(),g.accounts){const l=(g.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),o=[];g.accounts.openai&&g.accounts.openai.forEach(p=>{o.push({...p,platform:p.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(p=>{o.push({...p,platform:p.platform||"openai-responses"})}),W.value={claude:g.accounts.claude||[],gemini:l,openai:o,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}}),(l,o)=>(n(),we(Ee,{to:"body"},[e("div",Un,[e("div",Rn,[e("div",Mn,[e("div",Pn,[o[28]||(o[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vn," 批量编辑 API Keys ("+c(B.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:o[0]||(o[0]=p=>l.$emit("close"))},o[29]||(o[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(_,["prevent"])},[e("div",En,[e("div",On,[o[31]||(o[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[o[30]||(o[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",jn," 以下设置将应用到所选的 "+c(B.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",Gn,[e("div",zn,[e("label",qn,[D(e("input",{"onUpdate:modelValue":o[1]||(o[1]=p=>H.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[Ie,H.value]]),o[32]||(o[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Fn,[D(e("input",{"onUpdate:modelValue":o[2]||(o[2]=p=>H.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[Ie,H.value]]),o[33]||(o[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Wn,[D(e("input",{"onUpdate:modelValue":o[3]||(o[3]=p=>H.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[Ie,H.value]]),o[34]||(o[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bn,[D(e("input",{"onUpdate:modelValue":o[4]||(o[4]=p=>H.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[Ie,H.value]]),o[35]||(o[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),H.value!=="none"?(n(),d("div",Nn,[x.tags.length>0?(n(),d("div",Hn,[e("div",Yn,c(H.value==="replace"?"新标签列表:":H.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Qn,[(n(!0),d(Z,null,oe(x.tags,(p,A)=>(n(),d("span",{key:"selected-"+A,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[h(c(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:u=>pe(A)},o[36]||(o[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Jn)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",Xn,[o[38]||(o[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Zn,[(n(!0),d(Z,null,oe(f.value,p=>(n(),d("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:A=>fe(p)},[o[37]||(o[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(p),1)],8,ei))),128))])])):w("",!0),e("div",null,[o[40]||(o[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ti,[D(e("input",{"onUpdate:modelValue":o[5]||(o[5]=p=>S.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(ue,["prevent"]),["enter"])},null,40,si),[[te,S.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:ue},o[39]||(o[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):w("",!0)])]),e("div",ai,[o[45]||(o[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ri,[e("div",oi,[e("div",null,[o[42]||(o[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),D(e("input",{"onUpdate:modelValue":o[6]||(o[6]=p=>x.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitWindow]])]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":o[7]||(o[7]=p=>x.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitRequests]])]),e("div",null,[o[44]||(o[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":o[8]||(o[8]=p=>x.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[te,x.rateLimitCost]])])])])]),e("div",null,[o[46]||(o[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[9]||(o[9]=p=>x.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.dailyCostLimit]])]),e("div",null,[o[47]||(o[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[10]||(o[10]=p=>x.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.totalCostLimit]])]),e("div",null,[o[48]||(o[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Opus 模型周费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[11]||(o[11]=p=>x.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.weeklyOpusCostLimit]]),o[49]||(o[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户 ",-1))]),e("div",null,[o[50]||(o[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":o[12]||(o[12]=p=>x.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[te,x.concurrencyLimit]])]),e("div",null,[e("div",li,[o[54]||(o[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ni,[e("label",ii,[D(e("input",{"onUpdate:modelValue":o[13]||(o[13]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[Ie,x.isActive]]),o[51]||(o[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",di,[D(e("input",{"onUpdate:modelValue":o[14]||(o[14]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[Ie,x.isActive]]),o[52]||(o[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ui,[D(e("input",{"onUpdate:modelValue":o[15]||(o[15]=p=>x.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[Ie,x.isActive]]),o[53]||(o[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[o[61]||(o[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ci,[e("label",gi,[D(e("input",{"onUpdate:modelValue":o[16]||(o[16]=p=>x.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[Ie,x.permissions]]),o[55]||(o[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",pi,[D(e("input",{"onUpdate:modelValue":o[17]||(o[17]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[Ie,x.permissions]]),o[56]||(o[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",mi,[D(e("input",{"onUpdate:modelValue":o[18]||(o[18]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,x.permissions]]),o[57]||(o[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",xi,[D(e("input",{"onUpdate:modelValue":o[19]||(o[19]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,x.permissions]]),o[58]||(o[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",yi,[D(e("input",{"onUpdate:modelValue":o[20]||(o[20]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,x.permissions]]),o[59]||(o[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",fi,[D(e("input",{"onUpdate:modelValue":o[21]||(o[21]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,x.permissions]]),o[60]||(o[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",bi,[o[62]||(o[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:$.value,title:"刷新账号列表",type:"button",onClick:Ke},[e("i",{class:O(["fas",$.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c($.value?"刷新中...":"刷新账号"),1)],8,vi)]),e("div",ki,[e("div",null,[o[63]||(o[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:nt(T),"onUpdate:modelValue":o[22]||(o[22]=p=>lt(T)?T.value=p:null),accounts:W.value.claude,"default-option-text":"请选择Claude账号",disabled:!le("claude"),groups:W.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:nt(q),"onUpdate:modelValue":o[23]||(o[23]=p=>lt(q)?q.value=p:null),accounts:W.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!le("gemini"),groups:W.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[65]||(o[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:nt(K),"onUpdate:modelValue":o[24]||(o[24]=p=>lt(K)?K.value=p:null),accounts:W.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!le("openai"),groups:W.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:nt(C),"onUpdate:modelValue":o[25]||(o[25]=p=>lt(C)?C.value=p:null),accounts:W.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!le("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":a},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:nt(X),"onUpdate:modelValue":o[26]||(o[26]=p=>lt(X)?X.value=p:null),accounts:W.value.droid,"default-option-text":"请选择Droid账号",disabled:!le("droid"),groups:W.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":a},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",wi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[27]||(o[27]=p=>l.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:L.value,type:"submit"},[L.value?(n(),d("div",Ai)):(n(),d("i",$i)),h(" "+c(L.value?"保存中...":"批量保存"),1)],8,hi)])],32)])])]))}},Ii=Se(Ci,[["__scopeId","data-v-c0491882"]]),Ki={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Li={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Di={class:"mb-6 flex items-center justify-between"},_i={class:"flex items-center gap-3"},Ti={class:"text-sm text-gray-600 dark:text-gray-400"},Si={class:"space-y-6"},Ui={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Ri={class:"flex items-center justify-between"},Mi={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Pi={class:"ml-2 text-xs font-normal text-gray-600"},Vi={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ei={key:0,class:"mb-4"},Oi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ji={class:"mb-3 grid grid-cols-3 gap-2"},Gi=["onClick"],zi={key:1,class:"animate-fadeIn"},qi=["min"],Fi={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},Wi={class:"flex items-center justify-between"},Bi={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ni={class:"flex gap-3 pt-2"},Hi=["disabled"],Yi={key:0,class:"loading-spinner mr-2"},Qi={key:1,class:"fas fa-save mr-2"},Ji={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(k,{expose:N,emit:g}){const F=k,j=g,L=I(!1),$=Ye({expireDuration:"",customExpireDate:"",expiresAt:null}),W=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],S=R(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Te(()=>F.show,K=>{K&&Q()}),Te(()=>{var K;return(K=F.apiKey)==null?void 0:K.id},K=>{K&&F.show&&Q()});const Q=()=>{L.value=!1,F.apiKey.expiresAt?($.expireDuration="custom",$.customExpireDate=new Date(F.apiKey.expiresAt).toISOString().slice(0,16),$.expiresAt=F.apiKey.expiresAt):($.expireDuration="",$.customExpireDate="",$.expiresAt=null)},H=K=>{if($.expireDuration=K,!K){$.expiresAt=null;return}if(K==="custom")return;const C=new Date,X=K.match(/(\d+)([dhmy])/);if(X){const[,le,ue]=X,fe=parseInt(le);switch(ue){case"d":C.setDate(C.getDate()+fe);break;case"h":C.setHours(C.getHours()+fe);break;case"m":C.setMonth(C.getMonth()+fe);break;case"y":C.setFullYear(C.getFullYear()+fe);break}$.expiresAt=C.toISOString()}},B=()=>{$.customExpireDate&&($.expiresAt=new Date($.customExpireDate).toISOString())},f=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",x=K=>K?new Date(K){if(!K)return null;const C=new Date,le=new Date(K)-C,ue=Math.ceil(le/(1e3*60*60*24));return le<0?{text:"已过期",class:"text-red-600"}:ue<=7?{text:`${ue} 天后过期`,class:"text-orange-600"}:ue<=30?{text:`${ue} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(ue/30)} 个月后过期`,class:"text-green-600"}},z=()=>{L.value=!0,j("save",{keyId:F.apiKey.id,expiresAt:$.expiresAt})},T=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),K&&(L.value=!0,j("save",{keyId:F.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{L.value=!1}}),(K,C)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",Ki,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:C[0]||(C[0]=X=>K.$emit("close"))}),e("div",Li,[e("div",Di,[e("div",_i,[C[6]||(C[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[C[5]||(C[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Ti,' 为 "'+c(k.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:C[1]||(C[1]=X=>K.$emit("close"))},C[7]||(C[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Si,[e("div",Ui,[e("div",Ri,[e("div",null,[C[12]||(C[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Mi,[k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d(Z,{key:0},[C[8]||(C[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),C[9]||(C[9]=h(" 未激活 ",-1)),e("span",Pi," (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):k.apiKey.expiresAt?(n(),d(Z,{key:1},[h(c(f(k.apiKey.expiresAt))+" ",1),a(k.apiKey.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(k.apiKey.expiresAt).class])}," ("+c(a(k.apiKey.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:2},[C[10]||(C[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),C[11]||(C[11]=h(" 永不过期 ",-1))],64))])]),e("div",Vi,[e("i",{class:O(["fas fa-hourglass-half text-lg",k.apiKey.expiresAt&&x(k.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d("div",Ei,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:T},[C[13]||(C[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),h(" 立即激活 (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Oi,[C[14]||(C[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),h(" 点击立即激活此 API Key,激活后将在 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):w("",!0),e("div",null,[C[16]||(C[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ji,[(n(),d(Z,null,oe(W,X=>e("button",{key:X.value,class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",$.expireDuration===X.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:le=>H(X.value)},c(X.label),11,Gi)),64)),e("button",{class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",$.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:C[2]||(C[2]=X=>H("custom"))},C[15]||(C[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),h(" 自定义 ",-1)]),2)])]),$.expireDuration==="custom"?(n(),d("div",zi,[C[17]||(C[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),D(e("input",{"onUpdate:modelValue":C[3]||(C[3]=X=>$.customExpireDate=X),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:S.value,type:"datetime-local",onChange:B},null,40,qi),[[te,$.customExpireDate]]),C[18]||(C[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):w("",!0),$.expiresAt!==k.apiKey.expiresAt?(n(),d("div",Fi,[e("div",Wi,[e("div",null,[C[21]||(C[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),h(" 新的过期时间 ")],-1)),e("p",Bi,[$.expiresAt?(n(),d(Z,{key:0},[h(c(f($.expiresAt))+" ",1),a($.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a($.expiresAt).class])}," ("+c(a($.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:1},[C[19]||(C[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),C[20]||(C[20]=h(" 永不过期 ",-1))],64))])]),C[22]||(C[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):w("",!0),e("div",Ni,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:C[4]||(C[4]=X=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:L.value||$.expiresAt===k.apiKey.expiresAt,onClick:z},[L.value?(n(),d("div",Yi)):(n(),d("i",Qi)),h(" "+c(L.value?"保存中...":"保存更改"),1)],8,Hi)])])])])):w("",!0)]))}},Xi=Se(Ji,[["__scopeId","data-v-fb30c1d3"]]),Zi={class:"w-full"},ed={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},td={key:1,class:"space-y-1.5"},sd={class:"flex items-center justify-between text-[11px] font-medium"},ad={class:"text-gray-700 dark:text-gray-200"},rd={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},od={class:"relative z-10 flex h-full items-center justify-between px-3"},ld={class:"flex items-center gap-1.5"},nd={class:"flex items-center gap-1.5"},id={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},dd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:k=>["daily","opus","window","total"].includes(k)},variant:{type:String,default:"full",validator:k=>["full","compact"].includes(k)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(k){const N=k,g=R(()=>N.variant==="compact"),F=R(()=>{if(!N.limit||N.limit<=0)return 0;const f=N.current/N.limit*100;return Math.min(f,100)}),j=R(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),L=R(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),$=R(()=>{const f=F.value;return N.type==="daily"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),W=R(()=>{const f=F.value;if(f>=95)return"bg-rose-500 dark:bg-rose-400";if(f>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),S=R(()=>{const f=F.value;if(f>=95)return"text-rose-600 dark:text-rose-300";if(f>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=R(()=>{const f=F.value;let x="";if(f>=90)x="text-red-700 dark:text-red-400";else if(f>=70)x="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":x="text-green-700 dark:text-green-400";break;case"opus":x="text-purple-700 dark:text-purple-400";break;case"window":x="text-blue-700 dark:text-blue-400";break;default:x="text-gray-600 dark:text-gray-400"}let a="";switch(N.type){case"daily":a="fas fa-calendar-day";break;case"opus":a="fas fa-gem";break;case"window":a="fas fa-clock";break;case"total":a="fas fa-wallet";break;default:a="fas fa-infinity"}return`${a} ${x}`}),H=R(()=>{if(F.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),B=R(()=>{const f=F.value;if(f>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(f>=90)return"text-red-700 dark:text-red-300";if(f>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(f,x)=>(n(),d("div",Zi,[!k.limit||k.limit<=0?(n(),d("div",ed,x[0]||(x[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):g.value?(n(),d("div",td,[e("div",sd,[e("div",{class:O(["flex items-center gap-1.5",S.value])},[e("i",{class:O(["text-[11px]",Q.value])},null,2),e("span",null,c(k.label),1)],2),e("span",ad,"$"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),1)]),e("div",rd,[e("div",{class:O(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",W.value]),style:Ct({width:F.value+"%"})},null,6)])])):(n(),d("div",{key:2,class:O(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",j.value])},[e("div",{class:O(["absolute inset-0",L.value])},null,2),e("div",{class:O(["absolute inset-0 h-full transition-all duration-500 ease-out",$.value]),style:Ct({width:F.value+"%"})},null,6),x[1]||(x[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",od,[e("div",ld,[e("i",{class:O(["text-xs",Q.value])},null,2),e("span",{class:O(["text-xs font-semibold",H.value])},c(k.label),3)]),e("div",nd,[e("span",{class:O(["text-xs font-bold tabular-nums",B.value])}," $"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),3)])]),k.showShine&&F.value>0?(n(),d("div",id)):w("",!0)],2))]))}},Ve=Se(dd,[["__scopeId","data-v-8a01dc56"]]),ud={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},cd={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},gd={class:"mb-4 flex items-center justify-between sm:mb-6"},pd={class:"flex items-center gap-2 sm:gap-3"},md={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},xd={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},yd={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},fd={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},bd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},vd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},kd={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},wd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},hd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ad={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},$d={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},Cd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Id={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},Kd={class:"space-y-1 text-sm"},Ld={class:"flex justify-between"},Dd={class:"font-semibold text-gray-900 dark:text-gray-100"},_d={class:"flex justify-between"},Td={class:"font-semibold text-gray-900 dark:text-gray-100"},Sd={class:"mb-6"},Ud={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Rd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Pd={class:"flex items-center justify-between"},Vd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Ed={key:0,class:"flex items-center justify-between"},Od={class:"text-sm font-semibold text-purple-600"},jd={key:1,class:"flex items-center justify-between"},Gd={class:"text-sm font-semibold text-purple-600"},zd={key:0,class:"mb-6"},qd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Fd={key:0,class:"space-y-1.5"},Wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Bd={key:1,class:"space-y-1.5"},Nd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Hd={key:2,class:"space-y-1.5"},Yd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Qd={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Jd={class:"font-semibold text-purple-600 dark:text-purple-300"},Xd={key:4,class:"space-y-2"},Zd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(k,{emit:N}){const g=k,F=N,j=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.requests)||0}),L=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.requests)||0}),$=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.tokens)||0}),W=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.tokens)||0}),S=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cost)||0}),Q=R(()=>g.apiKey.dailyCost||0),H=R(()=>g.apiKey.totalCostLimit||0),B=R(()=>g.apiKey.weeklyOpusCost||0),f=R(()=>g.apiKey.weeklyOpusCostLimit||0),x=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.inputTokens)||0}),a=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.outputTokens)||0}),z=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheCreateTokens)||0}),T=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheReadTokens)||0}),q=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.rpm)||0}),K=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.tpm)||0}),C=R(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.weeklyOpusCostLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),X=R(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:Q.value/g.apiKey.dailyCostLimit*100),le=R(()=>!H.value||H.value===0?0:S.value/H.value*100),ue=R(()=>!f.value||f.value===0?0:B.value/f.value*100),fe=l=>!l&&l!==0?"0":l.toLocaleString("zh-CN"),pe=l=>l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString(),Ke=()=>{F("close")},_=()=>{var l;F("open-timeline",(l=g.apiKey)==null?void 0:l.id)};return(l,o)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",ud,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:Ke}),e("div",cd,[e("div",gd,[e("div",pd,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",md," 使用统计详情 - "+c(k.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:Ke},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",xd,[e("div",yd,[e("div",fd,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",bd,c(fe(j.value)),1),e("div",vd," 今日: "+c(fe(L.value))+" 次 ",1)]),e("div",kd,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",wd,c(pe($.value)),1),e("div",hd," 今日: "+c(pe(W.value)),1)]),e("div",Ad,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",$d," $"+c(S.value.toFixed(4)),1),e("div",Cd," 今日: $"+c(Q.value.toFixed(4)),1)]),e("div",Id,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",Kd,[e("div",Ld,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",Dd,c(q.value),1)]),e("div",_d,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Td,c(K.value),1)])])])]),e("div",Sd,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" Token 使用分布 ")],-1)),e("div",Ud,[e("div",Rd,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",Md,c(pe(x.value)),1)]),e("div",Pd,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",Vd,c(pe(a.value)),1)]),z.value>0?(n(),d("div",Ed,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",Od,c(pe(z.value)),1)])):w("",!0),T.value>0?(n(),d("div",jd,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",Gd,c(pe(T.value)),1)])):w("",!0)])]),C.value?(n(),d("div",zd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),h(" 限制设置 ")],-1)),e("div",qd,[k.apiKey.dailyCostLimit>0?(n(),d("div",Fd,[ae(Ve,{current:Q.value,label:"每日费用限制",limit:k.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",Wd," 已使用 "+c(Math.min(X.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.weeklyOpusCostLimit>0?(n(),d("div",Bd,[ae(Ve,{current:B.value,label:"Opus 周费用限制",limit:k.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",Nd," 已使用 "+c(Math.min(ue.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.totalCostLimit>0?(n(),d("div",Hd,[ae(Ve,{current:S.value,label:"总费用限制",limit:k.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Yd," 已使用 "+c(Math.min(le.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.concurrencyLimit>0?(n(),d("div",Qd,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Jd,c(k.apiKey.currentConcurrency||0)+" / "+c(k.apiKey.concurrencyLimit),1)])):w("",!0),k.apiKey.rateLimitWindow>0?(n(),d("div",Xd,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),h(" 时间窗口限制 ")],-1)),ae(ya,{"cost-limit":k.apiKey.rateLimitCost,"current-cost":k.apiKey.currentWindowCost,"current-requests":k.apiKey.currentWindowRequests,"current-tokens":k.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":k.apiKey.rateLimitWindow,"request-limit":k.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":k.apiKey.tokenLimit,"window-end-time":k.apiKey.windowEndTime,"window-remaining-seconds":k.apiKey.windowRemainingSeconds,"window-start-time":k.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):w("",!0)])])):w("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:_}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:Ke}," 关闭 ")])])])):w("",!0)]))}},e0=Se(Zd,[["__scopeId","data-v-e4a6a155"]]),t0={class:"tab-content"},s0={class:"card p-4 sm:p-6"},a0={class:"mb-4 flex flex-col gap-4 sm:mb-6"},r0={class:"border-b border-gray-200 dark:border-gray-700"},o0={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},l0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},n0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},i0={key:0,class:"tab-panel"},d0={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},u0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},c0={class:"group relative min-w-[140px]"},g0={key:0,class:"flex items-center"},p0={class:"group relative min-w-[140px]"},m0={class:"relative"},x0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},y0={class:"group relative min-w-[140px]"},f0={class:"relative"},b0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},v0={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},k0={class:"sm:w-44"},w0={class:"group relative flex-1"},h0={class:"relative flex items-center"},A0=["placeholder"],$0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},C0=["disabled"],I0={class:"relative"},K0={class:"relative"},L0={key:0,class:"py-12 text-center"},D0={key:1,class:"py-12 text-center"},_0={key:2,class:"table-wrapper hidden md:block"},T0={class:"table-container"},S0={class:"w-full"},U0={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},R0={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},M0={class:"flex items-center"},P0=["indeterminate"],V0={key:1,class:"fas fa-sort ml-1 text-gray-400"},E0={key:1,class:"fas fa-sort ml-1 text-gray-400"},O0=["title"],j0={key:1,class:"fas fa-sort ml-1 text-gray-400"},G0={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},z0={key:1,class:"fas fa-sort ml-1 text-gray-400"},q0={key:1,class:"fas fa-sort ml-1 text-gray-400"},F0={key:1,class:"fas fa-sort ml-1 text-gray-400"},W0={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},B0={class:"flex items-center"},N0=["value"],H0={class:"min-w-0"},Y0=["title"],Q0={key:0,class:"mt-1 text-xs text-red-600"},J0={class:"px-3 py-3"},X0={class:"space-y-1"},Z0={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},eu={key:0,class:"flex items-center gap-1 text-xs"},tu={class:"truncate text-gray-600 dark:text-gray-400"},su={key:1,class:"flex items-center gap-1 text-xs"},au={class:"truncate text-gray-600 dark:text-gray-400"},ru={key:2,class:"flex items-center gap-1 text-xs"},ou={class:"truncate text-gray-600 dark:text-gray-400"},lu={key:3,class:"flex items-center gap-1 text-xs"},nu={class:"truncate text-gray-600 dark:text-gray-400"},iu={key:4,class:"flex items-center gap-1 text-xs"},du={class:"truncate text-gray-600 dark:text-gray-400"},uu={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},cu={class:"px-3 py-3"},gu={class:"flex flex-wrap gap-1"},pu={key:0,class:"text-xs text-gray-400"},mu={class:"whitespace-nowrap px-3 py-3"},xu={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},yu={key:0,class:"flex items-center justify-end"},fu={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},bu={key:2,class:"text-gray-400"},vu={class:"px-2 py-2",style:{"font-size":"12px"}},ku={class:"flex flex-col gap-2"},wu={key:0,class:"space-y-2"},hu={key:2,class:"space-y-1.5"},Au={class:"flex items-center justify-between text-[10px]"},$u={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Cu={class:"font-medium"},Iu={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Ku={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Lu={key:0,class:"flex items-center justify-end"},Du={key:1,class:"flex items-center justify-end gap-1"},_u={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Tu={key:2,class:"text-gray-400"},Su={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Uu={key:0,class:"flex items-center justify-end"},Ru={key:1,class:"flex items-center justify-end gap-1"},Mu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Pu={key:2,class:"text-gray-400"},Vu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Eu={class:"flex flex-col leading-tight"},Ou=["title"],ju={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Gu={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},zu=["title"],qu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Fu={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Wu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Bu={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},Nu={class:"inline-flex items-center gap-1.5"},Hu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Yu={key:1},Qu=["onClick"],Ju=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},tc={class:"hidden gap-1 2xl:flex"},sc=["onClick"],ac=["onClick"],rc=["onClick"],oc=["onClick"],lc=["title","onClick"],nc={class:"ml-1"},ic=["onClick"],dc={class:"flex items-center gap-1 2xl:hidden"},uc=["onClick"],cc=["onClick"],gc={key:0},pc={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},mc={key:0,class:"py-4 text-center"},xc={class:"space-y-4"},yc={class:"mb-4 flex items-center justify-between"},fc={class:"flex items-center gap-2"},bc={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},vc={class:"flex items-center gap-1"},kc={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},wc=["onClick"],hc={key:0,class:"py-8 text-center"},Ac={class:"mb-3 flex items-center justify-center gap-2"},$c=["onClick"],Cc={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Ic={class:"mb-3 flex items-start justify-between"},Kc={class:"flex-1"},Lc={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Dc={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},_c={class:"mb-3 space-y-2"},Tc={class:"flex items-center justify-between text-sm"},Sc={class:"font-semibold text-gray-900 dark:text-gray-100"},Uc={class:"flex items-center justify-between text-sm"},Rc={class:"font-semibold text-green-600"},Mc={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Pc={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Vc={class:"font-medium"},Ec={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Oc={class:"font-medium"},jc={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Gc={class:"font-medium"},zc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},qc={class:"font-medium"},Fc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Wc={class:"mt-1 text-right"},Bc={class:"text-xs font-medium text-indigo-600"},Nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},Hc={class:"flex items-center justify-between text-sm"},Yc={class:"flex gap-4 text-xs"},Qc={class:"text-gray-600 dark:text-gray-400"},Jc={class:"font-semibold text-gray-800 dark:text-gray-200"},Xc={class:"text-gray-600 dark:text-gray-400"},Zc={class:"font-semibold text-gray-800 dark:text-gray-200"},eg={key:3,class:"space-y-3 md:hidden"},tg={class:"mb-3 flex items-start justify-between"},sg={class:"flex items-center gap-3"},ag=["value"],rg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},og={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},lg={class:"mb-3 space-y-1.5"},ng={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},ig={class:"text-gray-600 dark:text-gray-400"},dg={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},ug={class:"text-gray-600 dark:text-gray-400"},cg={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},gg={class:"text-gray-600 dark:text-gray-400"},pg={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},mg={class:"text-gray-600 dark:text-gray-400"},xg={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},yg={class:"text-gray-600 dark:text-gray-400"},fg={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},bg={key:6,class:"text-xs text-red-600"},vg={class:"mb-3 space-y-2"},kg={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wg={class:"mb-2 flex items-center justify-between"},hg={class:"text-xs text-gray-600 dark:text-gray-400"},Ag=["onClick"],$g={class:"grid grid-cols-2 gap-3"},Cg={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Ig={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kg={key:2,class:"text-sm font-semibold text-gray-400"},Lg={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Dg={key:1,class:"text-sm font-semibold text-green-600"},_g={key:2,class:"text-sm font-semibold text-gray-400"},Tg={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Sg={class:"flex items-center justify-between"},Ug={class:"font-medium text-gray-700 dark:text-gray-300"},Rg={class:"mt-1 flex items-center justify-between"},Mg={key:0,class:"text-gray-400 dark:text-gray-500"},Pg=["title"],Vg={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Eg={key:2,class:"text-gray-400 dark:text-gray-500"},Og={class:"space-y-2"},jg={key:0,class:"space-y-2"},Gg={key:2,class:"space-y-2"},zg={class:"flex items-center justify-between text-xs"},qg={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Fg={class:"font-medium"},Wg={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Bg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ng={class:"mb-1 flex justify-between"},Hg={class:"flex items-center justify-between"},Yg={class:"flex items-center gap-1"},Qg=["onClick"],Jg={key:0,class:"mb-3 flex flex-wrap gap-1"},Xg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},Zg=["onClick"],ep=["onClick"],tp=["onClick"],sp=["onClick"],ap=["onClick"],rp={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},op={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},lp={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},np={class:"flex items-center gap-2"},ip=["value"],dp={class:"flex items-center gap-2"},up=["disabled"],cp={class:"flex items-center gap-1"},gp={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},pp=["onClick"],mp={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},xp=["disabled"],yp={key:1,class:"tab-panel"},fp={key:0,class:"py-12 text-center"},bp={key:1,class:"py-12 text-center"},vp={key:2},kp={class:"mb-4 flex justify-end"},wp={class:"table-wrapper"},hp={class:"table-container"},Ap={class:"w-full"},$p={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Cp={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ip={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Kp={class:"name-column sticky left-0 z-10 px-3 py-3"},Lp={class:"flex items-center"},Dp={class:"min-w-0"},_p=["title"],Tp={class:"px-3 py-3"},Sp={class:"space-y-1"},Up={key:0,class:"flex items-center gap-1 text-xs"},Rp={key:1,class:"flex items-center gap-1 text-xs"},Mp={key:2,class:"flex items-center gap-1 text-xs"},Pp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vp={key:0,class:"px-3 py-3"},Ep={class:"text-xs"},Op={key:0,class:"text-blue-600"},jp={key:1,class:"text-green-600"},Gp={key:2,class:"text-gray-500 dark:text-gray-400"},zp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},qp={class:"px-3 py-3"},Fp={class:"text-xs"},Wp={key:0,class:"text-blue-600"},Bp={key:1,class:"text-green-600"},Np={key:2,class:"text-gray-500 dark:text-gray-400"},Hp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Yp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Qp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Jp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Zp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},em={class:"flex items-center justify-end gap-1"},tm={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},sm={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},am={class:"flex flex-col leading-tight"},rm=["title"],om={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lm={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},nm=["title"],im={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dm={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},um={class:"operations-column operations-cell px-3 py-3"},cm={class:"flex items-center gap-2"},gm=["onClick"],pm=["onClick"],ks=16,mm={__name:"ApiKeysView",setup(k){const N=ma(),g=zt(),F=xa(),j=I([]),L=R(()=>{var s;return((s=F.oemSettings)==null?void 0:s.ldapEnabled)||!1}),$=I([]),W=I(!1),S=I(!1),Q=I(!1),H=I(!1),B=I("today"),f=Ye({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),x=R(()=>Q.value),a=()=>{Q.value=!Q.value,Q.value||($.value=[],W.value=!1,S.value=!1)},z=R(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),T=I("active"),q=I([]),K=I(!1),C=I("createdAt"),X=I("desc"),le=I({}),ue=I({}),fe=I({page:1,pageSize:20,total:0,totalPages:0}),pe=I(new Map),Ke=I(new Set),_=I(new Map),l=I(new Set),o=I({}),p=I({}),A=I([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),u=I({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),i=I(!1),y=I(!1),ie=I(null),me=I(null),xe=I(!1),he=I(null),ce=I(""),Ae=I([]),Y=I([]),J=I([]),be=I(""),Re=I("apiKey"),Qe=R(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),re=R(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return Ae.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Me=R(()=>J.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),As=R(()=>ce.value?j.value.filter(s=>s.tags&&s.tags.includes(ce.value)).length:0),ve=I(1),Je=I((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),$s=[10,20,50,100],Xe=I(!1),ct=I(!1),gt=I(!1),It=I(!1),Kt=I(!1),pt=I(!1),Ft=I(null),Wt=I(null),Bt=I(null),Nt=I([]),mt=R(()=>j.value),ze=R(()=>fe.value.totalPages||0),Ze=R(()=>{const s=[],t=ve.value,m=ze.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),v=Math.min(m,t+2);t<=3?v=5:t>=m-2&&(r=m-4);for(let M=r;M<=v;M++)s.push(M)}return s}),Ht=R(()=>{const s=Ze.value;return s.length===0?!1:s[0]>1}),Yt=R(()=>{const s=Ze.value;return s.length===0?!1:s[s.length-1]{const s=Ze.value;return s.length===0?!1:Ht.value&&s[0]>2}),Is=R(()=>{const s=Ze.value;return s.length===0?!1:Yt.value&&s[s.length-1]j.value),xt=async(s=!1)=>{var t,m;if(!(y.value&&!s)){i.value=!0;try{const[r,v,M,P,U,se,ne,b,G]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),de=[];r.success&&((t=r.data)==null||t.forEach(ee=>{de.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),v.success&&((m=v.data)==null||m.forEach(ee=>{de.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),u.value.claude=de;const ke=[];if(M.success&&(M.data||[]).forEach(ee=>{ke.push({...ee,platform:"gemini",isDedicated:ee.accountType==="dedicated"})}),P.success&&(u.value.geminiApi=(P.data||[]).map(ee=>({...ee,platform:"gemini-api",isDedicated:ee.accountType==="dedicated"})),u.value.geminiApi.forEach(ee=>{ke.push(ee)})),u.value.gemini=ke,U.success&&(u.value.openai=(U.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),se.success&&(u.value.openaiResponses=(se.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ne.success&&(u.value.bedrock=(ne.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),b.success&&(u.value.droid=(b.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),G.success){const ee=G.data||[];u.value.claudeGroups=ee.filter(ge=>ge.platform==="claude"),u.value.geminiGroups=ee.filter(ge=>ge.platform==="gemini"),u.value.openaiGroups=ee.filter(ge=>ge.platform==="openai"),u.value.droidGroups=ee.filter(ge=>ge.platform==="droid")}y.value=!0}catch{}finally{i.value=!1}}},Ks=async()=>{try{const s=await E.get("/admin/api-keys/used-models");s.success&&(J.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},$e=async(s=!0)=>{var t,m,r;H.value=!0;try{s&&(pe.value.clear(),_.value.clear());const v=new URLSearchParams;v.set("page",ve.value.toString()),v.set("pageSize",Je.value.toString()),v.set("searchMode",Re.value),be.value&&v.set("search",be.value),ce.value&&v.set("tag",ce.value),Y.value.length>0&&v.set("models",Y.value.join(","));const P=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(C.value)?C.value:"createdAt";v.set("sortBy",P),v.set("sortOrder",X.value),P==="cost"&&(f.type==="custom"&&f.customStart&&f.customEnd?(v.set("costTimeRange","custom"),v.set("costStartDate",f.customStart),v.set("costEndDate",f.customEnd)):v.set("costTimeRange",f.preset||"7days")),f.type==="custom"&&f.customStart&&f.customEnd?(v.set("startDate",f.customStart),v.set("endDate",f.customEnd),v.set("timeRange","custom")):f.preset==="all"?v.set("timeRange","all"):v.set("timeRange",f.preset);const U=await E.get(`/admin/api-keys?${v.toString()}`);U.success&&(j.value=((t=U.data)==null?void 0:t.items)||[],(m=U.data)!=null&&m.pagination&&(fe.value=U.data.pagination,ve.value>fe.value.totalPages&&fe.value.totalPages>0&&(ve.value=fe.value.totalPages)),(r=U.data)!=null&&r.availableTags&&(Ae.value=U.data.availableTags),Ls(),Ds())}catch{V("加载 API Keys 失败","error")}finally{H.value=!1}},Ls=async()=>{const s=j.value;if(!s||s.length===0)return;let t=f.preset,m=null,r=null;f.type==="custom"&&f.customStart&&f.customEnd&&(t="custom",m=f.customStart,r=f.customEnd);const v=s.filter(P=>{const U=pe.value.get(P.id);return!U||U.timeRange!==t||t==="custom"&&(U.startDate!==m||U.endDate!==r)});if(v.length===0)return;const M=v.map(P=>P.id);M.forEach(P=>Ke.value.add(P));try{const P={keyIds:M,timeRange:t};t==="custom"&&(P.startDate=m,P.endDate=r);const U=await E.post("/admin/api-keys/batch-stats",P);if(U.success&&U.data)for(const[se,ne]of Object.entries(U.data))pe.value.set(se,{stats:ne,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(P){console.error("加载统计数据失败:",P)}finally{M.forEach(P=>Ke.value.delete(P))}},ye=s=>{const t=pe.value.get(s);return(t==null?void 0:t.stats)||null},qe=s=>Ke.value.has(s),Ds=async()=>{const s=j.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||_.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>l.value.add(r));try{const r=await E.post("/admin/api-keys/batch-last-usage",{keyIds:m});if(r.success&&r.data)for(const[v,M]of Object.entries(r.data))_.value.set(v,M)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>l.value.delete(r))}},_s=s=>_.value.get(s)||null,yt=s=>l.value.has(s),ft=async()=>{T.value="deleted",K.value=!0;try{const s=await E.get("/admin/api-keys/deleted");s.success&&(q.value=s.apiKeys||[])}catch{V("加载已删除的 API Keys 失败","error")}finally{K.value=!1}},Be=s=>{if(s==="cost"){if(!bt.value){V("费用排序索引正在更新中,请稍后重试","warning");return}f.type==="custom"&&V("正在计算费用排序,可能需要几秒钟...","info")}C.value===s?X.value=X.value==="asc"?"desc":"asc":(C.value=s,X.value=s==="cost"?"desc":"asc")},bt=R(()=>{if(f.type==="custom")return!0;const s=f.preset,t=ue.value[s];return(t==null?void 0:t.status)==="ready"}),Ts=R(()=>{if(f.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=f.preset,t=ue.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let Ne=null;const Qt=async()=>{try{const s=await E.get("/admin/api-keys/cost-sort-status");s.success&&(ue.value=s.data||{},Ss())}catch(s){console.error("Failed to fetch cost sort status:",s)}},Ss=()=>{Ne&&clearTimeout(Ne);const t=Object.values(ue.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;Ne=setTimeout(Qt,t)},Lt=s=>!s&&s!==0?"0":s.toLocaleString("zh-CN"),De=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),et=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const U=s.substring(6),se=u.value.claudeGroups.find(de=>de.id===U);if(se)return`分组-${se.name}`;const ne=u.value.geminiGroups.find(de=>de.id===U);if(ne)return`分组-${ne.name}`;const b=u.value.openaiGroups.find(de=>de.id===U);if(b)return`分组-${b.name}`;const G=u.value.droidGroups.find(de=>de.id===U);return G?`分组-${G.name}`:`分组-${U.substring(0,8)}`}const t=u.value.claude.find(U=>U.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const U=s.replace("api:",""),se=u.value.gemini.find(ne=>ne.id===U&&ne.platform==="gemini-api");return se?`${se.name}`:`${U.substring(0,8)}`}const m=u.value.gemini.find(U=>U.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const U=s.replace("responses:",""),se=u.value.openaiResponses.find(ne=>ne.id===U);return se?`${se.name}`:`${U.substring(0,8)}`}const r=u.value.openai.find(U=>U.id===s);if(r)return`${r.name}`;const v=u.value.openaiResponses.find(U=>U.id===s);if(v)return`${v.name}`;const M=u.value.bedrock.find(U=>U.id===s);if(M)return`${M.name}`;const P=u.value.droid.find(U=>U.id===s);return P?`${P.name}`:`${s.substring(0,8)}`},Us=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),Jt=s=>{if(s.claudeAccountId){const t=et(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=u.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=u.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},Xt=s=>{if(s.geminiAccountId){const t=et(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),v=u.value.gemini.find(M=>M.id===r&&M.platform==="gemini-api");return v?v.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=u.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Zt=s=>{if(s.openaiAccountId){const t=et(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=u.value.openaiResponses.find(v=>v.id===r)}else m=u.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},es=s=>{if(s.bedrockAccountId){const t=et(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=u.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ts=s=>{if(s.droidAccountId){const t=et(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=u.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},tt=s=>s?new Date(s)!s||tt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,ss=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",as=async s=>{le.value[s]?le.value[s]=!1:(le.value[s]=!0,p.value[s]||ls(s),await vt(s,!0))},vt=async(s,t=!1)=>{if(!t&&o.value[s]&&o.value[s].length>0)return;const m=Oe(s);try{let r=`/admin/api-keys/${s}/model-stats`;const v=new URLSearchParams;if(m.customStart&&m.customEnd)v.append("startDate",m.customStart),v.append("endDate",m.customEnd),v.append("period","custom");else{const P=m.preset==="today"||m.preset==="7days"?"daily":"monthly";v.append("period",P)}r+="?"+v.toString();const M=await E.get(r);M.success&&(o.value[s]=M.data||[])}catch{V("加载模型统计失败","error"),o.value[s]=[]}},rs=(s,t)=>{const m=t.reduce((r,v)=>r+(v.allTokens||0),0);return m===0?0:Math.round(s/m*100)},Rs=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",Ms=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.requests)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.requests)||0}},Ps=s=>{if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(f.preset==="today")return s.dailyCost||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},Vs=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.tokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.tokens)||0}},Es=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.inputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.inputTokens)||0}},Os=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.outputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.outputTokens)||0}},js=s=>{if(!o.value[s.id])return Ps(s);const t=o.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const v=r.formatted.total.replace("$","").replace(",",""),M=parseFloat(v);isNaN(M)||(m+=M)}}),m},Gs=s=>{if(os(s),C.value==="cost"){if(s==="custom")return;const t=ue.value[s];(!t||t.status!=="ready")&&(C.value="createdAt",X.value="desc",V("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},os=s=>{if(f.preset=s,s==="custom"){if(f.type="custom",!f.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=v=>v.getFullYear()+"-"+String(v.getMonth()+1).padStart(2,"0")+"-"+String(v.getDate()).padStart(2,"0")+" 00:00:00";f.customRange=[r(m),r(t)],f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")f.type="preset",f.customStart=null,f.customEnd=null;else{f.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}$e()},zs=s=>{s&&s.length===2?(f.type="custom",f.preset="custom",f.customRange=s,f.customStart=s[0].split(" ")[0],f.customEnd=s[1].split(" ")[0],$e()):s===null&&os("today")},ls=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),p.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},Oe=s=>(p.value[s]||ls(s),p.value[s]),ns=(s,t)=>{const m=Oe(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(v=>v.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const v=new Date,M=new Date(v);M.setDate(v.getDate()-6);const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)],m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0]}}else{const v=new Date,M=new Date(v);M.setDate(v.getDate()-(r.days-1)),m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0];const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)]}vt(t,!0)},qs=(s,t)=>{const m=Oe(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],vt(s,!0)):t===null&&ns("7days",s)},is=s=>s>new Date,Fs=s=>{const t=Oe(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,vt(s,!0),V("已重置筛选条件并刷新数据","info")},Ws=()=>{Xe.value=!0,y.value||xt()},Dt=s=>{Ft.value=s,ct.value=!0,y.value||xt()},_t=s=>{Wt.value=s,gt.value=!0},Bs=s=>{Xe.value=!1,Bt.value=s,It.value=!0,$e()},Ns=s=>{Xe.value=!1,Nt.value=s,Kt.value=!0,$e()},Hs=()=>{if($.value.length===0){V("请先选择要编辑的 API Keys","warning");return}pt.value=!0,y.value||xt()},Ys=()=>{pt.value=!1,$.value=[],Ue(),$e()},Qs=()=>{ct.value=!1,V("API Key 更新成功","success"),$e()},Js=()=>{gt.value=!1,V("API Key 续期成功","success"),$e()},Xs=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Dt(s)}];return s.expiresAt&&(tt(s.expiresAt)||st(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>_t(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Tt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>St(s.id)}),t},Tt=async s=>{let t=!0;if(s.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const m=await E.put(`/admin/api-keys/${s.id}`,{isActive:!s.isActive});if(m.success){V(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=j.value.find(v=>v.id===s.id);r&&(r.isActive=!s.isActive)}else V(m.message||"操作失败","error")}catch{V("操作失败","error")}},St=async s=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const m=await E.delete(`/admin/api-keys/${s}`);if(m.success){V("API Key 已删除","success");const r=$.value.indexOf(s);r>-1&&$.value.splice(r,1),Ue(),$e()}else V(m.message||"删除失败","error")}catch{V("删除失败","error")}},Zs=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const v=await E.post(`/admin/api-keys/${s}/restore`);v.success?(V("API Key 已成功恢复","success"),await ft(),await $e()):V(v.error||"恢复失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ea=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const v=await E.delete(`/admin/api-keys/${s}/permanent`);v.success?(V("API Key 已彻底删除","success"),ft()):V(v.error||"彻底删除失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},ta=async()=>{var m,r;const s=q.value.length;if(s===0){V("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const v=await E.delete("/admin/api-keys/deleted/clear-all");v.success?(V(v.message||"已清空所有已删除的 API Keys","success"),v.details&&v.details.failedCount>0&&V(`${v.details.failedCount} 个清空失败`,"warning"),ft()):V(v.error||"清空失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},sa=async()=>{const s=$.value.length;if(s===0){V("请先选择要删除的 API Keys","warning");return}let t=!1;const m=`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",m,"确定删除","取消"):t=confirm(m),!t)return;const r=[...$.value];try{const v=await E.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(v.success){const{successCount:M,failedCount:P,errors:U}=v.data;if(M>0){if(V(`成功删除 ${M} 个 API Keys`,"success"),P>0){const se=U.map(ne=>`${ne.keyId}: ${ne.error}`).join(` `);V(`${P} 个删除失败: -${se}`,"warning")}}else V("所有 API Keys 删除失败","error");$.value=[],Ue(),$e()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{$.value.includes(s.id)||$.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));$.value=$.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>$.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,$.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,$e(!1)},300)}),Te(Re,()=>{ve.value=1,$e(!1)}),Te(ce,()=>{ve.value=1,$e(!1)}),Te(Y,()=>{ve.value=1,$e(!1)}),Te([C,X],()=>{$e(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&$e(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));$.value=$.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),$e(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>T.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),T.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae($t,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae($t,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae($t,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae($t,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",$0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>$e())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,C0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),$.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c($.value.length)+")",1)])):w("",!0),$.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c($.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[Ce,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),C.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),C.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),C.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),C.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),C.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),C.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>$.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[Ce,$.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",$u,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Cu,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,$c)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Cc,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Ct({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>$.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[Ce,$.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",$g,[e("div",null,[qe(r.id)?(n(),d("div",Cg)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe($s,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),Cs.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):T.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",$p,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",Cp," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":$.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},hm=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{hm as default}; +${se}`,"warning")}}else V("所有 API Keys 删除失败","error");$.value=[],Ue(),$e()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{$.value.includes(s.id)||$.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));$.value=$.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>$.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,$.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,$e(!1)},300)}),Te(Re,()=>{ve.value=1,$e(!1)}),Te(ce,()=>{ve.value=1,$e(!1)}),Te(Y,()=>{ve.value=1,$e(!1)}),Te([C,X],()=>{$e(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&$e(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));$.value=$.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),$e(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>T.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",T.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),T.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae($t,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae($t,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae($t,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae($t,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",$0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>$e())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,C0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),$.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c($.value.length)+")",1)])):w("",!0),$.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c($.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[Ce,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),C.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),C.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),C.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),C.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),C.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),C.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>$.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[Ce,$.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",$u,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Cu,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,$c)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Cc,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Ct({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>$.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[Ce,$.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",$g,[e("div",null,[qe(r.id)?(n(),d("div",Cg)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe($s,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),Cs.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):T.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",$p,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",Cp," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":$.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},Am=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{Am as default}; diff --git a/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css b/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css deleted file mode 100644 index 0790b919..00000000 --- a/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css +++ /dev/null @@ -1 +0,0 @@ -.custom-scrollbar[data-v-32c162ec]{scrollbar-width:thin;scrollbar-color:#cbd5e0 #f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-track{background:#f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb{background-color:#cbd5e0;border-radius:3px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb:hover{background-color:#a0aec0}pre[data-v-a3d3d870],pre[data-v-b0b904b9]{white-space:pre-wrap;word-wrap:break-word}@keyframes fadeIn-fb30c1d3{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-fb30c1d3]{animation:fadeIn-fb30c1d3 .2s ease-out}.loading-spinner[data-v-fb30c1d3]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-fb30c1d3 .8s linear infinite;display:inline-block}@keyframes spin-fb30c1d3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shine-8a01dc56{0%{transform:translate(-100%)}to{transform:translate(200%)}}.tabular-nums[data-v-8a01dc56]{font-variant-numeric:tabular-nums}.tab-content[data-v-79881b9b]{min-height:calc(100vh - 300px)}.table-wrapper[data-v-79881b9b]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05);width:100%;position:relative}.dark .table-wrapper[data-v-79881b9b]{border-color:#ffffff1a}.table-container[data-v-79881b9b]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-79881b9b]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-79881b9b]::-webkit-scrollbar{height:8px}.table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-79881b9b]{transition:background-color .2s ease}.table-row[data-v-79881b9b]:hover{background-color:#00000005}.dark .table-row[data-v-79881b9b]:hover{background-color:#ffffff05}.operations-column[data-v-79881b9b]{position:sticky;right:0;z-index:12}.table-container thead .operations-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #1e293b73}.checkbox-column[data-v-79881b9b],.name-column[data-v-79881b9b]{position:sticky;z-index:12}.table-container thead .checkbox-column[data-v-79881b9b],.table-container thead .name-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-79881b9b],.dark .table-container thead .name-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #1e293b73}.loading-spinner[data-v-79881b9b]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-79881b9b 1s linear infinite}@keyframes spin-79881b9b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.api-key-date-picker[data-v-79881b9b] .el-input__inner{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-input__inner:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-range-separator{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper{height:38px;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner{height:100%;padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__prefix,.custom-date-range-picker[data-v-79881b9b] .el-input__suffix{display:flex;align-items:center}.custom-date-range-picker[data-v-79881b9b] .el-range-separator{margin-left:.5rem;margin-right:.5rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))} diff --git a/web/admin-spa/dist/assets/ApiStatsView-7CsUPSAo.js b/web/admin-spa/dist/assets/ApiStatsView-7CsUPSAo.js deleted file mode 100644 index 31887612..00000000 --- a/web/admin-spa/dist/assets/ApiStatsView-7CsUPSAo.js +++ /dev/null @@ -1,6 +0,0 @@ -import{aP as pt,r as M,c as j,aX as et,x as n,y as l,z as t,O as b,L as K,P as r,u as e,C as P,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as tt,B as lt,R as X,o as ft,V as yt,I as ot,a5 as bt,q as kt,aW as ht,J as xt,av as _t}from"./vue-vendor-R8HMg95E.js";import{_ as st,A as wt,a as $t}from"./index-Cr7hSgrN.js";import{L as St}from"./LogoTitle-CwgrPCRk.js";import{T as Ct}from"./ThemeToggle-Dkc-_0Ud.js";import{b as Tt}from"./vendor-Dr8jvgFu.js";import{_ as Kt}from"./WindowCountdown-DF7xS2EZ.js";import At from"./TutorialView-DqwFkHUw.js";import"./element-plus-BUfCkBQO.js";class Lt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(v,s={}){try{this.isDev&&v.startsWith("/admin")&&(v="/webapi"+v);const p=await fetch(`${this.baseURL}${v}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),d=await p.json();if(!p.ok)throw new Error(d.message||`请求失败: ${p.status}`);return d}catch(p){throw console.error("API Stats request error:",p),p}}async getKeyId(v){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:v})})}async getUserStats(v){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:v})})}async getUserModelStats(v,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:v,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(v){return console.error("Failed to load OEM settings:",v),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(v){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:v})})}async getBatchModelStats(v,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:v,period:s})})}}const Q=new Lt,at=pt("apistats",()=>{const N=M(""),v=M(null),s=M(!1),p=M(!1),d=M(!0),x=M(""),m=M("daily"),y=M(null),_=M([]),A=M(null),f=M(null),T=M({siteName:"",siteIcon:"",siteIconData:""}),O=M(!1),w=M([]),h=M([]),u=M(null),i=M([]),I=M([]),E=j(()=>{const c={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return O.value&&u.value?m.value==="daily"?u.value.dailyUsage||c:u.value.monthlyUsage||c:m.value==="daily"?A.value||c:f.value||c}),H=j(()=>{if(!y.value||!E.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const c=E.value,k=y.value.limits;return{tokenUsage:k.tokenLimit>0?Math.min(c.allTokens/k.tokenLimit*100,100):0,costUsage:k.dailyCostLimit>0?Math.min(c.cost/k.dailyCostLimit*100,100):0,requestUsage:k.rateLimitRequests>0?Math.min(c.requests/k.rateLimitRequests*100,100):0}});async function V(){if(O.value)return Y();const c=N.value.trim();if(!c){x.value="请输入 API Key";return}if(c.length<10||c.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",y.value=null,_.value=[],v.value=null;try{const k=await Q.getKeyId(c);if(k.success){v.value=k.data.id;const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,await W(),x.value="",z();else throw new Error(L.message||"查询失败")}else throw new Error(k.message||"获取 API Key ID 失败")}catch(k){console.error("Query stats error:",k),x.value=k.message||"查询统计数据失败,请检查您的 API Key 是否正确",y.value=null,_.value=[],v.value=null}finally{s.value=!1}}async function W(){v.value&&(await Promise.all([B("daily"),B("monthly")]),await D(m.value))}async function B(c){try{const k=await Q.getUserModelStats(v.value,c);if(k.success){const L=k.data||[],F={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};L.forEach(q=>{var J;F.requests+=q.requests||0,F.inputTokens+=q.inputTokens||0,F.outputTokens+=q.outputTokens||0,F.cacheCreateTokens+=q.cacheCreateTokens||0,F.cacheReadTokens+=q.cacheReadTokens||0,F.allTokens+=q.allTokens||0,F.cost+=((J=q.costs)==null?void 0:J.total)||0}),F.formattedCost=G(F.cost),c==="daily"?A.value=F:f.value=F}else console.warn(`Failed to load ${c} stats:`,k.message)}catch(k){console.error(`Load ${c} stats error:`,k)}}async function D(c="daily"){if(v.value){p.value=!0;try{const k=await Q.getUserModelStats(v.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载模型统计失败")}catch(k){console.error("Load model stats error:",k),_.value=[]}finally{p.value=!1}}}async function $(c){if(!(m.value===c||p.value)){if(m.value=c,O.value&&h.value.length>0){await rt(c);return}(c==="daily"&&!A.value||c==="monthly"&&!f.value)&&await B(c),await D(c)}}async function U(){var c,k;if(v.value){s.value=!0,x.value="",y.value=null,_.value=[];try{const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,console.log("API Stats - Full response:",L.data),console.log("API Stats - limits data:",L.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(c=L.data.limits)==null?void 0:c.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(k=L.data.limits)==null?void 0:k.weeklyOpusCost),await W(),x.value="";else throw new Error(L.message||"查询失败")}catch(L){console.error("Load stats with apiId error:",L),x.value=L.message||"查询统计数据失败",y.value=null,_.value=[]}finally{s.value=!1}}}async function S(){d.value=!0;try{const c=await Q.getOemSettings();c&&c.success&&c.data&&(T.value={...T.value,...c.data})}catch(c){console.error("Error loading OEM settings:",c),T.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{d.value=!1}}function G(c){return typeof c!="number"||c===0?"$0.000000":c>=1?"$"+c.toFixed(2):c>=.01?"$"+c.toFixed(4):"$"+c.toFixed(6)}function z(){if(v.value){const c=new URL(window.location);c.searchParams.set("apiId",v.value),window.history.pushState({},"",c)}}async function Y(){const c=o();if(c.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",u.value=null,i.value=[],I.value=[],_.value=[],w.value=c,h.value=[];try{const k=await Promise.allSettled(c.map(J=>Q.getKeyId(J))),L=[],F=[];if(k.forEach((J,it)=>{J.status==="fulfilled"&&J.value.success?(L.push(J.value.data.id),F.push(c[it])):I.value.push(c[it])}),L.length===0)throw new Error("所有 API Key 都无效");h.value=L,w.value=F;const q=await Q.getBatchStats(L);if(q.success)u.value=q.data.aggregated,i.value=q.data.individual,y.value=q.data.aggregated,A.value=q.data.aggregated.dailyUsage||null,f.value=q.data.aggregated.monthlyUsage||null,await rt(m.value),a();else throw new Error(q.message||"批量查询失败")}catch(k){console.error("Batch query error:",k),x.value=k.message||"批量查询统计数据失败",u.value=null,i.value=[]}finally{s.value=!1}}async function rt(c="daily"){if(h.value.length!==0){p.value=!0;try{const k=await Q.getBatchModelStats(h.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载批量模型统计失败")}catch(k){console.error("Load batch model stats error:",k),_.value=[]}finally{p.value=!1}}}function o(){if(!N.value)return[];const c=N.value.split(/[,\n]+/).map(L=>L.trim()).filter(L=>L.length>=10&&L.length<=512);return[...new Set(c)].slice(0,30)}function a(){if(h.value.length>0){const c=new URL(window.location);c.searchParams.set("apiIds",h.value.join(",")),c.searchParams.set("batch","true"),window.history.pushState({},"",c)}}function g(){N.value=""}function C(){y.value=null,_.value=[],A.value=null,f.value=null,x.value="",m.value="daily",v.value=null,w.value=[],h.value=[],u.value=null,i.value=[],I.value=[]}function R(){N.value="",O.value=!1,C()}return{apiKey:N,apiId:v,loading:s,modelStatsLoading:p,oemLoading:d,error:x,statsPeriod:m,statsData:y,modelStats:_,dailyStats:A,monthlyStats:f,oemSettings:T,multiKeyMode:O,apiKeys:w,apiIds:h,aggregatedStats:u,individualStats:i,invalidKeys:I,currentPeriodData:E,usagePercentages:H,queryStats:V,queryBatchStats:Y,loadAllPeriodStats:W,loadPeriodStats:B,loadModelStats:D,loadBatchModelStats:rt,switchPeriod:$,loadStatsWithApiId:U,loadOemSettings:S,clearData:C,clearInput:g,reset:R}}),Pt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},It={class:"mx-auto max-w-4xl"},Mt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Dt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},qt={class:"button-group flex items-center gap-2"},jt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Ut={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Rt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Nt={class:"lg:col-span-3"},Ot=["disabled"],Et={key:1,class:"relative"},Ft=["disabled"],Wt={class:"lg:col-span-1"},Bt=["disabled"],Vt={key:0,class:"fas fa-spinner loading-spinner"},zt={key:1,class:"fas fa-search"},Jt={class:"security-notice mt-4"},Yt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},Ht={__name:"ApiKeyInput",setup(N){const v=at(),{apiKey:s,loading:p,multiKeyMode:d}=et(v),{queryStats:x,clearInput:m}=v,y=j(()=>{if(!d.value||!s.value)return[];const A=s.value.split(/[,\n]+/).map(T=>T.trim()).filter(T=>T.length>0);return[...new Set(A)].slice(0,30)}),_=j(()=>d.value?y.value.length>0:s.value&&s.value.trim().length>0);return(A,f)=>(l(),n("div",Pt,[f[15]||(f[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),b(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",It,[t("div",Mt,[t("label",Dt,[f[8]||(f[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),b(" "+r(e(d)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",qt,[t("div",jt,[t("button",{class:P(["mode-switch-btn",{active:!e(d)}]),title:"单一模式",onClick:f[0]||(f[0]=T=>d.value=!1)},f[9]||(f[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:P(["mode-switch-btn",{active:e(d)}]),title:"聚合模式",onClick:f[1]||(f[1]=T=>d.value=!0)},[f[10]||(f[10]=t("i",{class:"fas fa-layer-group"},null,-1)),f[11]||(f[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(d)&&y.value.length>0?(l(),n("span",Ut,r(y.value.length),1)):K("",!0)],2)])])]),t("div",Rt,[t("div",Nt,[e(d)?(l(),n("div",Et,[ut(t("textarea",{"onUpdate:modelValue":f[4]||(f[4]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full resize-y",disabled:e(p),placeholder:`请输入您的 API Keys,支持以下格式: -cr_xxx -cr_yyy -或 -cr_xxx, cr_yyy`,rows:"4",onKeyup:f[5]||(f[5]=mt(vt((...T)=>e(x)&&e(x)(...T),["ctrl"]),["enter"]))},null,40,Ft),[[ct,e(s)]]),e(s)&&!e(p)?(l(),n("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:f[6]||(f[6]=(...T)=>e(m)&&e(m)(...T))},f[12]||(f[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):K("",!0)])):ut((l(),n("input",{key:0,"onUpdate:modelValue":f[2]||(f[2]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full",disabled:e(p),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:f[3]||(f[3]=mt((...T)=>e(x)&&e(x)(...T),["enter"]))},null,40,Ot)),[[ct,e(s)]])]),t("div",Wt,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(p)||!_.value,onClick:f[7]||(f[7]=(...T)=>e(x)&&e(x)(...T))},[e(p)?(l(),n("i",Vt)):(l(),n("i",zt)),b(" "+r(e(p)?"查询中...":"查询统计"),1)],8,Bt)])]),t("div",Jt,[f[13]||(f[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),b(" "+r(e(d)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(d)?(l(),n("div",Yt,f[14]||(f[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):K("",!0)])]))}},Gt=st(Ht,[["__scopeId","data-v-11e74200"]]),Qt={class:"space-y-6 md:space-y-8"},Xt={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Zt={class:"card-section"},te={class:"section-header"},ee={class:"header-title"},se={key:0,class:"info-grid"},ae={class:"info-item"},re={class:"info-value"},le={class:"info-item"},ie={class:"info-value text-green-600 dark:text-emerald-400"},oe={key:0,class:"info-item"},ne={class:"info-value text-red-500 dark:text-red-400"},de={class:"info-item"},ue={class:"info-value"},ce={class:"info-item"},me={class:"info-value"},ge={class:"info-item"},xe={class:"info-value text-indigo-600 dark:text-indigo-300"},fe={key:1,class:"info-item xl:col-span-2"},ye={class:"space-y-2"},pe={class:"truncate"},ve={class:"font-semibold"},be={key:1,class:"info-grid"},ke={class:"info-item"},he={class:"info-value break-all"},_e={class:"info-item"},we={class:"info-item"},$e={class:"info-value"},Se={class:"info-item"},Ce={class:"info-value break-all"},Te={class:"info-item xl:col-span-2"},Ke={class:"info-value"},Ae={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},Le={key:0,class:"text-red-500 dark:text-red-400"},Pe={key:1,class:"text-orange-500 dark:text-orange-400"},Ie={key:2},Me={key:2,class:"text-gray-400 dark:text-gray-500"},De={class:"card-section"},qe={class:"section-header"},je={class:"header-tag"},Ue={class:"metric-grid"},Re={class:"metric-card"},Ne={class:"metric-value text-green-600 dark:text-emerald-300"},Oe={class:"metric-label"},Ee={class:"metric-card"},Fe={class:"metric-value text-blue-600 dark:text-sky-300"},We={class:"metric-label"},Be={class:"metric-card"},Ve={class:"metric-value text-purple-600 dark:text-violet-300"},ze={class:"metric-label"},Je={class:"metric-card"},Ye={class:"metric-value text-amber-500 dark:text-amber-300"},He={class:"metric-label"},Ge={key:0,class:"card-section"},Qe={class:"flex items-center justify-between gap-3"},Xe={class:"flex items-center gap-3"},Ze={class:"account-name"},ts={class:"account-sub"},es={key:0,class:"mt-3 space-y-2"},ss={class:"progress-row"},as={class:"progress-track"},rs={class:"progress-value"},ls={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},is={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},os={key:1,class:"mt-3"},ns={key:0,class:"space-y-2"},ds={class:"quota-header"},us={class:"quota-percent"},cs={class:"progress-track"},ms={class:"quota-foot"},gs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},xs={__name:"StatsOverview",setup(N){const v=at(),{statsData:s,statsPeriod:p,currentPeriodData:d,multiKeyMode:x,aggregatedStats:m,individualStats:y,invalidKeys:_}=et(v),A=j(()=>!y.value||y.value.length===0?[]:[...y.value].sort((o,a)=>{var g,C;return(((g=a.usage)==null?void 0:g.allTokens)||0)-(((C=o.usage)==null?void 0:C.allTokens)||0)}).slice(0,3)),f=o=>{var g;return!m.value||!m.value.usage.allTokens?0:((((g=o.usage)==null?void 0:g.allTokens)||0)/m.value.usage.allTokens*100).toFixed(1)},T=o=>{if(!o)return"无";try{return Tt(o).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},O=o=>o?new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",w=o=>o?new Date(o){if(!o)return!1;const C=(new Date(o)-new Date)/(1e3*60*60*24);return C>0&&C<=7},u=o=>(typeof o!="number"&&(o=parseInt(o)||0),o===0?"0":o>=1e6?(o/1e6).toFixed(1)+"M":o>=1e3?(o/1e3).toFixed(1)+"K":o.toLocaleString()),i=o=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[o]||o||"未知",I=j(()=>{var g,C;const o=(C=(g=s.value)==null?void 0:g.accounts)==null?void 0:C.details;if(!o)return[];const a=[];return o.claude&&o.claude.accountType==="dedicated"&&a.push({key:"claude",...o.claude}),o.openai&&o.openai.accountType==="dedicated"&&a.push({key:"openai",...o.openai}),a}),E=j(()=>{const o=I.value.length;return o<=1?"md:grid-cols-1 lg:grid-cols-1":o===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),H=o=>o?o.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",V=o=>{if(!o||o<=0)return"";const a=Math.floor(o),g=Math.floor(a/1440),C=Math.floor(a%1440/60),R=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:`${R}分钟`},W=o=>{if(!o)return{text:"状态未知",class:"text-gray-400"};if(o.isRateLimited){const a=V(o.minutesRemaining);return{text:`限流中${a?` · 剩余约 ${a}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},B=(o,a)=>{if(!o||!a)return"暂无时间窗口信息";const g=new Date(o),C=new Date(a),R=c=>`${`${c.getHours()}`.padStart(2,"0")}:${`${c.getMinutes()}`.padStart(2,"0")}`;return`${R(g)} - ${R(C)}`},D=o=>{if(!o||o<=0)return"";const a=Math.floor(o/60),g=o%60;return a>0?`${a}小时${g}分钟`:`${g}分钟`},$=(o,a)=>{var C;if(!o)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((C=a==null?void 0:a.rateLimitStatus)!=null&&C.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const g=String(o).toLowerCase();return g==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":g==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},U=o=>{if(!o)return null;const a=typeof o.usedPercent=="number"&&!Number.isNaN(o.usedPercent)?o.usedPercent:null,g=typeof o.resetAfterSeconds=="number"&&!Number.isNaN(o.resetAfterSeconds)?o.resetAfterSeconds:null,C=typeof o.remainingSeconds=="number"?o.remainingSeconds:null,R=o.resetAt?Date.parse(o.resetAt):null;return g!==null&&(C!==null&&C<=0||R!==null&&!Number.isNaN(R)&&Date.now()>=R)?0:a===null?null:Math.max(0,Math.min(100,a))},S=o=>{const a=U(o);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},G=o=>{const a=U(o);return a===null?"0%":`${a}%`},z=o=>{const a=U(o);return a===null?"--":`${a.toFixed(1)}%`},Y=o=>{if(!o)return"--";let a=o.remainingSeconds;if(a==null&&(a=o.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const g=Math.floor(a/86400),C=Math.floor(a%86400/3600),R=Math.floor(a%3600/60),c=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:R>0?`${R}分钟`:`${c}秒`},rt=o=>o==="secondary"?"周限":"5h";return(o,a)=>(l(),n("div",Qt,[t("div",Xt,[t("div",Zt,[t("header",te,[t("i",{class:P(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",ee,r(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(m)?(l(),n("div",se,[t("div",ae,[a[0]||(a[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",re,r(e(m).totalKeys)+" 个",1)]),t("div",le,[a[2]||(a[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ie,[a[1]||(a[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),b(r(e(m).activeKeys)+" 个 ",1)])]),e(_).length>0?(l(),n("div",oe,[a[4]||(a[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",ne,[a[3]||(a[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),b(r(e(_).length)+" 个 ",1)])])):K("",!0),t("div",de,[a[5]||(a[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",ue,r(u(e(m).usage.requests)),1)]),t("div",ce,[a[6]||(a[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",me,r(u(e(m).usage.allTokens)),1)]),t("div",ge,[a[7]||(a[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",xe,r(e(m).usage.formattedCost),1)]),e(y).length>1?(l(),n("div",fe,[a[8]||(a[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",ye,[(l(!0),n(Z,null,tt(A.value,g=>(l(),n("div",{key:g.apiId,class:"contributor-item"},[t("span",pe,r(g.name),1),t("span",ve,r(f(g))+"%",1)]))),128))])])):K("",!0)])):(l(),n("div",be,[t("div",ke,[a[9]||(a[9]=t("p",{class:"info-label"},"名称",-1)),t("p",he,r(e(s).name),1)]),t("div",_e,[a[10]||(a[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:P(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:P(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),b(" "+r(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",we,[a[11]||(a[11]=t("p",{class:"info-label"},"权限",-1)),t("p",$e,r(i(e(s).permissions)),1)]),t("div",Se,[a[12]||(a[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ce,r(T(e(s).createdAt)),1)]),t("div",Te,[a[17]||(a[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ke,[e(s).expirationMode==="activation"&&!e(s).isActivated?(l(),n(Z,{key:0},[a[13]||(a[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),b("未激活 ")],-1)),t("span",Ae," 首次使用后 "+r(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+r(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(l(),n(Z,{key:1},[w(e(s).expiresAt)?(l(),n("span",Le,a[14]||(a[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),b("已过期 ",-1)]))):h(e(s).expiresAt)?(l(),n("span",Pe,[a[15]||(a[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),b(r(O(e(s).expiresAt)),1)])):(l(),n("span",Ie,r(O(e(s).expiresAt)),1))],64)):(l(),n("span",Me,a[16]||(a[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),b("永不过期 ",-1)])))])])]))]),t("div",De,[t("header",qe,[a[18]||(a[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),a[19]||(a[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",je,r(e(p)==="daily"?"今日":"本月"),1)]),t("div",Ue,[t("div",Re,[t("p",Ne,r(u(e(d).requests)),1),t("p",Oe,r(e(p)==="daily"?"今日":"本月")+"请求数",1)]),t("div",Ee,[t("p",Fe,r(u(e(d).allTokens)),1),t("p",We,r(e(p)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",Be,[t("p",Ve,r(e(d).formattedCost||"$0.000000"),1),t("p",ze,r(e(p)==="daily"?"今日":"本月")+"费用",1)]),t("div",Je,[t("p",Ye,r(u(e(d).inputTokens)),1),t("p",He,r(e(p)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&I.value.length>0?(l(),n("div",Ge,[a[21]||(a[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:P(["grid grid-cols-1 gap-4",E.value])},[(l(!0),n(Z,null,tt(I.value,g=>{var C,R,c,k,L,F;return l(),n("div",{key:g.id||g.key,class:"account-card"},[t("div",Qe,[t("div",Xe,[t("span",{class:P(["account-icon",g.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:P(g.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",Ze,r(H(g)),1),t("p",ts,r(g.platform==="claude"?"会话窗口":"额度窗口"),1)])]),W(g.rateLimitStatus)?(l(),n("div",{key:0,class:P(["rate-badge",W(g.rateLimitStatus).class])},[a[20]||(a[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),b(" "+r(W(g.rateLimitStatus).text),1)],2)):K("",!0)]),g.platform==="claude"?(l(),n("div",es,[t("div",ss,[t("div",as,[t("div",{class:P(["progress-bar",$((C=g.sessionWindow)==null?void 0:C.sessionWindowStatus,g)]),style:lt({width:`${Math.min(100,Math.max(0,((R=g.sessionWindow)==null?void 0:R.progress)||0))}%`})},null,6)]),t("span",rs,r(Math.min(100,Math.max(0,Math.round(((c=g.sessionWindow)==null?void 0:c.progress)||0))))+"% ",1)]),t("div",ls,[t("span",null,r(B((k=g.sessionWindow)==null?void 0:k.windowStart,(L=g.sessionWindow)==null?void 0:L.windowEnd)),1),((F=g.sessionWindow)==null?void 0:F.remainingTime)>0?(l(),n("span",is," 剩余 "+r(D(g.sessionWindow.remainingTime)),1)):K("",!0)])])):g.platform==="openai"?(l(),n("div",os,[g.codexUsage?(l(),n("div",ns,[(l(),n(Z,null,tt(["primary","secondary"],q=>{var J,it,nt,dt;return t("div",{key:`${g.key}-${q}`,class:"quota-row"},[t("div",ds,[t("span",{class:P(["quota-tag",q==="primary"?"tag-indigo":"tag-blue"])},r(rt(q)),3),t("span",us,r(z((J=g.codexUsage)==null?void 0:J[q])),1)]),t("div",cs,[t("div",{class:P(["progress-bar",S((it=g.codexUsage)==null?void 0:it[q])]),style:lt({width:G((nt=g.codexUsage)==null?void 0:nt[q])})},null,6)]),t("div",ms," 重置剩余 "+r(Y((dt=g.codexUsage)==null?void 0:dt[q])),1)])}),64))])):(l(),n("p",gs," 暂无额度使用数据 "))])):K("",!0)])}),128))],2)])):K("",!0)]))}},fs=st(xs,[["__scopeId","data-v-b72df2cd"]]),ys={class:"card p-4 md:p-6"},ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},vs={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},bs={class:"space-y-2 md:space-y-3"},ks={class:"flex items-center justify-between"},hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},_s={class:"flex items-center justify-between"},ws={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},$s={class:"flex items-center justify-between"},Ss={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Cs={class:"flex items-center justify-between"},Ts={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Ks={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},As={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ls={class:"text-sm md:text-base"},Ps={class:"text-lg md:text-xl"},Is={__name:"TokenDistribution",setup(N){const v=at(),{statsPeriod:s,currentPeriodData:p}=et(v),d=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,m)=>(l(),n("div",ys,[t("h3",ps,[m[0]||(m[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),b(" Token 使用分布 ")],-1)),t("span",vs,"("+r(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",bs,[t("div",ks,[m[1]||(m[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),b(" 输入 Token ")],-1)),t("span",hs,r(d(e(p).inputTokens)),1)]),t("div",_s,[m[2]||(m[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),b(" 输出 Token ")],-1)),t("span",ws,r(d(e(p).outputTokens)),1)]),t("div",$s,[m[3]||(m[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),b(" 缓存创建 Token ")],-1)),t("span",Ss,r(d(e(p).cacheCreateTokens)),1)]),t("div",Cs,[m[4]||(m[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),b(" 缓存读取 Token ")],-1)),t("span",Ts,r(d(e(p).cacheReadTokens)),1)])]),t("div",Ks,[t("div",As,[t("span",Ls,r(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Ps,r(d(e(p).allTokens)),1)])])]))}},Ms=st(Is,[["__scopeId","data-v-d9e5c1dd"]]),Ds={class:"flex h-full flex-col gap-4 md:gap-6"},qs={class:"card flex h-full flex-col p-4 md:p-6"},js={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Us={key:0,class:"space-y-4"},Rs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Ns={class:"mb-3 flex items-center justify-between"},Os={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},Es={class:"grid grid-cols-2 gap-3"},Fs={class:"text-center"},Ws={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Bs={class:"text-center"},Vs={class:"text-lg font-bold text-green-600"},zs={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Js={class:"space-y-2"},Ys={class:"flex items-center justify-between"},Hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Gs={class:"flex items-center justify-between"},Qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Xs={class:"flex items-center justify-between"},Zs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ta={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},ea={class:"text-red-700 dark:text-red-300"},sa={key:1,class:"space-y-4 md:space-y-5"},aa={class:"mb-2 flex items-center justify-between"},ra={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},la={key:0},ia={key:1,class:"flex items-center gap-1"},oa={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},na={key:1,class:"h-2 w-full rounded-full bg-gray-200"},da={class:"mb-2 flex items-center justify-between"},ua={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ca={key:0},ma={key:1,class:"flex items-center gap-1"},ga={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},xa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},fa={key:0},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},va={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ba={key:1},ka={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ha={key:0},_a={key:1},wa={key:2},$a={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},Sa={class:"flex items-center justify-between"},Ca={class:"text-sm font-medium text-gray-900 md:text-base"},Ta={key:0},Ka={key:1,class:"flex items-center gap-1"},Aa={class:"flex items-center justify-between"},La={class:"text-sm font-medium text-gray-900 md:text-base"},Pa={key:0,class:"text-orange-600"},Ia={key:1,class:"text-green-600"},Ma={class:"space-y-2"},Da={class:"flex items-center justify-between"},qa={class:"text-sm font-medium text-gray-900 md:text-base"},ja={key:0,class:"text-orange-600"},Ua={key:1,class:"text-green-600"},Ra={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Na={key:0,class:"card !overflow-visible p-4 md:p-6"},Oa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},Ea={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},Fa={class:"break-all text-gray-800 dark:text-gray-200"},Wa={__name:"LimitConfig",setup(N){const v=at(),{statsData:s,multiKeyMode:p,aggregatedStats:d,invalidKeys:x}=et(v),m=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableModelRestriction===!0&&Array.isArray(u.restrictedModels)&&u.restrictedModels.length>0:!1}),y=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableClientRestriction===!0&&Array.isArray(u.allowedClients)&&u.allowedClients.length>0:!1}),_=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const u=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(u,100)},A=()=>{const u=_();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const u=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(u,100)},T=()=>{const u=f();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-blue-500"},O=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const u=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(u,100)},w=()=>{const u=O();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-indigo-500"},h=u=>(typeof u!="number"&&(u=parseInt(u)||0),u===0?"0":u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toLocaleString());return(u,i)=>(l(),n("div",Ds,[t("div",qs,[t("h3",js,[i[0]||(i[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),b(" "+r(e(p)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(p)&&e(d)?(l(),n("div",Us,[t("div",Rs,[t("div",Ns,[i[1]||(i[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),b(" API Keys 概况 ")],-1)),t("span",Os,r(e(d).activeKeys)+"/"+r(e(d).totalKeys),1)]),t("div",Es,[t("div",Fs,[t("div",Ws,r(e(d).totalKeys),1),i[2]||(i[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",Bs,[t("div",Vs,r(e(d).activeKeys),1),i[3]||(i[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",zs,[i[7]||(i[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",Js,[t("div",Ys,[i[4]||(i[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),b(" 总请求数 ")],-1)),t("span",Hs,r(h(e(d).usage.requests)),1)]),t("div",Gs,[i[5]||(i[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),b(" 总 Tokens ")],-1)),t("span",Qs,r(h(e(d).usage.allTokens)),1)]),t("div",Xs,[i[6]||(i[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),b(" 总费用 ")],-1)),t("span",Zs,r(e(d).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(l(),n("div",ta,[i[8]||(i[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",ea,r(e(x).length)+" 个无效的 API Key ",1)])):K("",!0),i[9]||(i[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):K("",!0),e(p)?K("",!0):(l(),n("div",sa,[t("div",null,[t("div",aa,[i[11]||(i[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",ra,[e(s).limits.dailyCostLimit>0?(l(),n("span",la," $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / $"+r(e(s).limits.dailyCostLimit.toFixed(2)),1)):(l(),n("span",ia,[b(" $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),i[10]||(i[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(l(),n("div",oa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:_()+"%"})},null,6)])):(l(),n("div",na,i[12]||(i[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",da,[i[14]||(i[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",ua,[e(s).limits.totalCostLimit>0?(l(),n("span",ca," $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / $"+r(e(s).limits.totalCostLimit.toFixed(2)),1)):(l(),n("span",ma,[b(" $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),i[13]||(i[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(l(),n("div",ga,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T()]),style:lt({width:f()+"%"})},null,6)])):(l(),n("div",xa,i[15]||(i[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(l(),n("div",fa,[t("div",ya,[i[16]||(i[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Opus 模型周费用限制",-1)),t("span",pa," $"+r(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+r(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",va,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",w()]),style:lt({width:O()+"%"})},null,6)])])):K("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(l(),n("div",ba,[X(Kt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",ka,[i[17]||(i[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(l(),n("span",ha,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(l(),n("span",_a,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(l(),n("span",wa," 仅限制请求次数 "))])])):K("",!0),t("div",$a,[t("div",Sa,[i[19]||(i[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ca,[e(s).limits.concurrencyLimit>0?(l(),n("span",Ta,r(e(s).limits.concurrencyLimit),1)):(l(),n("span",Ka,i[18]||(i[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Aa,[i[22]||(i[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",La,[m.value?(l(),n("span",Pa,[i[20]||(i[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限制 "+r(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(l(),n("span",Ia,i[21]||(i[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有模型 ",-1)])))])]),t("div",Ma,[t("div",Da,[i[25]||(i[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",qa,[y.value?(l(),n("span",ja,[i[23]||(i[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限 "+r(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(l(),n("span",Ua,i[24]||(i[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有客户端 ",-1)])))])]),y.value?(l(),n("div",Ra,[(l(!0),n(Z,null,tt(e(s).restrictions.allowedClients,I=>(l(),n("span",{key:I,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[i[26]||(i[26]=t("i",{class:"fas fa-id-badge"},null,-1)),b(" "+r(I),1)]))),128))])):K("",!0)])])]))]),m.value?(l(),n("div",Na,[i[30]||(i[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),b(" 详细限制信息 ")],-1)),t("div",Oa,[i[28]||(i[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),b(" 受限模型列表 ")],-1)),t("div",Ea,[(l(!0),n(Z,null,tt(e(s).restrictions.restrictedModels,I=>(l(),n("div",{key:I,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[i[27]||(i[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Fa,r(I),1)]))),128))]),i[29]||(i[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):K("",!0)]))}},Ba=st(Wa,[["__scopeId","data-v-9bba2ba4"]]),Va={class:"card h-full p-4 md:p-6"},za={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ja={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ya={key:0,class:"space-y-2 md:space-y-3"},Ha={class:"mb-1 flex items-center justify-between text-sm"},Ga={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Qa={class:"text-xs text-gray-600 dark:text-gray-400"},Xa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Za={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},tr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},er={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},sr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},ar={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},rr={__name:"AggregatedStatsCard",setup(N){const v=at(),{aggregatedStats:s,individualStats:p,statsPeriod:d,multiKeyMode:x}=et(v),m=w=>w?d.value==="daily"?w.dailyUsage||w.usage:w.monthlyUsage||w.usage:null,y=j(()=>!p.value||p.value.length===0?[]:[...p.value].sort((w,h)=>{const u=m(w),i=m(h);return((i==null?void 0:i.cost)||0)-((u==null?void 0:u.cost)||0)}).slice(0,5)),_=j(()=>p.value?Math.max(0,p.value.length-5):0),A=j(()=>{var i,I;if(!p.value||!s.value)return 0;const w=y.value.reduce((E,H)=>{const V=m(H);return E+((V==null?void 0:V.cost)||0)},0),h=d.value==="daily"?((i=s.value.dailyUsage)==null?void 0:i.cost)||0:((I=s.value.monthlyUsage)==null?void 0:I.cost)||0;if(h===0)return 0;const u=h-w;return Math.max(0,Math.round(u/h*100))}),f=w=>{var I,E;if(!s.value)return 0;const h=d.value==="daily"?((I=s.value.dailyUsage)==null?void 0:I.cost)||0:((E=s.value.monthlyUsage)==null?void 0:E.cost)||0;if(h===0)return 0;const u=m(w),i=((u==null?void 0:u.cost)||0)/h*100;return Math.round(i)},T=w=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][w]||"bg-gray-400",O=w=>(typeof w!="number"&&(w=parseInt(w)||0),w===0?"0":w>=1e6?(w/1e6).toFixed(1)+"M":w>=1e3?(w/1e3).toFixed(1)+"K":w.toLocaleString());return(w,h)=>(l(),n("div",Va,[t("h3",za,[h[0]||(h[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),b(" 使用占比 ")],-1)),t("span",Ja,"("+r(e(d)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(p).length>0?(l(),n("div",Ya,[(l(!0),n(Z,null,tt(y.value,(u,i)=>{var I,E;return l(),n("div",{key:u.apiId,class:"relative"},[t("div",Ha,[t("span",Ga,r(u.name||`Key ${i+1}`),1),t("span",Qa,r(f(u))+"% ",1)]),t("div",Xa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T(i)]),style:lt({width:f(u)+"%"})},null,6)]),t("div",Za,[t("span",null,r(O(((I=m(u))==null?void 0:I.requests)||0))+"次",1),t("span",null,r(((E=m(u))==null?void 0:E.formattedCost)||"$0.00"),1)])])}),128)),_.value>0?(l(),n("div",tr,[t("div",er,[t("span",null,"其他 "+r(_.value)+" 个Keys",1),t("span",null,r(A.value)+"%",1)])])):K("",!0)])):e(x)?(l(),n("div",ar,h[2]||(h[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),b(" 暂无数据 ",-1)]))):(l(),n("div",sr,h[1]||(h[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},lr=st(rr,[["__scopeId","data-v-39572a8e"]]),ir={class:"card p-4 md:p-6"},or={class:"mb-4 md:mb-6"},nr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},dr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},ur={key:0,class:"py-6 text-center md:py-8"},cr={key:1,class:"space-y-3 md:space-y-4"},mr={class:"mb-2 flex items-start justify-between md:mb-3"},gr={class:"min-w-0 flex-1"},xr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},fr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},yr={class:"ml-3 flex-shrink-0 text-right"},pr={class:"text-base font-bold text-green-600 md:text-lg"},vr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},br={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},kr={class:"font-medium text-gray-900 dark:text-gray-100"},hr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},_r={class:"font-medium text-gray-900 dark:text-gray-100"},wr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},$r={class:"font-medium text-gray-900 dark:text-gray-100"},Sr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Cr={class:"font-medium text-gray-900 dark:text-gray-100"},Tr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Kr={class:"text-sm md:text-base"},Ar={__name:"ModelUsageStats",setup(N){const v=at(),{statsPeriod:s,modelStats:p,modelStatsLoading:d}=et(v),x=m=>(typeof m!="number"&&(m=parseInt(m)||0),m===0?"0":m>=1e6?(m/1e6).toFixed(1)+"M":m>=1e3?(m/1e3).toFixed(1)+"K":m.toLocaleString());return(m,y)=>(l(),n("div",ir,[t("div",or,[t("h3",nr,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),b(" 模型使用统计 ")],-1)),t("span",dr,"("+r(e(s)==="daily"?"今日":"本月")+")",1)])]),e(d)?(l(),n("div",ur,y[1]||(y[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(p).length>0?(l(),n("div",cr,[(l(!0),n(Z,null,tt(e(p),(_,A)=>{var f;return l(),n("div",{key:A,class:"model-usage-item"},[t("div",mr,[t("div",gr,[t("h4",xr,r(_.model),1),t("p",fr,r(_.requests)+" 次请求 ",1)]),t("div",yr,[t("div",pr,r(((f=_.formatted)==null?void 0:f.total)||"$0.000000"),1),y[2]||(y[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",vr,[t("div",br,[y[3]||(y[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",kr,r(x(_.inputTokens)),1)]),t("div",hr,[y[4]||(y[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",_r,r(x(_.outputTokens)),1)]),t("div",wr,[y[5]||(y[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",$r,r(x(_.cacheCreateTokens)),1)]),t("div",Sr,[y[6]||(y[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Cr,r(x(_.cacheReadTokens)),1)])])])}),128))])):(l(),n("div",Tr,[y[7]||(y[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Kr," 暂无"+r(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Lr=st(Ar,[["__scopeId","data-v-b3b8dc5f"]]),Pr={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ir={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Mr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Dr={class:"flex items-center gap-3"},qr={class:"text-xs text-gray-500 dark:text-gray-400"},jr=["disabled"],Ur={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Rr={class:"mb-4"},Nr={class:"relative"},Or=["value"],Er={class:"mb-4 space-y-2"},Fr={class:"flex items-center justify-between text-sm"},Wr={class:"font-medium text-gray-700 dark:text-gray-300"},Br={class:"flex items-center gap-3"},Vr={class:"text-xs text-gray-500 dark:text-gray-400"},zr={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Jr={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Yr={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Hr={class:"max-h-40 overflow-y-auto p-3"},Gr={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Qr={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Xr={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Zr={key:2,class:"text-sm text-red-600 dark:text-red-400"},tl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},el={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},sl=["disabled"],al=["disabled"],rl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(N,{emit:v}){const s=N,p=v,d=M("idle"),x=M(""),m=M(""),y=M(0),_=M(null),A=M(null),f=M("claude-sonnet-4-5-20250929"),T=j(()=>s.apiKeyName||"当前 API Key"),O=j(()=>{const D=s.apiKeyValue;return D?D.length<=10?"****":D.substring(0,6)+"****"+D.substring(D.length-4):""}),w=j(()=>{switch(d.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),h=j(()=>{switch(d.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return m.value||"无法通过 API Key 访问服务";default:return""}}),u=j(()=>{switch(d.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),i=j(()=>{switch(d.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),I=j(()=>{switch(d.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),E=j(()=>{switch(d.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),H=j(()=>{switch(d.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function V(){if(!s.apiKeyValue)return;d.value="testing",x.value="",m.value="",y.value=0,_.value=Date.now(),A.value&&A.value.abort(),A.value=new AbortController;const D=`${wt}/apiStats/api-key/test`;try{const $=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:f.value}),signal:A.value.signal});if(!$.ok){const z=await $.json().catch(()=>({}));throw new Error(z.message||z.error||`HTTP ${$.status}`)}const U=$.body.getReader(),S=new TextDecoder;let G=!1;for(;!G;){const{done:z,value:Y}=await U.read();if(z){G=!0;continue}const o=S.decode(Y).split(` -`);for(const a of o)if(a.startsWith("data: "))try{const g=JSON.parse(a.substring(6));W(g)}catch{}}}catch($){if($.name==="AbortError")return;d.value="error",m.value=$.message||"连接失败",y.value=Date.now()-_.value}}function W(D){switch(D.type){case"test_start":break;case"content":x.value+=D.text;break;case"message_stop":break;case"test_complete":y.value=Date.now()-_.value,D.success?d.value="success":(d.value="error",m.value=D.error||"测试失败");break;case"error":d.value="error",m.value=D.error||"未知错误",y.value=Date.now()-_.value;break}}function B(){d.value!=="testing"&&(A.value&&(A.value.abort(),A.value=null),d.value="idle",x.value="",m.value="",y.value=0,p("close"))}return ft(()=>s.show,D=>{D&&(d.value="idle",x.value="",m.value="",y.value=0)}),yt(()=>{A.value&&A.value.abort()}),(D,$)=>(l(),ot(bt,{to:"body"},[N.show?(l(),n("div",Pr,[t("div",{class:"absolute inset-0",onClick:B}),t("div",Ir,[t("div",Mr,[t("div",Dr,[t("div",{class:P(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",d.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":d.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:P(["fas",d.value==="idle"?"fa-vial":d.value==="testing"?"fa-spinner fa-spin":d.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[$[0]||($[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",qr,r(T.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:d.value==="testing",onClick:B},$[1]||($[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,jr)]),t("div",Ur,[t("div",Rr,[$[3]||($[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Nr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:O.value},null,8,Or),$[2]||($[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),$[4]||($[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",Er,[$[6]||($[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),b(" /api/v1/messages ")])],-1)),t("div",Fr,[$[5]||($[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",Wr,r(f.value),1)]),$[7]||($[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:P(["mb-4 rounded-xl border p-4 transition-all duration-300",u.value])},[t("div",Br,[t("div",{class:P(["flex h-8 w-8 items-center justify-center rounded-lg",i.value])},[t("i",{class:P(["fas text-sm",I.value,E.value])},null,2)],2),t("div",null,[t("p",{class:P(["font-medium",H.value])},r(w.value),3),t("p",Vr,r(h.value),1)])])],2),d.value!=="idle"?(l(),n("div",zr,[t("div",Jr,[$[8]||($[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(l(),n("span",Yr,r(x.value.length)+" 字符 ",1)):K("",!0)]),t("div",Hr,[x.value?(l(),n("p",Gr,[b(r(x.value)+" ",1),d.value==="testing"?(l(),n("span",Qr)):K("",!0)])):d.value==="testing"?(l(),n("p",Xr,$[9]||($[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),b(" 等待响应中... ",-1)]))):d.value==="error"&&m.value?(l(),n("p",Zr,r(m.value),1)):K("",!0)])])):K("",!0),y.value>0?(l(),n("div",tl,[$[10]||($[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+r((y.value/1e3).toFixed(2))+" 秒",1)])):K("",!0)]),t("div",el,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:d.value==="testing",onClick:B}," 关闭 ",8,sl),t("button",{class:P(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",d.value==="testing"||!N.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:d.value==="testing"||!N.apiKeyValue,onClick:V},[t("i",{class:P(["fas",d.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),b(" "+r(d.value==="testing"?"测试中...":d.value==="idle"?"开始测试":"重新测试"),1)],10,al)])])])):K("",!0)]))}},ll={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},il={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},ol={class:"flex items-center gap-2 md:gap-4"},nl={class:"flex items-center"},dl={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ul={class:"mb-6 md:mb-8"},cl={class:"flex justify-center"},ml={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},gl={key:0,class:"tab-content"},xl={key:0,class:"mb-6 md:mb-8"},fl={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},yl={key:1,class:"fade-in"},pl={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},vl={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},bl={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},kl={class:"flex w-full items-center gap-2 md:w-auto"},hl=["disabled"],_l=["disabled"],wl=["disabled"],$l={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},Sl={key:1,class:"tab-content"},Cl={class:"glass-strong rounded-3xl shadow-xl"},Tl={__name:"ApiStatsView",setup(N){const v=ht(),s=at(),p=$t(),d=M("stats"),x=j(()=>p.isDarkMode),{apiKey:m,apiId:y,loading:_,modelStatsLoading:A,oemLoading:f,error:T,statsPeriod:O,statsData:w,oemSettings:h,multiKeyMode:u}=et(s),{queryStats:i,switchPeriod:I,loadStatsWithApiId:E,loadOemSettings:H,reset:V}=s,W=M(!1),B=()=>{W.value=!0},D=()=>{W.value=!1},$=U=>{(U.ctrlKey||U.metaKey)&&U.key==="Enter"&&(!_.value&&m.value.trim()&&i(),U.preventDefault()),U.key==="Escape"&&V()};return kt(()=>{p.initTheme(),H();const U=v.query.apiId,S=v.query.apiKey;U&&U.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(y.value=U,E()):S&&S.length>10&&(m.value=S),document.addEventListener("keydown",$)}),yt(()=>{document.removeEventListener("keydown",$)}),ft(m,U=>{U||s.clearData()}),(U,S)=>{var z;const G=_t("router-link");return l(),n("div",{class:P(["min-h-screen p-4 md:p-6",x.value?"gradient-bg-dark":"gradient-bg"])},[t("div",ll,[t("div",il,[X(St,{loading:e(f),"logo-src":e(h).siteIconData||e(h).siteIcon,subtitle:d.value==="stats"?"API Key 使用统计":"使用教程",title:e(h).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",ol,[t("div",nl,[X(Ct,{mode:"dropdown"})]),e(h).ldapEnabled||e(h).showAdminButton!==!1?(l(),n("div",dl)):K("",!0),e(h).ldapEnabled?(l(),ot(G,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:xt(()=>S[4]||(S[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):K("",!0),e(h).showAdminButton!==!1?(l(),ot(G,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:xt(()=>S[5]||(S[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):K("",!0)])])]),t("div",ul,[t("div",cl,[t("div",ml,[t("button",{class:P(["tab-pill-button",d.value==="stats"?"active":""]),onClick:S[0]||(S[0]=Y=>d.value="stats")},S[6]||(S[6]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:P(["tab-pill-button",d.value==="tutorial"?"active":""]),onClick:S[1]||(S[1]=Y=>d.value="tutorial")},S[7]||(S[7]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),d.value==="stats"?(l(),n("div",gl,[X(Gt),e(T)?(l(),n("div",xl,[t("div",fl,[S[8]||(S[8]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),b(" "+r(e(T)),1)])])):K("",!0),e(w)?(l(),n("div",yl,[t("div",pl,[t("div",vl,[t("div",bl,[S[12]||(S[12]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",kl,[t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="daily"}]]),disabled:e(_)||e(A),onClick:S[2]||(S[2]=Y=>e(I)("daily"))},S[9]||(S[9]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),b(" 今日 ",-1)]),10,hl),t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="monthly"}]]),disabled:e(_)||e(A),onClick:S[3]||(S[3]=Y=>e(I)("monthly"))},S[10]||(S[10]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),b(" 本月 ",-1)]),10,_l),e(u)?K("",!0):(l(),n("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(_),onClick:B},S[11]||(S[11]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),b(" 测试 ",-1)]),8,wl))])])]),X(fs),t("div",$l,[X(Ms,{class:"h-full"}),e(u)?(l(),ot(lr,{key:0,class:"h-full"})):(l(),ot(Ba,{key:1,class:"h-full"}))]),X(Lr)])])):K("",!0)])):K("",!0),d.value==="tutorial"?(l(),n("div",Sl,[t("div",Cl,[X(At)])])):K("",!0),X(rl,{"api-key-name":((z=e(w))==null?void 0:z.name)||"","api-key-value":e(m),show:W.value,onClose:D},null,8,["api-key-name","api-key-value","show"])],2)}}},jl=st(Tl,[["__scopeId","data-v-c1f23841"]]);export{jl as default}; diff --git a/web/admin-spa/dist/assets/ApiStatsView-C428m7c6.js b/web/admin-spa/dist/assets/ApiStatsView-C428m7c6.js new file mode 100644 index 00000000..a7de56df --- /dev/null +++ b/web/admin-spa/dist/assets/ApiStatsView-C428m7c6.js @@ -0,0 +1,6 @@ +import{aP as bt,r as N,c as U,aX as at,x as o,y as r,z as t,O as w,L,P as i,u as e,C as O,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as et,B as lt,R as Y,o as xt,V as yt,I as ot,a5 as kt,aZ as ht,a_ as _t,q as wt,aW as $t,J as ft,av as St}from"./vue-vendor-BVUySZOn.js";import{_ as st,A as Ct,u as pt,a as Tt}from"./index-BAse2XU9.js";import{L as Kt}from"./LogoTitle-BKx-1OIz.js";import{T as At}from"./ThemeToggle-Btdau4yo.js";import{b as Pt}from"./vendor-Dr8jvgFu.js";import{_ as Lt}from"./WindowCountdown-Cb_iHkvc.js";import Mt from"./TutorialView-C0wjIk1C.js";import{C as It,a as Dt,b as Ot,P as jt,c as Rt,A as qt,p as Ut,d as Nt,e as Et,i as Ft}from"./chart-ChB167Jv.js";import"./element-plus-CKhypU-Q.js";class Wt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(f,s={}){try{this.isDev&&f.startsWith("/admin")&&(f="/webapi"+f);const k=await fetch(`${this.baseURL}${f}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),u=await k.json();if(!k.ok)throw new Error(u.message||`请求失败: ${k.status}`);return u}catch(k){throw console.error("API Stats request error:",k),k}}async getKeyId(f){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:f})})}async getUserStats(f){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:f})})}async getUserModelStats(f,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:f,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(f){return console.error("Failed to load OEM settings:",f),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(f){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:f})})}async getBatchModelStats(f,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:f,period:s})})}}const tt=new Wt,rt=bt("apistats",()=>{const W=N(""),f=N(null),s=N(!1),k=N(!1),u=N(!0),x=N(""),y=N("daily"),b=N(null),T=N([]),M=N(null),v=N(null),A=N({siteName:"",siteIcon:"",siteIconData:""}),B=N(!1),C=N([]),K=N([]),c=N(null),n=N([]),R=N([]),a=U(()=>{const g={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return B.value&&c.value?y.value==="daily"?c.value.dailyUsage||g:c.value.monthlyUsage||g:y.value==="daily"?M.value||g:v.value||g}),m=U(()=>{if(!b.value||!a.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const g=a.value,$=b.value.limits;return{tokenUsage:$.tokenLimit>0?Math.min(g.allTokens/$.tokenLimit*100,100):0,costUsage:$.dailyCostLimit>0?Math.min(g.cost/$.dailyCostLimit*100,100):0,requestUsage:$.rateLimitRequests>0?Math.min(g.requests/$.rateLimitRequests*100,100):0}});async function D(){if(B.value)return Q();const g=W.value.trim();if(!g){x.value="请输入 API Key";return}if(g.length<10||g.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",b.value=null,T.value=[],f.value=null;try{const $=await tt.getKeyId(g);if($.success){f.value=$.data.id;const q=await tt.getUserStats(f.value);if(q.success)b.value=q.data,await S(),x.value="",h();else throw new Error(q.message||"查询失败")}else throw new Error($.message||"获取 API Key ID 失败")}catch($){console.error("Query stats error:",$),x.value=$.message||"查询统计数据失败,请检查您的 API Key 是否正确",b.value=null,T.value=[],f.value=null}finally{s.value=!1}}async function S(){f.value&&(await Promise.all([j("daily"),j("monthly")]),await P(y.value))}async function j(g){try{const $=await tt.getUserModelStats(f.value,g);if($.success){const q=$.data||[],J={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};q.forEach(E=>{var G;J.requests+=E.requests||0,J.inputTokens+=E.inputTokens||0,J.outputTokens+=E.outputTokens||0,J.cacheCreateTokens+=E.cacheCreateTokens||0,J.cacheReadTokens+=E.cacheReadTokens||0,J.allTokens+=E.allTokens||0,J.cost+=((G=E.costs)==null?void 0:G.total)||0}),J.formattedCost=F(J.cost),g==="daily"?M.value=J:v.value=J}else console.warn(`Failed to load ${g} stats:`,$.message)}catch($){console.error(`Load ${g} stats error:`,$)}}async function P(g="daily"){if(f.value){k.value=!0;try{const $=await tt.getUserModelStats(f.value,g);if($.success)T.value=$.data||[];else throw new Error($.message||"加载模型统计失败")}catch($){console.error("Load model stats error:",$),T.value=[]}finally{k.value=!1}}}async function _(g){if(!(y.value===g||k.value)){if(y.value=g,B.value&&K.value.length>0){await X(g);return}(g==="daily"&&!M.value||g==="monthly"&&!v.value)&&await j(g),await P(g)}}async function z(){var g,$;if(f.value){s.value=!0,x.value="",b.value=null,T.value=[];try{const q=await tt.getUserStats(f.value);if(q.success)b.value=q.data,console.log("API Stats - Full response:",q.data),console.log("API Stats - limits data:",q.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(g=q.data.limits)==null?void 0:g.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",($=q.data.limits)==null?void 0:$.weeklyOpusCost),await S(),x.value="";else throw new Error(q.message||"查询失败")}catch(q){console.error("Load stats with apiId error:",q),x.value=q.message||"查询统计数据失败",b.value=null,T.value=[]}finally{s.value=!1}}}async function H(){u.value=!0;try{const g=await tt.getOemSettings();g&&g.success&&g.data&&(A.value={...A.value,...g.data})}catch(g){console.error("Error loading OEM settings:",g),A.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{u.value=!1}}function F(g){return typeof g!="number"||g===0?"$0.000000":g>=1?"$"+g.toFixed(2):g>=.01?"$"+g.toFixed(4):"$"+g.toFixed(6)}function h(){if(f.value){const g=new URL(window.location);g.searchParams.set("apiId",f.value),window.history.pushState({},"",g)}}async function Q(){const g=d();if(g.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",c.value=null,n.value=[],R.value=[],T.value=[],C.value=g,K.value=[];try{const $=await Promise.allSettled(g.map(G=>tt.getKeyId(G))),q=[],J=[];if($.forEach((G,it)=>{G.status==="fulfilled"&&G.value.success?(q.push(G.value.data.id),J.push(g[it])):R.value.push(g[it])}),q.length===0)throw new Error("所有 API Key 都无效");K.value=q,C.value=J;const E=await tt.getBatchStats(q);if(E.success)c.value=E.data.aggregated,n.value=E.data.individual,b.value=E.data.aggregated,M.value=E.data.aggregated.dailyUsage||null,v.value=E.data.aggregated.monthlyUsage||null,await X(y.value),l();else throw new Error(E.message||"批量查询失败")}catch($){console.error("Batch query error:",$),x.value=$.message||"批量查询统计数据失败",c.value=null,n.value=[]}finally{s.value=!1}}async function X(g="daily"){if(K.value.length!==0){k.value=!0;try{const $=await tt.getBatchModelStats(K.value,g);if($.success)T.value=$.data||[];else throw new Error($.message||"加载批量模型统计失败")}catch($){console.error("Load batch model stats error:",$),T.value=[]}finally{k.value=!1}}}function d(){if(!W.value)return[];const g=W.value.split(/[,\n]+/).map(q=>q.trim()).filter(q=>q.length>=10&&q.length<=512);return[...new Set(g)].slice(0,30)}function l(){if(K.value.length>0){const g=new URL(window.location);g.searchParams.set("apiIds",K.value.join(",")),g.searchParams.set("batch","true"),window.history.pushState({},"",g)}}function p(){W.value=""}function I(){b.value=null,T.value=[],M.value=null,v.value=null,x.value="",y.value="daily",f.value=null,C.value=[],K.value=[],c.value=null,n.value=[],R.value=[]}function V(){W.value="",B.value=!1,I()}return{apiKey:W,apiId:f,loading:s,modelStatsLoading:k,oemLoading:u,error:x,statsPeriod:y,statsData:b,modelStats:T,dailyStats:M,monthlyStats:v,oemSettings:A,multiKeyMode:B,apiKeys:C,apiIds:K,aggregatedStats:c,individualStats:n,invalidKeys:R,currentPeriodData:a,usagePercentages:m,queryStats:D,queryBatchStats:Q,loadAllPeriodStats:S,loadPeriodStats:j,loadModelStats:P,loadBatchModelStats:X,switchPeriod:_,loadStatsWithApiId:z,loadOemSettings:H,clearData:I,clearInput:p,reset:V}}),Bt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},Vt={class:"mx-auto max-w-4xl"},zt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Jt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ht={class:"button-group flex items-center gap-2"},Yt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Gt={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Zt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Qt={class:"lg:col-span-3"},Xt=["disabled"],te={key:1,class:"relative"},ee=["disabled"],se={class:"lg:col-span-1"},ae=["disabled"],re={key:0,class:"fas fa-spinner loading-spinner"},le={key:1,class:"fas fa-search"},ie={class:"security-notice mt-4"},oe={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},ne={__name:"ApiKeyInput",setup(W){const f=rt(),{apiKey:s,loading:k,multiKeyMode:u}=at(f),{queryStats:x,clearInput:y}=f,b=U(()=>{if(!u.value||!s.value)return[];const M=s.value.split(/[,\n]+/).map(A=>A.trim()).filter(A=>A.length>0);return[...new Set(M)].slice(0,30)}),T=U(()=>u.value?b.value.length>0:s.value&&s.value.trim().length>0);return(M,v)=>(r(),o("div",Bt,[v[15]||(v[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),w(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",Vt,[t("div",zt,[t("label",Jt,[v[8]||(v[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),w(" "+i(e(u)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",Ht,[t("div",Yt,[t("button",{class:O(["mode-switch-btn",{active:!e(u)}]),title:"单一模式",onClick:v[0]||(v[0]=A=>u.value=!1)},v[9]||(v[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:O(["mode-switch-btn",{active:e(u)}]),title:"聚合模式",onClick:v[1]||(v[1]=A=>u.value=!0)},[v[10]||(v[10]=t("i",{class:"fas fa-layer-group"},null,-1)),v[11]||(v[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(u)&&b.value.length>0?(r(),o("span",Gt,i(b.value.length),1)):L("",!0)],2)])])]),t("div",Zt,[t("div",Qt,[e(u)?(r(),o("div",te,[ut(t("textarea",{"onUpdate:modelValue":v[4]||(v[4]=A=>gt(s)?s.value=A:null),class:"wide-card-input w-full resize-y",disabled:e(k),placeholder:`请输入您的 API Keys,支持以下格式: +cr_xxx +cr_yyy +或 +cr_xxx, cr_yyy`,rows:"4",onKeyup:v[5]||(v[5]=mt(vt((...A)=>e(x)&&e(x)(...A),["ctrl"]),["enter"]))},null,40,ee),[[ct,e(s)]]),e(s)&&!e(k)?(r(),o("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:v[6]||(v[6]=(...A)=>e(y)&&e(y)(...A))},v[12]||(v[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):L("",!0)])):ut((r(),o("input",{key:0,"onUpdate:modelValue":v[2]||(v[2]=A=>gt(s)?s.value=A:null),class:"wide-card-input w-full",disabled:e(k),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:v[3]||(v[3]=mt((...A)=>e(x)&&e(x)(...A),["enter"]))},null,40,Xt)),[[ct,e(s)]])]),t("div",se,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(k)||!T.value,onClick:v[7]||(v[7]=(...A)=>e(x)&&e(x)(...A))},[e(k)?(r(),o("i",re)):(r(),o("i",le)),w(" "+i(e(k)?"查询中...":"查询统计"),1)],8,ae)])]),t("div",ie,[v[13]||(v[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),w(" "+i(e(u)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(u)?(r(),o("div",oe,v[14]||(v[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):L("",!0)])]))}},de=st(ne,[["__scopeId","data-v-11e74200"]]),ue={class:"space-y-6 md:space-y-8"},ce={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},me={class:"card-section"},ge={class:"section-header"},fe={class:"header-title"},xe={key:0,class:"info-grid"},ye={class:"info-item"},pe={class:"info-value"},be={class:"info-item"},ve={class:"info-value text-green-600 dark:text-emerald-400"},ke={key:0,class:"info-item"},he={class:"info-value text-red-500 dark:text-red-400"},_e={class:"info-item"},we={class:"info-value"},$e={class:"info-item"},Se={class:"info-value"},Ce={class:"info-item"},Te={class:"info-value text-indigo-600 dark:text-indigo-300"},Ke={key:1,class:"info-item xl:col-span-2"},Ae={class:"space-y-2"},Pe={class:"truncate"},Le={class:"font-semibold"},Me={key:1,class:"info-grid"},Ie={class:"info-item"},De={class:"info-value break-all"},Oe={class:"info-item"},je={class:"info-item"},Re={class:"info-value"},qe={class:"info-item"},Ue={class:"info-value break-all"},Ne={class:"info-item xl:col-span-2"},Ee={class:"info-value"},Fe={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},We={key:0,class:"text-red-500 dark:text-red-400"},Be={key:1,class:"text-orange-500 dark:text-orange-400"},Ve={key:2},ze={key:2,class:"text-gray-400 dark:text-gray-500"},Je={class:"card-section"},He={class:"section-header"},Ye={class:"header-tag"},Ge={class:"metric-grid"},Ze={class:"metric-card"},Qe={class:"metric-value text-green-600 dark:text-emerald-300"},Xe={class:"metric-label"},ts={class:"metric-card"},es={class:"metric-value text-blue-600 dark:text-sky-300"},ss={class:"metric-label"},as={class:"metric-card"},rs={class:"metric-value text-purple-600 dark:text-violet-300"},ls={class:"metric-label"},is={class:"metric-card"},os={class:"metric-value text-amber-500 dark:text-amber-300"},ns={class:"metric-label"},ds={key:0,class:"card-section"},us={class:"flex items-center justify-between gap-3"},cs={class:"flex items-center gap-3"},ms={class:"account-name"},gs={class:"account-sub"},fs={key:0,class:"mt-3 space-y-2"},xs={class:"progress-row"},ys={class:"progress-track"},ps={class:"progress-value"},bs={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},vs={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},ks={key:1,class:"mt-3"},hs={key:0,class:"space-y-2"},_s={class:"quota-header"},ws={class:"quota-percent"},$s={class:"progress-track"},Ss={class:"quota-foot"},Cs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},Ts={__name:"StatsOverview",setup(W){const f=rt(),{statsData:s,statsPeriod:k,currentPeriodData:u,multiKeyMode:x,aggregatedStats:y,individualStats:b,invalidKeys:T}=at(f),M=U(()=>!b.value||b.value.length===0?[]:[...b.value].sort((d,l)=>{var p,I;return(((p=l.usage)==null?void 0:p.allTokens)||0)-(((I=d.usage)==null?void 0:I.allTokens)||0)}).slice(0,3)),v=d=>{var p;return!y.value||!y.value.usage.allTokens?0:((((p=d.usage)==null?void 0:p.allTokens)||0)/y.value.usage.allTokens*100).toFixed(1)},A=d=>{if(!d)return"无";try{return Pt(d).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},B=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",C=d=>d?new Date(d){if(!d)return!1;const I=(new Date(d)-new Date)/(1e3*60*60*24);return I>0&&I<=7},c=d=>(typeof d!="number"&&(d=parseInt(d)||0),d===0?"0":d>=1e6?(d/1e6).toFixed(1)+"M":d>=1e3?(d/1e3).toFixed(1)+"K":d.toLocaleString()),n=d=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[d]||d||"未知",R=U(()=>{var p,I;const d=(I=(p=s.value)==null?void 0:p.accounts)==null?void 0:I.details;if(!d)return[];const l=[];return d.claude&&d.claude.accountType==="dedicated"&&l.push({key:"claude",...d.claude}),d.openai&&d.openai.accountType==="dedicated"&&l.push({key:"openai",...d.openai}),l}),a=U(()=>{const d=R.value.length;return d<=1?"md:grid-cols-1 lg:grid-cols-1":d===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),m=d=>d?d.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",D=d=>{if(!d||d<=0)return"";const l=Math.floor(d),p=Math.floor(l/1440),I=Math.floor(l%1440/60),V=l%60;return p>0?I>0?`${p}天${I}小时`:`${p}天`:I>0?V>0?`${I}小时${V}分钟`:`${I}小时`:`${V}分钟`},S=d=>{if(!d)return{text:"状态未知",class:"text-gray-400"};if(d.isRateLimited){const l=D(d.minutesRemaining);return{text:`限流中${l?` · 剩余约 ${l}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},j=(d,l)=>{if(!d||!l)return"暂无时间窗口信息";const p=new Date(d),I=new Date(l),V=g=>`${`${g.getHours()}`.padStart(2,"0")}:${`${g.getMinutes()}`.padStart(2,"0")}`;return`${V(p)} - ${V(I)}`},P=d=>{if(!d||d<=0)return"";const l=Math.floor(d/60),p=d%60;return l>0?`${l}小时${p}分钟`:`${p}分钟`},_=(d,l)=>{var I;if(!d)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((I=l==null?void 0:l.rateLimitStatus)!=null&&I.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const p=String(d).toLowerCase();return p==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":p==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},z=d=>{if(!d)return null;const l=typeof d.usedPercent=="number"&&!Number.isNaN(d.usedPercent)?d.usedPercent:null,p=typeof d.resetAfterSeconds=="number"&&!Number.isNaN(d.resetAfterSeconds)?d.resetAfterSeconds:null,I=typeof d.remainingSeconds=="number"?d.remainingSeconds:null,V=d.resetAt?Date.parse(d.resetAt):null;return p!==null&&(I!==null&&I<=0||V!==null&&!Number.isNaN(V)&&Date.now()>=V)?0:l===null?null:Math.max(0,Math.min(100,l))},H=d=>{const l=z(d);return l===null?"bg-gradient-to-r from-gray-300 to-gray-400":l>=90?"bg-gradient-to-r from-red-500 to-red-600":l>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},F=d=>{const l=z(d);return l===null?"0%":`${l}%`},h=d=>{const l=z(d);return l===null?"--":`${l.toFixed(1)}%`},Q=d=>{if(!d)return"--";let l=d.remainingSeconds;if(l==null&&(l=d.resetAfterSeconds),l==null||Number.isNaN(Number(l)))return"--";l=Math.max(0,Math.floor(Number(l)));const p=Math.floor(l/86400),I=Math.floor(l%86400/3600),V=Math.floor(l%3600/60),g=l%60;return p>0?I>0?`${p}天${I}小时`:`${p}天`:I>0?V>0?`${I}小时${V}分钟`:`${I}小时`:V>0?`${V}分钟`:`${g}秒`},X=d=>d==="secondary"?"周限":"5h";return(d,l)=>(r(),o("div",ue,[t("div",ce,[t("div",me,[t("header",ge,[t("i",{class:O(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",fe,i(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(y)?(r(),o("div",xe,[t("div",ye,[l[0]||(l[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",pe,i(e(y).totalKeys)+" 个",1)]),t("div",be,[l[2]||(l[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ve,[l[1]||(l[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),w(i(e(y).activeKeys)+" 个 ",1)])]),e(T).length>0?(r(),o("div",ke,[l[4]||(l[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",he,[l[3]||(l[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),w(i(e(T).length)+" 个 ",1)])])):L("",!0),t("div",_e,[l[5]||(l[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",we,i(c(e(y).usage.requests)),1)]),t("div",$e,[l[6]||(l[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",Se,i(c(e(y).usage.allTokens)),1)]),t("div",Ce,[l[7]||(l[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",Te,i(e(y).usage.formattedCost),1)]),e(b).length>1?(r(),o("div",Ke,[l[8]||(l[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",Ae,[(r(!0),o(Z,null,et(M.value,p=>(r(),o("div",{key:p.apiId,class:"contributor-item"},[t("span",Pe,i(p.name),1),t("span",Le,i(v(p))+"%",1)]))),128))])])):L("",!0)])):(r(),o("div",Me,[t("div",Ie,[l[9]||(l[9]=t("p",{class:"info-label"},"名称",-1)),t("p",De,i(e(s).name),1)]),t("div",Oe,[l[10]||(l[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:O(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:O(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),w(" "+i(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",je,[l[11]||(l[11]=t("p",{class:"info-label"},"权限",-1)),t("p",Re,i(n(e(s).permissions)),1)]),t("div",qe,[l[12]||(l[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ue,i(A(e(s).createdAt)),1)]),t("div",Ne,[l[17]||(l[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ee,[e(s).expirationMode==="activation"&&!e(s).isActivated?(r(),o(Z,{key:0},[l[13]||(l[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),w("未激活 ")],-1)),t("span",Fe," 首次使用后 "+i(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+i(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(r(),o(Z,{key:1},[C(e(s).expiresAt)?(r(),o("span",We,l[14]||(l[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),w("已过期 ",-1)]))):K(e(s).expiresAt)?(r(),o("span",Be,[l[15]||(l[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),w(i(B(e(s).expiresAt)),1)])):(r(),o("span",Ve,i(B(e(s).expiresAt)),1))],64)):(r(),o("span",ze,l[16]||(l[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),w("永不过期 ",-1)])))])])]))]),t("div",Je,[t("header",He,[l[18]||(l[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),l[19]||(l[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",Ye,i(e(k)==="daily"?"今日":"本月"),1)]),t("div",Ge,[t("div",Ze,[t("p",Qe,i(c(e(u).requests)),1),t("p",Xe,i(e(k)==="daily"?"今日":"本月")+"请求数",1)]),t("div",ts,[t("p",es,i(c(e(u).allTokens)),1),t("p",ss,i(e(k)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",as,[t("p",rs,i(e(u).formattedCost||"$0.000000"),1),t("p",ls,i(e(k)==="daily"?"今日":"本月")+"费用",1)]),t("div",is,[t("p",os,i(c(e(u).inputTokens)),1),t("p",ns,i(e(k)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&R.value.length>0?(r(),o("div",ds,[l[21]||(l[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:O(["grid grid-cols-1 gap-4",a.value])},[(r(!0),o(Z,null,et(R.value,p=>{var I,V,g,$,q,J;return r(),o("div",{key:p.id||p.key,class:"account-card"},[t("div",us,[t("div",cs,[t("span",{class:O(["account-icon",p.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:O(p.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",ms,i(m(p)),1),t("p",gs,i(p.platform==="claude"?"会话窗口":"额度窗口"),1)])]),S(p.rateLimitStatus)?(r(),o("div",{key:0,class:O(["rate-badge",S(p.rateLimitStatus).class])},[l[20]||(l[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),w(" "+i(S(p.rateLimitStatus).text),1)],2)):L("",!0)]),p.platform==="claude"?(r(),o("div",fs,[t("div",xs,[t("div",ys,[t("div",{class:O(["progress-bar",_((I=p.sessionWindow)==null?void 0:I.sessionWindowStatus,p)]),style:lt({width:`${Math.min(100,Math.max(0,((V=p.sessionWindow)==null?void 0:V.progress)||0))}%`})},null,6)]),t("span",ps,i(Math.min(100,Math.max(0,Math.round(((g=p.sessionWindow)==null?void 0:g.progress)||0))))+"% ",1)]),t("div",bs,[t("span",null,i(j(($=p.sessionWindow)==null?void 0:$.windowStart,(q=p.sessionWindow)==null?void 0:q.windowEnd)),1),((J=p.sessionWindow)==null?void 0:J.remainingTime)>0?(r(),o("span",vs," 剩余 "+i(P(p.sessionWindow.remainingTime)),1)):L("",!0)])])):p.platform==="openai"?(r(),o("div",ks,[p.codexUsage?(r(),o("div",hs,[(r(),o(Z,null,et(["primary","secondary"],E=>{var G,it,nt,dt;return t("div",{key:`${p.key}-${E}`,class:"quota-row"},[t("div",_s,[t("span",{class:O(["quota-tag",E==="primary"?"tag-indigo":"tag-blue"])},i(X(E)),3),t("span",ws,i(h((G=p.codexUsage)==null?void 0:G[E])),1)]),t("div",$s,[t("div",{class:O(["progress-bar",H((it=p.codexUsage)==null?void 0:it[E])]),style:lt({width:F((nt=p.codexUsage)==null?void 0:nt[E])})},null,6)]),t("div",Ss," 重置剩余 "+i(Q((dt=p.codexUsage)==null?void 0:dt[E])),1)])}),64))])):(r(),o("p",Cs," 暂无额度使用数据 "))])):L("",!0)])}),128))],2)])):L("",!0)]))}},Ks=st(Ts,[["__scopeId","data-v-b72df2cd"]]),As={class:"card p-4 md:p-6"},Ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ls={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ms={class:"space-y-2 md:space-y-3"},Is={class:"flex items-center justify-between"},Ds={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Os={class:"flex items-center justify-between"},js={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Rs={class:"flex items-center justify-between"},qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Us={class:"flex items-center justify-between"},Ns={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Es={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},Fs={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ws={class:"text-sm md:text-base"},Bs={class:"text-lg md:text-xl"},Vs={__name:"TokenDistribution",setup(W){const f=rt(),{statsPeriod:s,currentPeriodData:k}=at(f),u=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,y)=>(r(),o("div",As,[t("h3",Ps,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),w(" Token 使用分布 ")],-1)),t("span",Ls,"("+i(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",Ms,[t("div",Is,[y[1]||(y[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),w(" 输入 Token ")],-1)),t("span",Ds,i(u(e(k).inputTokens)),1)]),t("div",Os,[y[2]||(y[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),w(" 输出 Token ")],-1)),t("span",js,i(u(e(k).outputTokens)),1)]),t("div",Rs,[y[3]||(y[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),w(" 缓存创建 Token ")],-1)),t("span",qs,i(u(e(k).cacheCreateTokens)),1)]),t("div",Us,[y[4]||(y[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),w(" 缓存读取 Token ")],-1)),t("span",Ns,i(u(e(k).cacheReadTokens)),1)])]),t("div",Es,[t("div",Fs,[t("span",Ws,i(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Bs,i(u(e(k).allTokens)),1)])])]))}},zs=st(Vs,[["__scopeId","data-v-d9e5c1dd"]]),Js={class:"flex h-full flex-col gap-4 md:gap-6"},Hs={class:"card flex h-full flex-col p-4 md:p-6"},Ys={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Gs={key:0,class:"space-y-4"},Zs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Qs={class:"mb-3 flex items-center justify-between"},Xs={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},ta={class:"grid grid-cols-2 gap-3"},ea={class:"text-center"},sa={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},aa={class:"text-center"},ra={class:"text-lg font-bold text-green-600"},la={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},ia={class:"space-y-2"},oa={class:"flex items-center justify-between"},na={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},da={class:"flex items-center justify-between"},ua={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ca={class:"flex items-center justify-between"},ma={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ga={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},fa={class:"text-red-700 dark:text-red-300"},xa={key:1,class:"space-y-4 md:space-y-5"},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ba={key:0},va={key:1,class:"flex items-center gap-1"},ka={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ha={key:1,class:"h-2 w-full rounded-full bg-gray-200"},_a={class:"mb-2 flex items-center justify-between"},wa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},$a={key:0},Sa={key:1,class:"flex items-center gap-1"},Ca={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ta={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Ka={key:0},Aa={class:"mb-2 flex items-center justify-between"},Pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},La={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ma={key:1},Ia={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Da={key:0},Oa={key:1},ja={key:2},Ra={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},qa={class:"flex items-center justify-between"},Ua={class:"text-sm font-medium text-gray-900 md:text-base"},Na={key:0},Ea={key:1,class:"flex items-center gap-1"},Fa={class:"flex items-center justify-between"},Wa={class:"text-sm font-medium text-gray-900 md:text-base"},Ba={key:0,class:"text-orange-600"},Va={key:1,class:"text-green-600"},za={class:"space-y-2"},Ja={class:"flex items-center justify-between"},Ha={class:"text-sm font-medium text-gray-900 md:text-base"},Ya={key:0,class:"text-orange-600"},Ga={key:1,class:"text-green-600"},Za={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Qa={key:0,class:"card !overflow-visible p-4 md:p-6"},Xa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},tr={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},er={class:"break-all text-gray-800 dark:text-gray-200"},sr={__name:"LimitConfig",setup(W){const f=rt(),{statsData:s,multiKeyMode:k,aggregatedStats:u,invalidKeys:x}=at(f),y=U(()=>{var n;const c=(n=s.value)==null?void 0:n.restrictions;return c?c.enableModelRestriction===!0&&Array.isArray(c.restrictedModels)&&c.restrictedModels.length>0:!1}),b=U(()=>{var n;const c=(n=s.value)==null?void 0:n.restrictions;return c?c.enableClientRestriction===!0&&Array.isArray(c.allowedClients)&&c.allowedClients.length>0:!1}),T=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const c=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(c,100)},M=()=>{const c=T();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"},v=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const c=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(c,100)},A=()=>{const c=v();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-blue-500"},B=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const c=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(c,100)},C=()=>{const c=B();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-indigo-500"},K=c=>(typeof c!="number"&&(c=parseInt(c)||0),c===0?"0":c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toLocaleString());return(c,n)=>(r(),o("div",Js,[t("div",Hs,[t("h3",Ys,[n[0]||(n[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),w(" "+i(e(k)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(k)&&e(u)?(r(),o("div",Gs,[t("div",Zs,[t("div",Qs,[n[1]||(n[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),w(" API Keys 概况 ")],-1)),t("span",Xs,i(e(u).activeKeys)+"/"+i(e(u).totalKeys),1)]),t("div",ta,[t("div",ea,[t("div",sa,i(e(u).totalKeys),1),n[2]||(n[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",aa,[t("div",ra,i(e(u).activeKeys),1),n[3]||(n[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",la,[n[7]||(n[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",ia,[t("div",oa,[n[4]||(n[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),w(" 总请求数 ")],-1)),t("span",na,i(K(e(u).usage.requests)),1)]),t("div",da,[n[5]||(n[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),w(" 总 Tokens ")],-1)),t("span",ua,i(K(e(u).usage.allTokens)),1)]),t("div",ca,[n[6]||(n[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),w(" 总费用 ")],-1)),t("span",ma,i(e(u).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(r(),o("div",ga,[n[8]||(n[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",fa,i(e(x).length)+" 个无效的 API Key ",1)])):L("",!0),n[9]||(n[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),w(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):L("",!0),e(k)?L("",!0):(r(),o("div",xa,[t("div",null,[t("div",ya,[n[11]||(n[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",pa,[e(s).limits.dailyCostLimit>0?(r(),o("span",ba," $"+i(e(s).limits.currentDailyCost.toFixed(4))+" / $"+i(e(s).limits.dailyCostLimit.toFixed(2)),1)):(r(),o("span",va,[w(" $"+i(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),n[10]||(n[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(r(),o("div",ka,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",M()]),style:lt({width:T()+"%"})},null,6)])):(r(),o("div",ha,n[12]||(n[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",_a,[n[14]||(n[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",wa,[e(s).limits.totalCostLimit>0?(r(),o("span",$a," $"+i(e(s).limits.currentTotalCost.toFixed(4))+" / $"+i(e(s).limits.totalCostLimit.toFixed(2)),1)):(r(),o("span",Sa,[w(" $"+i(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),n[13]||(n[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(r(),o("div",Ca,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:v()+"%"})},null,6)])):(r(),o("div",Ta,n[15]||(n[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(r(),o("div",Ka,[t("div",Aa,[n[16]||(n[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Opus 模型周费用限制",-1)),t("span",Pa," $"+i(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+i(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",La,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",C()]),style:lt({width:B()+"%"})},null,6)])])):L("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(r(),o("div",Ma,[Y(Lt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",Ia,[n[17]||(n[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(r(),o("span",Da,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(r(),o("span",Oa,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(r(),o("span",ja," 仅限制请求次数 "))])])):L("",!0),t("div",Ra,[t("div",qa,[n[19]||(n[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ua,[e(s).limits.concurrencyLimit>0?(r(),o("span",Na,i(e(s).limits.concurrencyLimit),1)):(r(),o("span",Ea,n[18]||(n[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Fa,[n[22]||(n[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",Wa,[y.value?(r(),o("span",Ba,[n[20]||(n[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),w(" 限制 "+i(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(r(),o("span",Va,n[21]||(n[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),w(" 允许所有模型 ",-1)])))])]),t("div",za,[t("div",Ja,[n[25]||(n[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",Ha,[b.value?(r(),o("span",Ya,[n[23]||(n[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),w(" 限 "+i(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(r(),o("span",Ga,n[24]||(n[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),w(" 允许所有客户端 ",-1)])))])]),b.value?(r(),o("div",Za,[(r(!0),o(Z,null,et(e(s).restrictions.allowedClients,R=>(r(),o("span",{key:R,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[n[26]||(n[26]=t("i",{class:"fas fa-id-badge"},null,-1)),w(" "+i(R),1)]))),128))])):L("",!0)])])]))]),y.value?(r(),o("div",Qa,[n[30]||(n[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),w(" 详细限制信息 ")],-1)),t("div",Xa,[n[28]||(n[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),w(" 受限模型列表 ")],-1)),t("div",tr,[(r(!0),o(Z,null,et(e(s).restrictions.restrictedModels,R=>(r(),o("div",{key:R,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[n[27]||(n[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",er,i(R),1)]))),128))]),n[29]||(n[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),w(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):L("",!0)]))}},ar=st(sr,[["__scopeId","data-v-9bba2ba4"]]),rr={class:"card h-full p-4 md:p-6"},lr={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},ir={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},or={key:0,class:"space-y-2 md:space-y-3"},nr={class:"mb-1 flex items-center justify-between text-sm"},dr={class:"truncate font-medium text-gray-700 dark:text-gray-300"},ur={class:"text-xs text-gray-600 dark:text-gray-400"},cr={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},mr={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},gr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},fr={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},xr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},yr={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},pr={__name:"AggregatedStatsCard",setup(W){const f=rt(),{aggregatedStats:s,individualStats:k,statsPeriod:u,multiKeyMode:x}=at(f),y=C=>C?u.value==="daily"?C.dailyUsage||C.usage:C.monthlyUsage||C.usage:null,b=U(()=>!k.value||k.value.length===0?[]:[...k.value].sort((C,K)=>{const c=y(C),n=y(K);return((n==null?void 0:n.cost)||0)-((c==null?void 0:c.cost)||0)}).slice(0,5)),T=U(()=>k.value?Math.max(0,k.value.length-5):0),M=U(()=>{var n,R;if(!k.value||!s.value)return 0;const C=b.value.reduce((a,m)=>{const D=y(m);return a+((D==null?void 0:D.cost)||0)},0),K=u.value==="daily"?((n=s.value.dailyUsage)==null?void 0:n.cost)||0:((R=s.value.monthlyUsage)==null?void 0:R.cost)||0;if(K===0)return 0;const c=K-C;return Math.max(0,Math.round(c/K*100))}),v=C=>{var R,a;if(!s.value)return 0;const K=u.value==="daily"?((R=s.value.dailyUsage)==null?void 0:R.cost)||0:((a=s.value.monthlyUsage)==null?void 0:a.cost)||0;if(K===0)return 0;const c=y(C),n=((c==null?void 0:c.cost)||0)/K*100;return Math.round(n)},A=C=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][C]||"bg-gray-400",B=C=>(typeof C!="number"&&(C=parseInt(C)||0),C===0?"0":C>=1e6?(C/1e6).toFixed(1)+"M":C>=1e3?(C/1e3).toFixed(1)+"K":C.toLocaleString());return(C,K)=>(r(),o("div",rr,[t("h3",lr,[K[0]||(K[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),w(" 使用占比 ")],-1)),t("span",ir,"("+i(e(u)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(k).length>0?(r(),o("div",or,[(r(!0),o(Z,null,et(b.value,(c,n)=>{var R,a;return r(),o("div",{key:c.apiId,class:"relative"},[t("div",nr,[t("span",dr,i(c.name||`Key ${n+1}`),1),t("span",ur,i(v(c))+"% ",1)]),t("div",cr,[t("div",{class:O(["h-2 rounded-full transition-all duration-300",A(n)]),style:lt({width:v(c)+"%"})},null,6)]),t("div",mr,[t("span",null,i(B(((R=y(c))==null?void 0:R.requests)||0))+"次",1),t("span",null,i(((a=y(c))==null?void 0:a.formattedCost)||"$0.00"),1)])])}),128)),T.value>0?(r(),o("div",gr,[t("div",fr,[t("span",null,"其他 "+i(T.value)+" 个Keys",1),t("span",null,i(M.value)+"%",1)])])):L("",!0)])):e(x)?(r(),o("div",yr,K[2]||(K[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),w(" 暂无数据 ",-1)]))):(r(),o("div",xr,K[1]||(K[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},br=st(pr,[["__scopeId","data-v-39572a8e"]]),vr={class:"card p-4 md:p-6"},kr={class:"mb-4 md:mb-6"},hr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},_r={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},wr={key:0,class:"py-6 text-center md:py-8"},$r={key:1,class:"space-y-3 md:space-y-4"},Sr={class:"mb-2 flex items-start justify-between md:mb-3"},Cr={class:"min-w-0 flex-1"},Tr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},Kr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},Ar={class:"ml-3 flex-shrink-0 text-right"},Pr={class:"text-base font-bold text-green-600 md:text-lg"},Lr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},Mr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Ir={class:"font-medium text-gray-900 dark:text-gray-100"},Dr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Or={class:"font-medium text-gray-900 dark:text-gray-100"},jr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Rr={class:"font-medium text-gray-900 dark:text-gray-100"},qr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Ur={class:"font-medium text-gray-900 dark:text-gray-100"},Nr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Er={class:"text-sm md:text-base"},Fr={__name:"ModelUsageStats",setup(W){const f=rt(),{statsPeriod:s,modelStats:k,modelStatsLoading:u}=at(f),x=y=>(typeof y!="number"&&(y=parseInt(y)||0),y===0?"0":y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toLocaleString());return(y,b)=>(r(),o("div",vr,[t("div",kr,[t("h3",hr,[b[0]||(b[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),w(" 模型使用统计 ")],-1)),t("span",_r,"("+i(e(s)==="daily"?"今日":"本月")+")",1)])]),e(u)?(r(),o("div",wr,b[1]||(b[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(k).length>0?(r(),o("div",$r,[(r(!0),o(Z,null,et(e(k),(T,M)=>{var v;return r(),o("div",{key:M,class:"model-usage-item"},[t("div",Sr,[t("div",Cr,[t("h4",Tr,i(T.model),1),t("p",Kr,i(T.requests)+" 次请求 ",1)]),t("div",Ar,[t("div",Pr,i(((v=T.formatted)==null?void 0:v.total)||"$0.000000"),1),b[2]||(b[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",Lr,[t("div",Mr,[b[3]||(b[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",Ir,i(x(T.inputTokens)),1)]),t("div",Dr,[b[4]||(b[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",Or,i(x(T.outputTokens)),1)]),t("div",jr,[b[5]||(b[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",Rr,i(x(T.cacheCreateTokens)),1)]),t("div",qr,[b[6]||(b[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Ur,i(x(T.cacheReadTokens)),1)])])])}),128))])):(r(),o("div",Nr,[b[7]||(b[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Er," 暂无"+i(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Wr=st(Fr,[["__scopeId","data-v-b3b8dc5f"]]),Br={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Vr={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},zr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Jr={class:"flex items-center gap-3"},Hr={class:"text-xs text-gray-500 dark:text-gray-400"},Yr=["disabled"],Gr={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Zr={class:"mb-4"},Qr={class:"relative"},Xr=["value"],tl={class:"mb-4 space-y-2"},el={class:"flex items-center justify-between text-sm"},sl={class:"font-medium text-gray-700 dark:text-gray-300"},al={class:"flex items-center gap-3"},rl={class:"text-xs text-gray-500 dark:text-gray-400"},ll={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},il={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},ol={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},nl={class:"max-h-40 overflow-y-auto p-3"},dl={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},ul={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},cl={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},ml={key:2,class:"text-sm text-red-600 dark:text-red-400"},gl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},fl={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},xl=["disabled"],yl=["disabled"],pl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(W,{emit:f}){const s=W,k=f,u=N("idle"),x=N(""),y=N(""),b=N(0),T=N(null),M=N(null),v=N("claude-sonnet-4-5-20250929"),A=U(()=>s.apiKeyName||"当前 API Key"),B=U(()=>{const P=s.apiKeyValue;return P?P.length<=10?"****":P.substring(0,6)+"****"+P.substring(P.length-4):""}),C=U(()=>{switch(u.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),K=U(()=>{switch(u.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return y.value||"无法通过 API Key 访问服务";default:return""}}),c=U(()=>{switch(u.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),n=U(()=>{switch(u.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),R=U(()=>{switch(u.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),a=U(()=>{switch(u.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),m=U(()=>{switch(u.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function D(){if(!s.apiKeyValue)return;u.value="testing",x.value="",y.value="",b.value=0,T.value=Date.now(),M.value&&M.value.abort(),M.value=new AbortController;const P=`${Ct}/apiStats/api-key/test`;try{const _=await fetch(P,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:v.value}),signal:M.value.signal});if(!_.ok){const h=await _.json().catch(()=>({}));throw new Error(h.message||h.error||`HTTP ${_.status}`)}const z=_.body.getReader(),H=new TextDecoder;let F=!1;for(;!F;){const{done:h,value:Q}=await z.read();if(h){F=!0;continue}const d=H.decode(Q).split(` +`);for(const l of d)if(l.startsWith("data: "))try{const p=JSON.parse(l.substring(6));S(p)}catch{}}}catch(_){if(_.name==="AbortError")return;u.value="error",y.value=_.message||"连接失败",b.value=Date.now()-T.value}}function S(P){switch(P.type){case"test_start":break;case"content":x.value+=P.text;break;case"message_stop":break;case"test_complete":b.value=Date.now()-T.value,P.success?u.value="success":(u.value="error",y.value=P.error||"测试失败");break;case"error":u.value="error",y.value=P.error||"未知错误",b.value=Date.now()-T.value;break}}function j(){u.value!=="testing"&&(M.value&&(M.value.abort(),M.value=null),u.value="idle",x.value="",y.value="",b.value=0,k("close"))}return xt(()=>s.show,P=>{P&&(u.value="idle",x.value="",y.value="",b.value=0)}),yt(()=>{M.value&&M.value.abort()}),(P,_)=>(r(),ot(kt,{to:"body"},[W.show?(r(),o("div",Br,[t("div",{class:"absolute inset-0",onClick:j}),t("div",Vr,[t("div",zr,[t("div",Jr,[t("div",{class:O(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",u.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":u.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:O(["fas",u.value==="idle"?"fa-vial":u.value==="testing"?"fa-spinner fa-spin":u.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[_[0]||(_[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",Hr,i(A.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:u.value==="testing",onClick:j},_[1]||(_[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,Yr)]),t("div",Gr,[t("div",Zr,[_[3]||(_[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Qr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:B.value},null,8,Xr),_[2]||(_[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),_[4]||(_[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",tl,[_[6]||(_[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),w(" /api/v1/messages ")])],-1)),t("div",el,[_[5]||(_[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",sl,i(v.value),1)]),_[7]||(_[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:O(["mb-4 rounded-xl border p-4 transition-all duration-300",c.value])},[t("div",al,[t("div",{class:O(["flex h-8 w-8 items-center justify-center rounded-lg",n.value])},[t("i",{class:O(["fas text-sm",R.value,a.value])},null,2)],2),t("div",null,[t("p",{class:O(["font-medium",m.value])},i(C.value),3),t("p",rl,i(K.value),1)])])],2),u.value!=="idle"?(r(),o("div",ll,[t("div",il,[_[8]||(_[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(r(),o("span",ol,i(x.value.length)+" 字符 ",1)):L("",!0)]),t("div",nl,[x.value?(r(),o("p",dl,[w(i(x.value)+" ",1),u.value==="testing"?(r(),o("span",ul)):L("",!0)])):u.value==="testing"?(r(),o("p",cl,_[9]||(_[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),w(" 等待响应中... ",-1)]))):u.value==="error"&&y.value?(r(),o("p",ml,i(y.value),1)):L("",!0)])])):L("",!0),b.value>0?(r(),o("div",gl,[_[10]||(_[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+i((b.value/1e3).toFixed(2))+" 秒",1)])):L("",!0)]),t("div",fl,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:u.value==="testing",onClick:j}," 关闭 ",8,xl),t("button",{class:O(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",u.value==="testing"||!W.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:u.value==="testing"||!W.apiKeyValue,onClick:D},[t("i",{class:O(["fas",u.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),w(" "+i(u.value==="testing"?"测试中...":u.value==="idle"?"开始测试":"重新测试"),1)],10,yl)])])])):L("",!0)]))}},bl={key:0,class:"public-stats-overview"},vl={class:"header-section"},kl={class:"flex items-center gap-2"},hl={class:"status-text"},_l={class:"text-xs text-gray-500 dark:text-gray-400"},wl={class:"flex flex-wrap justify-center gap-2 md:justify-end"},$l={class:"main-content"},Sl={class:"stats-section"},Cl={class:"stats-grid"},Tl={class:"stat-item"},Kl={class:"stat-value"},Al={class:"stat-item"},Pl={class:"stat-value"},Ll={class:"stat-item"},Ml={class:"stat-value"},Il={class:"stat-item"},Dl={class:"stat-value"},Ol={key:0,class:"model-section"},jl={class:"section-title-left"},Rl={class:"period-label"},ql={class:"model-chart-container"},Ul={key:0,class:"chart-section"},Nl={class:"chart-container"},El={class:"chart-legend"},Fl={key:0,class:"legend-item"},Wl={key:1,class:"legend-item"},Bl={key:2,class:"legend-item"},Vl={key:1,class:"empty-state"},zl={key:1,class:"public-stats-loading"},Jl={key:2,class:"public-stats-empty"},Hl={__name:"PublicStatsOverview",setup(W){It.register(Dt,Ot,jt,Rt,qt,Ut,Nt,Et,Ft);const f=pt(),s=U(()=>{var m;const a=(m=f.publicStats)==null?void 0:m.showOptions;return(a==null?void 0:a.tokenTrends)||(a==null?void 0:a.apiKeysTrends)||(a==null?void 0:a.accountTrends)}),k=U(()=>{var P,_,z;const a=f.publicStats;if(!a)return!1;const m=a.showOptions||{},D=m.tokenTrends&&((P=a.tokenTrends)==null?void 0:P.length)>0,S=m.apiKeysTrends&&((_=a.apiKeysTrends)==null?void 0:_.length)>0,j=m.accountTrends&&((z=a.accountTrends)==null?void 0:z.length)>0;return D||S||j}),u=["rgb(99, 102, 241)","rgb(59, 130, 246)","rgb(16, 185, 129)","rgb(245, 158, 11)","rgb(239, 68, 68)","rgb(139, 92, 246)","rgb(236, 72, 153)","rgb(20, 184, 166)"],x=U(()=>{var D;const a=f.publicStats;if(!((D=a==null?void 0:a.modelDistribution)!=null&&D.length))return{labels:[],datasets:[]};const m=a.modelDistribution;return{labels:m.map(S=>n(S.model)),datasets:[{data:m.map(S=>S.percentage),backgroundColor:m.map((S,j)=>u[j%u.length]),borderColor:"transparent",borderWidth:0,hoverOffset:4}]}}),y=U(()=>{const a=document.documentElement.classList.contains("dark");return{responsive:!0,maintainAspectRatio:!1,cutout:"60%",plugins:{legend:{position:"right",labels:{color:a?"rgb(156, 163, 175)":"rgb(107, 114, 128)",padding:12,usePointStyle:!0,pointStyle:"circle",font:{size:11},generateLabels:D=>{const S=D.data;return S.labels.length&&S.datasets.length?S.labels.map((j,P)=>({text:`${j} ${S.datasets[0].data[P]}%`,fillStyle:S.datasets[0].backgroundColor[P],strokeStyle:"transparent",lineWidth:0,pointStyle:"circle",hidden:!1,index:P})):[]}}},tooltip:{backgroundColor:a?"rgba(31, 41, 55, 0.95)":"rgba(255, 255, 255, 0.95)",titleColor:a?"rgb(243, 244, 246)":"rgb(17, 24, 39)",bodyColor:a?"rgb(209, 213, 219)":"rgb(75, 85, 99)",borderColor:a?"rgba(75, 85, 99, 0.3)":"rgba(209, 213, 219, 0.5)",borderWidth:1,padding:10,cornerRadius:8,callbacks:{label:D=>` ${D.label}: ${D.parsed}%`}}}}}),b=U(()=>{var j,P,_,z,H,F;const a=f.publicStats;if(!a)return{labels:[],datasets:[]};const m=a.showOptions||{},D=((j=a.tokenTrends)==null?void 0:j.map(h=>R(h.date)))||((P=a.apiKeysTrends)==null?void 0:P.map(h=>R(h.date)))||((_=a.accountTrends)==null?void 0:_.map(h=>R(h.date)))||[],S=[];return m.tokenTrends&&((z=a.tokenTrends)==null?void 0:z.length)>0&&S.push({label:"Tokens",data:a.tokenTrends.map(h=>h.tokens),borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",yAxisID:"y",tension:.3,fill:!0,pointRadius:3,pointHoverRadius:5}),m.apiKeysTrends&&((H=a.apiKeysTrends)==null?void 0:H.length)>0&&S.push({label:"活跃 Keys",data:a.apiKeysTrends.map(h=>h.activeKeys),borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",yAxisID:"y1",tension:.3,fill:!1,pointRadius:3,pointHoverRadius:5}),m.accountTrends&&((F=a.accountTrends)==null?void 0:F.length)>0&&S.push({label:"活跃账号",data:a.accountTrends.map(h=>h.activeAccounts),borderColor:"rgb(168, 85, 247)",backgroundColor:"rgba(168, 85, 247, 0.1)",yAxisID:"y1",tension:.3,fill:!1,pointRadius:3,pointHoverRadius:5}),{labels:D,datasets:S}}),T=U(()=>{const a=document.documentElement.classList.contains("dark"),m=a?"rgba(156, 163, 175, 1)":"rgba(107, 114, 128, 1)",D=a?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)";return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{backgroundColor:a?"rgba(31, 41, 55, 0.9)":"rgba(255, 255, 255, 0.9)",titleColor:a?"#e5e7eb":"#1f2937",bodyColor:a?"#d1d5db":"#4b5563",borderColor:a?"rgba(75, 85, 99, 0.5)":"rgba(229, 231, 235, 1)",borderWidth:1,padding:10,displayColors:!0,callbacks:{label:function(S){let j=S.dataset.label||"";return j&&(j+=": "),S.dataset.yAxisID==="y"?j+=A(S.parsed.y):j+=S.parsed.y,j}}}},scales:{x:{grid:{color:D,drawBorder:!1},ticks:{color:m,font:{size:10}}},y:{type:"linear",display:!0,position:"left",min:0,beginAtZero:!0,title:{display:!0,text:"Tokens",color:"rgb(59, 130, 246)",font:{size:10}},grid:{color:D,drawBorder:!1},ticks:{color:m,font:{size:10},callback:function(S){return B(S)}}},y1:{type:"linear",display:!0,position:"right",min:0,beginAtZero:!0,title:{display:!0,text:"数量",color:"rgb(34, 197, 94)",font:{size:10}},grid:{drawOnChartArea:!1},ticks:{color:m,font:{size:10},stepSize:1}}}}});function M(a){const m=Math.floor(a/86400),D=Math.floor(a%86400/3600),S=Math.floor(a%3600/60);return m>0?`${m}天 ${D}小时`:D>0?`${D}小时 ${S}分钟`:`${S}分钟`}function v(a){return a>=1e6?(a/1e6).toFixed(1)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString()}function A(a){return a>=1e9?(a/1e9).toFixed(2)+"B":a>=1e6?(a/1e6).toFixed(2)+"M":a>=1e3?(a/1e3).toFixed(1)+"K":a.toString()}function B(a){return a>=1e9?(a/1e9).toFixed(0)+"B":a>=1e6?(a/1e6).toFixed(0)+"M":a>=1e3?(a/1e3).toFixed(0)+"K":a.toString()}function C(a){const m={today:"今天","24h":"过去24小时","7d":"过去7天","30d":"过去30天",all:"全部"};return m[a]||m.today}function K(a){return{claude:"fas fa-robot",gemini:"fas fa-gem",bedrock:"fab fa-aws",droid:"fas fa-microchip"}[a]||"fas fa-server"}function c(a){return{claude:"Claude",gemini:"Gemini",bedrock:"Bedrock",droid:"Droid"}[a]||a}function n(a){if(!a)return"Unknown";const m=a.split("-");return m.length>2?m.slice(0,2).join("-"):a}function R(a){if(!a)return"";const m=a.split("-");return m.length===3?`${m[1]}/${m[2]}`:a}return(a,m)=>{var D,S,j,P,_;return e(f).publicStats?(r(),o("div",bl,[t("div",vl,[t("div",kl,[t("div",{class:O(["status-badge",{"status-healthy":e(f).publicStats.serviceStatus==="healthy","status-degraded":e(f).publicStats.serviceStatus==="degraded"}])},[m[0]||(m[0]=t("span",{class:"status-dot"},null,-1)),t("span",hl,i(e(f).publicStats.serviceStatus==="healthy"?"服务正常":"服务降级"),1)],2),t("span",_l," 运行 "+i(M(e(f).publicStats.uptime)),1)]),t("div",wl,[(r(!0),o(Z,null,et(e(f).publicStats.platforms,(z,H)=>(r(),o("div",{key:H,class:O(["platform-badge",{available:z,unavailable:!z}])},[t("i",{class:O(["mr-1",K(H)])},null,2),t("span",null,i(c(H)),1)],2))),128))])]),t("div",$l,[t("div",Sl,[m[5]||(m[5]=t("div",{class:"section-title-left"},"今日统计",-1)),t("div",Cl,[t("div",Tl,[t("div",Kl,i(v(e(f).publicStats.todayStats.requests)),1),m[1]||(m[1]=t("div",{class:"stat-label"},"请求数",-1))]),t("div",Al,[t("div",Pl,i(A(e(f).publicStats.todayStats.tokens)),1),m[2]||(m[2]=t("div",{class:"stat-label"},"Tokens",-1))]),t("div",Ll,[t("div",Ml,i(A(e(f).publicStats.todayStats.inputTokens)),1),m[3]||(m[3]=t("div",{class:"stat-label"},"输入",-1))]),t("div",Il,[t("div",Dl,i(A(e(f).publicStats.todayStats.outputTokens)),1),m[4]||(m[4]=t("div",{class:"stat-label"},"输出",-1))])])]),(D=e(f).publicStats.showOptions)!=null&&D.modelDistribution&&((S=e(f).publicStats.modelDistribution)==null?void 0:S.length)>0?(r(),o("div",Ol,[t("div",jl,[m[6]||(m[6]=w(" 模型使用分布 ",-1)),t("span",Rl,i(C(e(f).publicStats.modelDistributionPeriod)),1)]),t("div",ql,[Y(e(ht),{data:x.value,options:y.value},null,8,["data","options"])])])):L("",!0)]),k.value?(r(),o("div",Ul,[m[10]||(m[10]=t("div",{class:"section-title-left"},"使用趋势(近7天)",-1)),t("div",Nl,[Y(e(_t),{data:b.value,options:T.value},null,8,["data","options"])]),t("div",El,[(j=e(f).publicStats.showOptions)!=null&&j.tokenTrends?(r(),o("div",Fl,m[7]||(m[7]=[t("span",{class:"legend-dot legend-tokens"},null,-1),t("span",{class:"legend-text"},"Tokens",-1)]))):L("",!0),(P=e(f).publicStats.showOptions)!=null&&P.apiKeysTrends?(r(),o("div",Wl,m[8]||(m[8]=[t("span",{class:"legend-dot legend-keys"},null,-1),t("span",{class:"legend-text"},"活跃 Keys",-1)]))):L("",!0),(_=e(f).publicStats.showOptions)!=null&&_.accountTrends?(r(),o("div",Bl,m[9]||(m[9]=[t("span",{class:"legend-dot legend-accounts"},null,-1),t("span",{class:"legend-text"},"活跃账号",-1)]))):L("",!0)])])):s.value?(r(),o("div",Vl,m[11]||(m[11]=[t("i",{class:"fas fa-chart-line empty-icon"},null,-1),t("p",{class:"empty-text"},"暂无趋势数据",-1),t("p",{class:"empty-hint"},"数据将在有请求后自动更新",-1)]))):L("",!0)])):e(f).publicStatsLoading?(r(),o("div",zl,m[12]||(m[12]=[t("div",{class:"loading-spinner"},null,-1)]))):(r(),o("div",Jl,m[13]||(m[13]=[t("i",{class:"fas fa-chart-pie empty-icon"},null,-1),t("p",{class:"empty-text"},"暂无统计数据",-1)])))}}},Yl=st(Hl,[["__scopeId","data-v-4ed7dff1"]]),Gl={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},Zl={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},Ql={class:"flex items-center gap-2 md:gap-4"},Xl={class:"flex items-center"},ti={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ei={class:"mb-6 md:mb-8"},si={class:"flex justify-center"},ai={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},ri={key:0,class:"tab-content"},li={key:1,class:"tab-content"},ii={key:0,class:"mb-6 md:mb-8"},oi={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},ni={key:1,class:"fade-in"},di={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},ui={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},ci={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},mi={class:"flex w-full items-center gap-2 md:w-auto"},gi=["disabled"],fi=["disabled"],xi=["disabled"],yi={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},pi={key:2,class:"tab-content"},bi={class:"glass-strong rounded-3xl shadow-xl"},vi={__name:"ApiStatsView",setup(W){const f=$t(),s=rt(),k=Tt(),u=pt(),x=N("overview"),y=U(()=>k.isDarkMode),{apiKey:b,apiId:T,loading:M,modelStatsLoading:v,oemLoading:A,error:B,statsPeriod:C,statsData:K,oemSettings:c,multiKeyMode:n}=at(s),{queryStats:R,switchPeriod:a,loadStatsWithApiId:m,loadOemSettings:D,reset:S}=s,j=N(!1),P=()=>{j.value=!0},_=()=>{j.value=!1},z=()=>{x.value="overview",u.loadPublicStats()},H=F=>{(F.ctrlKey||F.metaKey)&&F.key==="Enter"&&(!M.value&&b.value.trim()&&R(),F.preventDefault()),F.key==="Escape"&&S()};return wt(()=>{k.initTheme(),D(),u.loadPublicStats();const F=f.query.apiId,h=f.query.apiKey;F&&F.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(T.value=F,m()):h&&h.length>10&&(b.value=h),document.addEventListener("keydown",H)}),yt(()=>{document.removeEventListener("keydown",H)}),xt(b,F=>{F||s.clearData()}),(F,h)=>{var X;const Q=St("router-link");return r(),o("div",{class:O(["min-h-screen p-4 md:p-6",y.value?"gradient-bg-dark":"gradient-bg"])},[t("div",Gl,[t("div",Zl,[Y(Kt,{loading:e(A),"logo-src":e(c).siteIconData||e(c).siteIcon,subtitle:x.value==="stats"?"API Key 使用统计":x.value==="overview"?"服务状态概览":"使用教程",title:e(c).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",Ql,[t("div",Xl,[Y(At,{mode:"dropdown"})]),e(c).ldapEnabled||e(c).showAdminButton!==!1?(r(),o("div",ti)):L("",!0),e(c).ldapEnabled?(r(),ot(Q,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:ft(()=>h[4]||(h[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):L("",!0),e(c).showAdminButton!==!1?(r(),ot(Q,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:ft(()=>h[5]||(h[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):L("",!0)])])]),t("div",ei,[t("div",si,[t("div",ai,[t("button",{class:O(["tab-pill-button",x.value==="overview"?"active":""]),onClick:z},h[6]||(h[6]=[t("i",{class:"fas fa-tachometer-alt mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"状态概览",-1)]),2),t("button",{class:O(["tab-pill-button",x.value==="stats"?"active":""]),onClick:h[0]||(h[0]=d=>x.value="stats")},h[7]||(h[7]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:O(["tab-pill-button",x.value==="tutorial"?"active":""]),onClick:h[1]||(h[1]=d=>x.value="tutorial")},h[8]||(h[8]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),x.value==="overview"?(r(),o("div",ri,[Y(Yl)])):L("",!0),x.value==="stats"?(r(),o("div",li,[Y(de),e(B)?(r(),o("div",ii,[t("div",oi,[h[9]||(h[9]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),w(" "+i(e(B)),1)])])):L("",!0),e(K)?(r(),o("div",ni,[t("div",di,[t("div",ui,[t("div",ci,[h[13]||(h[13]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",mi,[t("button",{class:O(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(C)==="daily"}]]),disabled:e(M)||e(v),onClick:h[2]||(h[2]=d=>e(a)("daily"))},h[10]||(h[10]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),w(" 今日 ",-1)]),10,gi),t("button",{class:O(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(C)==="monthly"}]]),disabled:e(M)||e(v),onClick:h[3]||(h[3]=d=>e(a)("monthly"))},h[11]||(h[11]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),w(" 本月 ",-1)]),10,fi),e(n)?L("",!0):(r(),o("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(M),onClick:P},h[12]||(h[12]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),w(" 测试 ",-1)]),8,xi))])])]),Y(Ks),t("div",yi,[Y(zs,{class:"h-full"}),e(n)?(r(),ot(br,{key:0,class:"h-full"})):(r(),ot(ar,{key:1,class:"h-full"}))]),Y(Wr)])])):L("",!0)])):L("",!0),x.value==="tutorial"?(r(),o("div",pi,[t("div",bi,[Y(Mt)])])):L("",!0),Y(pl,{"api-key-name":((X=e(K))==null?void 0:X.name)||"","api-key-value":e(b),show:j.value,onClose:_},null,8,["api-key-name","api-key-value","show"])],2)}}},Ai=st(vi,[["__scopeId","data-v-818f3fa5"]]);export{Ai as default}; diff --git a/web/admin-spa/dist/assets/ApiStatsView-D5HJh2jj.css b/web/admin-spa/dist/assets/ApiStatsView-D5HJh2jj.css new file mode 100644 index 00000000..77c206e0 --- /dev/null +++ b/web/admin-spa/dist/assets/ApiStatsView-D5HJh2jj.css @@ -0,0 +1 @@ +.api-input-wide-card[data-v-11e74200]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-11e74200]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-11e74200]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-11e74200]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-11e74200]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-11e74200]{align-items:end;gap:1rem}.wide-card-input[data-v-11e74200]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-11e74200]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-11e74200]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-11e74200]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa26,0 10px 15px -3px #0006;background:#1f2937f2;color:#f3f4f6}.btn[data-v-11e74200]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-11e74200]{padding:14px 24px;font-size:16px}.btn-primary[data-v-11e74200]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary[data-v-11e74200]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-primary[data-v-11e74200]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-11e74200]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:#1f2937cc!important;border:1px solid rgba(75,85,99,.5)!important;color:#d1d5db!important}.security-notice[data-v-11e74200]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:#1f2937e6!important;border-color:#4b556399!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-11e74200]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-11e74200]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-11e74200]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-11e74200]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:#1f2937;box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-11e74200]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:#9ca3af}.mode-switch-btn[data-v-11e74200]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-11e74200]{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 4px #667eea33}.mode-switch-btn.active[data-v-11e74200]:hover{box-shadow:0 4px 6px #667eea4d}.mode-switch-btn i[data-v-11e74200]{font-size:.875rem}.fade-enter-active[data-v-11e74200],.fade-leave-active[data-v-11e74200]{transition:all .3s ease}.fade-enter-from[data-v-11e74200],.fade-leave-to[data-v-11e74200]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-11e74200]{animation:spin-11e74200 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-11e74200{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-11e74200]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-11e74200]{justify-content:center}.api-input-wide-card[data-v-11e74200]{padding:1.25rem}.wide-card-title[data-v-11e74200]{margin-bottom:1.25rem}.wide-card-title h2[data-v-11e74200]{font-size:1.5rem}.wide-card-title p[data-v-11e74200]{font-size:.875rem}.api-input-grid[data-v-11e74200]{gap:1rem}.wide-card-input[data-v-11e74200]{padding:12px 14px;font-size:15px}.btn-query[data-v-11e74200]{padding:12px 20px;font-size:15px}.security-notice[data-v-11e74200]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-11e74200]{padding:5px 8px}.toggle-icon[data-v-11e74200]{width:18px;height:18px}.hint-text[data-v-11e74200]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-11e74200]{padding:1rem}.wide-card-title h2[data-v-11e74200]{font-size:1.25rem}.wide-card-title p[data-v-11e74200]{font-size:.8rem}.wide-card-input[data-v-11e74200]{padding:10px 12px;font-size:14px}.btn-query[data-v-11e74200]{padding:10px 16px;font-size:14px}}.card-section[data-v-b72df2cd]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;border-width:1px;border-color:#e2e8f0b3;background-color:#ffffffe6;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-section[data-v-b72df2cd]:is(.dark *){border-color:#33415599;background-color:#0f172ab3}@media (min-width: 768px){.card-section[data-v-b72df2cd]{padding:1.5rem}}.dark{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.section-header[data-v-b72df2cd]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-b72df2cd]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.header-title[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.header-title[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem}}.header-tag[data-v-b72df2cd]{margin-left:auto;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.header-tag[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.info-grid[data-v-b72df2cd]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{gap:1rem}}.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem}.info-item[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.info-item[data-v-b72df2cd]{min-height:86px}.info-label[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.metric-grid[data-v-b72df2cd]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-b72df2cd]{gap:1rem}}.metric-card[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.metric-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.metric-value[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-b72df2cd]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-b72df2cd]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.metric-label[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.account-card[data-v-b72df2cd]{border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fffc;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-b72df2cd]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.account-icon[data-v-b72df2cd]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-b72df2cd]{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.account-name[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.rate-badge[data-v-b72df2cd]{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.rate-badge[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.progress-row[data-v-b72df2cd]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-b72df2cd]{height:.375rem;flex:1 1 0%;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.progress-track[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.progress-bar[data-v-b72df2cd]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.progress-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-row[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fff9;padding:.75rem}.quota-row[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a80}.quota-header[data-v-b72df2cd]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-b72df2cd]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-b72df2cd]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]{margin-top:.25rem;font-size:11px;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.card[data-v-d9e5c1dd]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-d9e5c1dd]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-d9e5c1dd]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-9bba2ba4]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-9bba2ba4]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-9bba2ba4]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-39572a8e]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-39572a8e]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-39572a8e]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-b3b8dc5f]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.model-usage-item[data-v-b3b8dc5f]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-b3b8dc5f]{padding:16px}}.model-usage-item[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-b3b8dc5f]{animation:spin-b3b8dc5f 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-b3b8dc5f{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-b3b8dc5f]{padding:10px}.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr}}.public-stats-overview[data-v-4ed7dff1]{border-radius:.75rem;border-width:1px;border-color:#e5e7eb80;background-color:#fffc;padding:1rem;--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.public-stats-overview[data-v-4ed7dff1]:is(.dark *){border-color:#37415180;background-color:#1f2937cc}@media (min-width: 768px){.public-stats-overview[data-v-4ed7dff1]{padding:1.5rem}}.public-stats-overview[data-v-4ed7dff1]{animation:fadeIn-4ed7dff1 .3s ease-out}@keyframes fadeIn-4ed7dff1{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.header-section[data-v-4ed7dff1]{margin-bottom:1rem;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));padding-bottom:1rem}.header-section[data-v-4ed7dff1]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}@media (min-width: 768px){.header-section[data-v-4ed7dff1]{margin-bottom:1.5rem;flex-direction:row;padding-bottom:1.5rem}}.main-content[data-v-4ed7dff1]{display:grid;gap:1rem}@media (min-width: 768px){.main-content[data-v-4ed7dff1]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}}.stats-section[data-v-4ed7dff1]{border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.stats-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}.model-section[data-v-4ed7dff1]{border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.model-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}.chart-section[data-v-4ed7dff1]{margin-top:1rem;border-radius:.5rem;background-color:#f9fafb80;padding:1rem}.chart-section[data-v-4ed7dff1]:is(.dark *){background-color:#3741514d}@media (min-width: 768px){.chart-section[data-v-4ed7dff1]{margin-top:1.5rem}}.section-title[data-v-4ed7dff1]{margin-bottom:.5rem;text-align:center;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.section-title[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.section-title-left[data-v-4ed7dff1]{margin-bottom:.75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.section-title-left[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.period-label[data-v-4ed7dff1]{margin-left:.25rem;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1));padding:.125rem .375rem;font-size:10px;font-weight:400;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.period-label[data-v-4ed7dff1]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.status-badge[data-v-4ed7dff1]{display:inline-flex;align-items:center;gap:.375rem;border-radius:9999px;padding:.25rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500}.status-healthy[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.status-healthy[data-v-4ed7dff1]:is(.dark *){background-color:#14532d4d;--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.status-degraded[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.status-degraded[data-v-4ed7dff1]:is(.dark *){background-color:#713f124d;--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.status-dot[data-v-4ed7dff1]{display:inline-block;height:.5rem;width:.5rem;border-radius:9999px}.status-healthy .status-dot[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1));animation:pulse-4ed7dff1 2s infinite}.status-degraded .status-dot[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1));animation:pulse-4ed7dff1 1s infinite}@keyframes pulse-4ed7dff1{0%,to{opacity:1}50%{opacity:.5}}.platform-badge[data-v-4ed7dff1]{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.platform-badge.available[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.platform-badge.available[data-v-4ed7dff1]:is(.dark *){background-color:#1e3a8a4d;--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.platform-badge.unavailable[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1));text-decoration-line:line-through}.platform-badge.unavailable[data-v-4ed7dff1]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.stats-grid[data-v-4ed7dff1]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.stat-item[data-v-4ed7dff1]{border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.75rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.stat-item[data-v-4ed7dff1]:is(.dark *){background-color:#1f293780}.stat-value[data-v-4ed7dff1]{font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.stat-value[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.stat-value[data-v-4ed7dff1]{font-size:1.25rem;line-height:1.75rem}}.stat-label[data-v-4ed7dff1]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.stat-label[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.model-chart-container[data-v-4ed7dff1]{height:160px}@media (min-width: 768px){.model-chart-container[data-v-4ed7dff1]{height:180px}}.chart-container[data-v-4ed7dff1]{border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding:.75rem}.chart-container[data-v-4ed7dff1]:is(.dark *){background-color:#37415180}.chart-container[data-v-4ed7dff1]{height:180px}.chart-legend[data-v-4ed7dff1]{margin-top:.5rem;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:1rem}.legend-item[data-v-4ed7dff1]{display:flex;align-items:center;gap:.375rem}.legend-dot[data-v-4ed7dff1]{display:inline-block;height:.625rem;width:.625rem;border-radius:9999px}.legend-tokens[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.legend-keys[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.legend-accounts[data-v-4ed7dff1]{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.legend-text[data-v-4ed7dff1]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.legend-text[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-state[data-v-4ed7dff1]{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));padding-top:1.5rem;padding-bottom:1.5rem}.empty-state[data-v-4ed7dff1]:is(.dark *){background-color:#37415180}.empty-icon[data-v-4ed7dff1]{margin-bottom:.5rem;font-size:1.5rem;line-height:2rem;--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-icon[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.empty-text[data-v-4ed7dff1]{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.empty-text[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-hint[data-v-4ed7dff1]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.empty-hint[data-v-4ed7dff1]:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.public-stats-loading[data-v-4ed7dff1]{display:flex;align-items:center;justify-content:center;padding-top:2rem;padding-bottom:2rem}.public-stats-empty[data-v-4ed7dff1]{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:.75rem;border-width:1px;border-color:#e5e7eb80;background-color:#fffc;padding-top:2rem;padding-bottom:2rem;--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.public-stats-empty[data-v-4ed7dff1]:is(.dark *){border-color:#37415180;background-color:#1f2937cc}.loading-spinner[data-v-4ed7dff1]{height:1.5rem;width:1.5rem}@keyframes spin-4ed7dff1{to{transform:rotate(360deg)}}.loading-spinner[data-v-4ed7dff1]{animation:spin-4ed7dff1 1s linear infinite;border-radius:9999px;border-width:2px;--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));border-top-color:transparent}.gradient-bg[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2,#f093fb);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg-dark[data-v-818f3fa5]{background:linear-gradient(135deg,#1e293b,#334155,#475569);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-818f3fa5]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-818f3fa5]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(100,116,139,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(71,85,105,.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(30,41,59,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-818f3fa5]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-818f3fa5]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-818f3fa5]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-818f3fa5]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-818f3fa5]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-818f3fa5]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-818f3fa5],.user-login-button span[data-v-818f3fa5]{position:relative;z-index:1}.admin-button-refined[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px #667eea40,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-818f3fa5]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#764ba2,#667eea);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-818f3fa5]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,#764ba2,#667eea);box-shadow:0 8px 20px #764ba259,inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-818f3fa5]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#9333ea66;box-shadow:0 8px 20px #667eea4d,inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-818f3fa5]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-818f3fa5],.admin-button-refined span[data-v-818f3fa5]{position:relative;z-index:1}.period-btn[data-v-818f3fa5]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-818f3fa5]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.period-btn[data-v-818f3fa5]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-818f3fa5]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-818f3fa5]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-818f3fa5]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-818f3fa5]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-818f3fa5]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-818f3fa5]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-818f3fa5]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-818f3fa5]{background:#fff;color:#764ba2;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-818f3fa5]{font-size:.875rem}.tab-content[data-v-818f3fa5]{animation:tabFadeIn-818f3fa5 .4s ease-out}@keyframes tabFadeIn-818f3fa5{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-818f3fa5]{animation:fadeIn-818f3fa5 .6s ease-out}@keyframes fadeIn-818f3fa5{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}} diff --git a/web/admin-spa/dist/assets/ConfirmModal-CZV4xGP-.js b/web/admin-spa/dist/assets/ConfirmModal-BGRLg47v.js similarity index 92% rename from web/admin-spa/dist/assets/ConfirmModal-CZV4xGP-.js rename to web/admin-spa/dist/assets/ConfirmModal-BGRLg47v.js index 623aeadc..e6850480 100644 --- a/web/admin-spa/dist/assets/ConfirmModal-CZV4xGP-.js +++ b/web/admin-spa/dist/assets/ConfirmModal-BGRLg47v.js @@ -1 +1 @@ -import{_ as n}from"./index-Cr7hSgrN.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-R8HMg95E.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C}; +import{_ as n}from"./index-BAse2XU9.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-BVUySZOn.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C}; diff --git a/web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css b/web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css deleted file mode 100644 index fed61041..00000000 --- a/web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css +++ /dev/null @@ -1 +0,0 @@ -.modal[data-v-c629d8ff]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)} diff --git a/web/admin-spa/dist/assets/DashboardView-CJCkJ1Cw.css b/web/admin-spa/dist/assets/DashboardView-CJCkJ1Cw.css deleted file mode 100644 index 28b67e50..00000000 --- a/web/admin-spa/dist/assets/DashboardView-CJCkJ1Cw.css +++ /dev/null @@ -1 +0,0 @@ -.custom-date-picker[data-v-a189a0de]{font-size:13px}@keyframes spin-a189a0de{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin[data-v-a189a0de]{animation:spin-a189a0de 1s linear infinite} diff --git a/assets/DashboardView-Dz8mMDNV.js b/web/admin-spa/dist/assets/DashboardView-L6RVGrpZ.js similarity index 99% rename from assets/DashboardView-Dz8mMDNV.js rename to web/admin-spa/dist/assets/DashboardView-L6RVGrpZ.js index 423a7ba7..f5147d86 100644 --- a/assets/DashboardView-Dz8mMDNV.js +++ b/web/admin-spa/dist/assets/DashboardView-L6RVGrpZ.js @@ -1 +1 @@ -import{E as Qt}from"./element-plus-BUfCkBQO.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-R8HMg95E.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-Cr7hSgrN.js";import{C as Ft}from"./chart-yFHxLHpB.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default}; +import{E as Qt}from"./element-plus-CKhypU-Q.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-BVUySZOn.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-BAse2XU9.js";import{C as Ft}from"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default}; diff --git a/web/admin-spa/dist/assets/LoginView-C_fN82yI.js b/web/admin-spa/dist/assets/LoginView-C_fN82yI.js new file mode 100644 index 00000000..7d612027 --- /dev/null +++ b/web/admin-spa/dist/assets/LoginView-C_fN82yI.js @@ -0,0 +1 @@ +import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as p,O as c,y as r}from"./vue-vendor-BVUySZOn.js";import{_ as v,u as k,a as S}from"./index-BAse2XU9.js";import{T as L}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[p,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[p,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),c(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),c(m(o(e).loginError),1)])):d("",!0)])]))}},J=v(A,[["__scopeId","data-v-adc70cd7"]]);export{J as default}; diff --git a/web/admin-spa/dist/assets/LoginView-Cqf_qBij.js b/web/admin-spa/dist/assets/LoginView-Cqf_qBij.js deleted file mode 100644 index 38cb0152..00000000 --- a/web/admin-spa/dist/assets/LoginView-Cqf_qBij.js +++ /dev/null @@ -1 +0,0 @@ -import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as c,O as p,y as r}from"./vue-vendor-R8HMg95E.js";import{_ as v,u as k,a as S}from"./index-Cr7hSgrN.js";import{T as L}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[c,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[c,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),p(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),p(m(o(e).loginError),1)])):d("",!0)])]))}},H=v(A,[["__scopeId","data-v-34e2cac0"]]);export{H as default}; diff --git a/web/admin-spa/dist/assets/LoginView-tn0RQdqM.css b/web/admin-spa/dist/assets/LoginView-tn0RQdqM.css deleted file mode 100644 index e69de29b..00000000 diff --git a/web/admin-spa/dist/assets/LogoTitle-CwgrPCRk.js b/web/admin-spa/dist/assets/LogoTitle-BKx-1OIz.js similarity index 88% rename from web/admin-spa/dist/assets/LogoTitle-CwgrPCRk.js rename to web/admin-spa/dist/assets/LogoTitle-BKx-1OIz.js index c87c5a98..c569c9d1 100644 --- a/web/admin-spa/dist/assets/LogoTitle-CwgrPCRk.js +++ b/web/admin-spa/dist/assets/LogoTitle-BKx-1OIz.js @@ -1 +1 @@ -import{_ as d}from"./index-Cr7hSgrN.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-R8HMg95E.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L}; +import{_ as d}from"./index-BAse2XU9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-BVUySZOn.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L}; diff --git a/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css b/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css deleted file mode 100644 index 8604a7ce..00000000 --- a/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css +++ /dev/null @@ -1 +0,0 @@ -@keyframes pulse-15eb26fd{0%{opacity:.7}50%{opacity:.4}to{opacity:.7}}.animate-pulse[data-v-15eb26fd]{animation:pulse-15eb26fd 2s cubic-bezier(.4,0,.6,1) infinite}.header-title[data-v-15eb26fd]{text-shadow:0 1px 2px rgba(0,0,0,.1)} diff --git a/web/admin-spa/dist/assets/MainLayout-Bd5PtuA8.js b/web/admin-spa/dist/assets/MainLayout-Bd5PtuA8.js new file mode 100644 index 00000000..4f912454 --- /dev/null +++ b/web/admin-spa/dist/assets/MainLayout-Bd5PtuA8.js @@ -0,0 +1 @@ +import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-BVUySZOn.js";import{_ as N,u as S,c as V,s as h}from"./index-BAse2XU9.js";import{L as Y}from"./LogoTitle-BKx-1OIz.js";import{T as G}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},Qe=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{Qe as default}; diff --git a/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css b/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css deleted file mode 100644 index 61c20f5f..00000000 --- a/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css +++ /dev/null @@ -1 +0,0 @@ -.user-menu-button[data-v-1d65ae6c]{position:relative;overflow:hidden;min-height:38px}.user-menu-button[data-v-1d65ae6c]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.user-menu-button[data-v-1d65ae6c]:hover:before{left:100%}.user-menu-dropdown[data-v-1d65ae6c]{margin-top:8px;animation:slideDown-1d65ae6c .3s ease-out}@keyframes slideDown-1d65ae6c{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-1d65ae6c],.fade-leave-active[data-v-1d65ae6c]{transition:opacity .3s}.fade-enter-from[data-v-1d65ae6c],.fade-leave-to[data-v-1d65ae6c]{opacity:0} diff --git a/web/admin-spa/dist/assets/MainLayout-DM3nuiFe.js b/web/admin-spa/dist/assets/MainLayout-DM3nuiFe.js deleted file mode 100644 index 69982b8b..00000000 --- a/web/admin-spa/dist/assets/MainLayout-DM3nuiFe.js +++ /dev/null @@ -1 +0,0 @@ -import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-R8HMg95E.js";import{_ as N,u as S,c as V,s as h}from"./index-Cr7hSgrN.js";import{L as Y}from"./LogoTitle-CwgrPCRk.js";import{T as G}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},He=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{He as default}; diff --git a/web/admin-spa/dist/assets/RecordDetailModal-BqG3nD3p.css b/web/admin-spa/dist/assets/RecordDetailModal-BqG3nD3p.css new file mode 100644 index 00000000..9fb6a44b --- /dev/null +++ b/web/admin-spa/dist/assets/RecordDetailModal-BqG3nD3p.css @@ -0,0 +1 @@ +.record-detail-modal[data-v-61b5b1eb] .el-dialog__header{margin:0;padding:16px 16px 0}.record-detail-modal[data-v-61b5b1eb] .el-dialog__body{padding:12px 16px 4px}.record-detail-modal[data-v-61b5b1eb] .el-dialog__footer{padding:8px 16px 16px} diff --git a/assets/RecordDetailModal-lW2AGtWL.js b/web/admin-spa/dist/assets/RecordDetailModal-CVWv3dXE.js similarity index 96% rename from assets/RecordDetailModal-lW2AGtWL.js rename to web/admin-spa/dist/assets/RecordDetailModal-CVWv3dXE.js index d3669f04..db568d64 100644 --- a/assets/RecordDetailModal-lW2AGtWL.js +++ b/web/admin-spa/dist/assets/RecordDetailModal-CVWv3dXE.js @@ -1 +1 @@ -import{b as C,e as R}from"./element-plus-BUfCkBQO.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-Cr7hSgrN.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-R8HMg95E.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f}; +import{b as C,e as R}from"./element-plus-CKhypU-Q.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-BAse2XU9.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-BVUySZOn.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f}; diff --git a/web/admin-spa/dist/assets/SettingsView-BrlNWmbu.css b/web/admin-spa/dist/assets/SettingsView-BrlNWmbu.css new file mode 100644 index 00000000..5c186196 --- /dev/null +++ b/web/admin-spa/dist/assets/SettingsView-BrlNWmbu.css @@ -0,0 +1 @@ +.settings-container[data-v-f76246ee]{min-height:calc(100vh - 300px)}.card[data-v-f76246ee]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-f76246ee]{background:#1f2937;border:1px solid #374151;box-shadow:0 2px 12px #0000004d}.table-container[data-v-f76246ee]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-f76246ee]{border:1px solid #4b5563}.table-row[data-v-f76246ee]{transition:background-color .2s ease}.table-row[data-v-f76246ee]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-f76246ee]:hover{background-color:#374151}.form-input[data-v-f76246ee]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-f76246ee]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-f76246ee]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-f76246ee]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-f76246ee]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-f76246ee]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-f76246ee]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-f76246ee]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-f76246ee]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-f76246ee]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-f76246ee]{height:1.25rem;width:1.25rem}@keyframes spin-f76246ee{to{transform:rotate(360deg)}}.loading-spinner[data-v-f76246ee]{animation:spin-f76246ee 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))} diff --git a/web/admin-spa/dist/assets/SettingsView-BuM-cxrS.js b/web/admin-spa/dist/assets/SettingsView-BuM-cxrS.js new file mode 100644 index 00000000..7f489287 --- /dev/null +++ b/web/admin-spa/dist/assets/SettingsView-BuM-cxrS.js @@ -0,0 +1,3 @@ +import{aP as De,r as S,aX as Ve,c as xe,o as ye,q as Qe,Z as Re,x as i,z as t,L as p,C as V,O as l,u as o,K as d,S as z,aq as x,al as I,P as y,aT as C,Q as H,ac as _,aV as X,R as qe,J as Pe,T as je,Y as Le,y as u}from"./vue-vendor-BVUySZOn.js";import{c as B,_ as Ke,s as c}from"./index-BAse2XU9.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const Oe=De("settings",()=>{const A=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,publicStatsShowModelDistribution:!0,publicStatsModelDistributionPeriod:"today",publicStatsShowTokenTrends:!1,publicStatsShowApiKeysTrends:!1,publicStatsShowAccountTrends:!1,updatedAt:null}),Q=S(!1),L=S(!1),T=async()=>{Q.value=!0;try{const b=await B.get("/admin/oem-settings");return b&&b.success&&(A.value={...A.value,...b.data},K()),b}catch(b){throw console.error("Failed to load OEM settings:",b),b}finally{Q.value=!1}},n=async b=>{L.value=!0;try{const v=await B.put("/admin/oem-settings",b);return v&&v.success&&(A.value={...A.value,...v.data},K()),v}catch(v){throw console.error("Failed to save OEM settings:",v),v}finally{L.value=!1}},J=async()=>{const b={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,publicStatsEnabled:!1,updatedAt:null};return A.value={...b},await n(b)},K=()=>{if(A.value.siteName&&(document.title=`${A.value.siteName} - 管理后台`),A.value.siteIconData||A.value.siteIcon){const b=document.querySelector('link[rel="icon"]')||document.createElement("link");b.rel="icon",b.href=A.value.siteIconData||A.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(b)}};return{oemSettings:A,loading:Q,saving:L,loadOemSettings:T,saveOemSettings:n,resetOemSettings:J,applyOemSettings:K,formatDateTime:b=>b?new Date(b).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:b=>{const v=[];return b.size>350*1024&&v.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(b.type)||v.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:v.length===0,errors:v}},fileToBase64:b=>new Promise((v,E)=>{const q=new FileReader;q.onload=P=>v(P.target.result),q.onerror=E,q.readAsDataURL(b)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},We={class:"mb-6"},$e={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},He={key:1},Xe={class:"table-container hidden sm:block"},Je={class:"min-w-full"},Ye={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ge={class:"table-row"},Ze={class:"px-6 py-4"},_e={class:"table-row"},et={class:"px-6 py-4"},tt={class:"space-y-3"},rt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],st={class:"table-row"},lt={class:"px-6 py-4"},ot={class:"flex items-center"},nt={class:"inline-flex cursor-pointer items-center"},dt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},it={class:"px-6 py-6",colspan:"2"},ut={class:"flex items-center justify-between"},gt={class:"flex gap-3"},ft=["disabled"],ct={key:0,class:"loading-spinner mr-2"},bt={key:1,class:"fas fa-save mr-2"},pt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},yt={class:"space-y-4 sm:hidden"},vt={class:"glass-card p-4"},mt={class:"glass-card p-4"},kt={class:"space-y-3"},ht={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wt=["src"],St={class:"glass-card p-4"},Tt={class:"space-y-2"},Ut={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Mt={class:"glass-card p-4"},It={class:"flex flex-col gap-3"},At=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},Dt=["disabled"],Vt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Rt={class:"flex items-center justify-between"},qt={class:"relative inline-flex cursor-pointer items-center"},Pt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Lt={class:"font-medium text-gray-700 dark:text-gray-300"},Kt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Wt={class:"mb-4 flex items-center justify-between"},$t={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},Ht={class:"flex-1"},Xt={class:"flex items-center"},Jt={class:"font-semibold text-gray-800 dark:text-gray-200"},Yt={class:"text-sm text-gray-500 dark:text-gray-400"},Gt={class:"mt-3 space-y-1 text-sm"},Zt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},_t={class:"truncate"},er={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},tr={class:"truncate"},rr={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},ar={class:"truncate"},sr={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},lr={class:"truncate"},or={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},nr={class:"truncate"},dr={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},ir={class:"truncate"},ur={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},gr={class:"ml-4 flex items-center space-x-2"},fr={class:"relative inline-flex cursor-pointer items-center"},cr=["checked","onChange"],br=["onClick"],pr=["onClick"],xr=["onClick"],yr={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},vr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},mr={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},kr={key:0,class:"py-12 text-center"},hr={key:1},wr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Sr={class:"flex items-center justify-between"},Tr={class:"relative inline-flex cursor-pointer items-center"},Ur={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Cr={class:"flex items-center justify-between"},Mr={class:"relative inline-flex cursor-pointer items-center"},Ir={key:0,class:"mt-6 space-y-4"},Ar={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Br={class:"flex items-center justify-between"},Er={class:"relative inline-flex cursor-pointer items-center"},Dr={key:0,class:"mt-6 space-y-4"},Vr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qr={class:"flex items-center justify-between"},Rr={class:"relative inline-flex cursor-pointer items-center"},qr={key:0,class:"mt-6 space-y-4"},Pr={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},jr={key:0,class:"ml-2"},Lr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kr={class:"mb-6 flex items-center justify-between"},Or={class:"inline-flex cursor-pointer items-center"},Fr={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Nr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-700/50"},Wr={class:"grid gap-3 sm:grid-cols-2"},$r={class:"rounded-lg border border-gray-200 bg-white p-3 transition-colors dark:border-gray-600 dark:bg-gray-800"},zr={class:"flex cursor-pointer items-center gap-3"},Hr={key:0,class:"mt-3 pl-7"},Xr={class:"inline-flex rounded-lg bg-gray-100 p-0.5 dark:bg-gray-700/50"},Jr=["onClick"],Yr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Gr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},Zr={class:"flex cursor-pointer items-center gap-3 rounded-lg border border-gray-200 bg-white p-3 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700"},_r={class:"mt-6 flex items-center justify-between"},ea={class:"flex gap-3"},ta=["disabled"],ra={key:0,class:"loading-spinner mr-2"},aa={key:1,class:"fas fa-save mr-2"},sa={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},la={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},oa={class:"flex items-center justify-between"},na={class:"flex items-center space-x-3"},da={class:"text-xl font-semibold text-gray-900 dark:text-white"},ia={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},ua={class:"p-6"},ga={class:"space-y-5"},fa={class:"relative"},ca=["disabled"],ba={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},pa={key:0},xa={class:"relative"},ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},va={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},ma={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},ka={class:"text-sm text-blue-700 dark:text-blue-300"},ha={key:1,class:"space-y-5"},wa={key:2,class:"space-y-5"},Sa={key:3,class:"space-y-5"},Ta={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ua={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},Ca={class:"space-y-4"},Ma={class:"flex items-center justify-between"},Ia={class:"flex cursor-pointer items-center",for:"enableSign"},Aa={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},Ba={key:0},Ea={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},Da={class:"flex items-center justify-between"},Va={class:"flex space-x-3"},Qa=["disabled"],Ra=["disabled"],qa=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(A){const Q=Oe(),{loading:L,saving:T,oemSettings:n}=Ve(Q),J=[{value:"today",label:"今天"},{value:"24h",label:"24小时"},{value:"7d",label:"7天"},{value:"30d",label:"30天"},{value:"all",label:"全部"}],K=S(),U=S("branding"),f=S(!0),M=S(new AbortController),b=xe({get(){return!n.value.showAdminButton},set(s){n.value.showAdminButton=!s}}),v=S(!1),E=S(!1),q=S(!1),P=S(!1),Y={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...Y},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),G=S(!1),g=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),j=S(!1),D=S(null),r=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),ee=ye(U,async s=>{f.value&&(s==="webhook"?await O():s==="claude"&&await me())}),te=ye(()=>r.value.type,s=>{v.value=!1,E.value=!1,D.value||(s==="bark"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1):s==="smtp"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):s==="telegram"?(r.value.url="",r.value.enableSign=!1,r.value.secret="",r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""):(r.value.deviceKey="",r.value.serverUrl="",r.value.level="",r.value.sound="",r.value.group="",r.value.host="",r.value.port=null,r.value.secure=!1,r.value.user="",r.value.pass="",r.value.from="",r.value.to="",r.value.timeout=null,r.value.ignoreTLS=!1,r.value.botToken="",r.value.chatId="",r.value.apiBaseUrl="",r.value.proxyUrl=""))}),ve=xe(()=>r.value.type==="bark"?!!r.value.deviceKey:r.value.type==="telegram"?!!(r.value.botToken&&r.value.chatId):r.value.type==="smtp"?!!(r.value.host&&r.value.user&&r.value.pass&&r.value.to):!!r.value.url&&!v.value);Qe(async()=>{try{await Q.loadOemSettings(),U.value==="webhook"&&await O()}catch{c("加载设置失败","error")}}),Re(()=>{f.value=!1,M.value&&M.value.abort(),ee&&ee(),te&&te(),j.value&&(j.value=!1,D.value=null)});const O=async()=>{if(f.value)try{const s=await B.get("/admin/webhook/config",{signal:M.value.signal});if(s.success&&f.value){const e=s.config||{};k.value={...e,notificationTypes:{...Y,...e.notificationTypes||{}}}}}catch(s){if(s.name==="AbortError"||!f.value)return;c("获取webhook配置失败","error"),console.error(s)}},F=async()=>{if(f.value)try{const s={...k.value,notificationTypes:{...Y,...k.value.notificationTypes||{}}};(await B.post("/admin/webhook/config",s,{signal:M.value.signal})).success&&f.value&&(k.value=s,c("配置已保存","success"))}catch(s){if(s.name==="AbortError"||!f.value)return;c("保存配置失败","error"),console.error(s)}},me=async()=>{var s,e,a,m,h,$,ie,ue,ge,fe,ce,be,pe;if(f.value){G.value=!0;try{const w=await B.get("/admin/claude-relay-config",{signal:M.value.signal});w.success&&f.value&&(g.value={claudeCodeOnlyEnabled:((s=w.config)==null?void 0:s.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((a=w.config)==null?void 0:a.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((m=w.config)==null?void 0:m.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:(($=w.config)==null?void 0:$.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ie=w.config)==null?void 0:ie.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((ue=w.config)==null?void 0:ue.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ge=w.config)==null?void 0:ge.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((fe=w.config)==null?void 0:fe.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ce=w.config)==null?void 0:ce.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((be=w.config)==null?void 0:be.updatedAt)||null,updatedBy:((pe=w.config)==null?void 0:pe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!f.value)return;c("获取 Claude 转发配置失败","error"),console.error(w)}finally{f.value&&(G.value=!1)}}},R=async()=>{var s,e;if(f.value)try{const a={claudeCodeOnlyEnabled:g.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:g.value.globalSessionBindingEnabled,sessionBindingErrorMessage:g.value.sessionBindingErrorMessage,sessionBindingTtlDays:g.value.sessionBindingTtlDays,userMessageQueueEnabled:g.value.userMessageQueueEnabled,userMessageQueueDelayMs:g.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:g.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:g.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:g.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:g.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:g.value.concurrentRequestQueueTimeoutMs},m=await B.put("/admin/claude-relay-config",a,{signal:M.value.signal});m.success&&f.value&&(g.value={...g.value,updatedAt:((s=m.config)==null?void 0:s.updatedAt)||new Date().toISOString(),updatedBy:((e=m.config)==null?void 0:e.updatedBy)||null},c("Claude 转发配置已保存","success"))}catch(a){if(a.name==="AbortError"||!f.value)return;c("保存 Claude 转发配置失败","error"),console.error(a)}},ke=()=>{if(["bark","smtp","telegram"].includes(r.value.type)){v.value=!1,E.value=!1;return}const s=r.value.url;if(!s){v.value=!1,E.value=!1;return}try{new URL(s),s.startsWith("http://")||s.startsWith("https://")?(v.value=!1,E.value=!0):(v.value=!0,E.value=!1)}catch{v.value=!0,E.value=!1}},re=()=>{if(r.value.type==="bark"){if(!r.value.deviceKey)return c("请输入Bark设备密钥","error"),!1}else if(r.value.type==="telegram"){if(!r.value.botToken)return c("请输入 Telegram 机器人 Token","error"),!1;if(!r.value.chatId)return c("请输入 Telegram Chat ID","error"),!1;if(r.value.apiBaseUrl)try{const s=new URL(r.value.apiBaseUrl);if(!["http:","https:"].includes(s.protocol))return c("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return c("请输入有效的 Telegram API 基础地址","error"),!1}if(r.value.proxyUrl)try{const s=new URL(r.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(s.protocol))return c("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return c("请输入有效的 Telegram 代理地址","error"),!1}}else if(r.value.type==="smtp"){const s=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:a}of s)if(!r.value[e])return c(`请输入${a}`,"error"),!1}else{if(!r.value.url)return c("请输入Webhook URL","error"),!1;if(v.value)return c("请输入有效的Webhook URL","error"),!1}return!0},he=async()=>{if(f.value&&re()){P.value=!0;try{let s;D.value?s=await B.put(`/admin/webhook/platforms/${D.value.id}`,r.value,{signal:M.value.signal}):s=await B.post("/admin/webhook/platforms",r.value,{signal:M.value.signal}),s.success&&f.value&&(c(D.value?"平台已更新":"平台已添加","success"),await O(),N())}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.message||"操作失败","error"),console.error(s)}finally{f.value&&(P.value=!1)}}},we=s=>{D.value=s,r.value={type:s.type||"wechat_work",name:s.name||"",url:s.url||"",enableSign:s.enableSign||!1,secret:s.secret||"",botToken:s.botToken||"",chatId:s.chatId||"",apiBaseUrl:s.apiBaseUrl||"",proxyUrl:s.proxyUrl||"",deviceKey:s.deviceKey||"",serverUrl:s.serverUrl||"",level:s.level||"",sound:s.sound||"",group:s.group||"",host:s.host||"",port:s.port??null,secure:s.secure||!1,user:s.user||"",pass:s.pass||"",from:s.from||"",to:Array.isArray(s.to)?s.to.join(", "):s.to||"",timeout:s.timeout??null,ignoreTLS:s.ignoreTLS||!1},j.value=!0},Se=async s=>{if(f.value&&confirm("确定要删除这个平台吗?"))try{(await B.delete(`/admin/webhook/platforms/${s}`,{signal:M.value.signal})).success&&f.value&&(c("平台已删除","success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("删除失败","error"),console.error(e)}},Te=async s=>{if(f.value)try{const e=await B.post(`/admin/webhook/platforms/${s}/toggle`,{},{signal:M.value.signal});e.success&&f.value&&(c(e.message,"success"),await O())}catch(e){if(e.name==="AbortError"||!f.value)return;c("操作失败","error"),console.error(e)}},Ue=async s=>{if(f.value)try{const e={type:s.type,secret:s.secret,enableSign:s.enableSign};s.type==="bark"?(e.deviceKey=s.deviceKey,e.serverUrl=s.serverUrl,e.level=s.level,e.sound=s.sound,e.group=s.group):s.type==="smtp"?(e.host=s.host,e.port=s.port,e.secure=s.secure,e.user=s.user,e.pass=s.pass,e.from=s.from,e.to=s.to,e.ignoreTLS=s.ignoreTLS):s.type==="telegram"?(e.botToken=s.botToken,e.chatId=s.chatId,e.apiBaseUrl=s.apiBaseUrl,e.proxyUrl=s.proxyUrl):e.url=s.url,(await B.post("/admin/webhook/test",e,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(e){if(e.name==="AbortError"||!f.value)return;c(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(f.value&&re()){q.value=!0;try{(await B.post("/admin/webhook/test",r.value,{signal:M.value.signal})).success&&f.value&&c("测试成功","success")}catch(s){if(s.name==="AbortError"||!f.value)return;c(s.error||s.message||"测试失败","error"),console.error(s)}finally{f.value&&(q.value=!1)}}},Me=async()=>{var s,e,a,m;if(f.value)try{(await B.post("/admin/webhook/test-notification",{},{signal:M.value.signal})).success&&f.value&&c("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!f.value)return;const $=((e=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:e.message)||((m=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:m.error)||(h==null?void 0:h.message)||"发送失败";c($,"error"),console.error(h)}},N=()=>{f.value&&(j.value=!1,setTimeout(()=>{f.value&&(D.value=null,r.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},v.value=!1,E.value=!1,q.value=!1,P.value=!1)},0))},ae=s=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[s]||s,Ie=s=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[s]||"fas fa-bell",se=s=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[s]||"",Ae=s=>s?s.length<=12?s:`${s.slice(0,6)}...${s.slice(-4)}`:"",Be=s=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[s]||s,Ee=s=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[s]||"",Z=async()=>{try{const s={siteName:n.value.siteName,siteIcon:n.value.siteIcon,siteIconData:n.value.siteIconData,showAdminButton:n.value.showAdminButton,publicStatsEnabled:n.value.publicStatsEnabled,publicStatsShowModelDistribution:n.value.publicStatsShowModelDistribution,publicStatsModelDistributionPeriod:n.value.publicStatsModelDistributionPeriod||"today",publicStatsShowTokenTrends:n.value.publicStatsShowTokenTrends,publicStatsShowApiKeysTrends:n.value.publicStatsShowApiKeysTrends,publicStatsShowAccountTrends:n.value.publicStatsShowAccountTrends},e=await Q.saveOemSettings(s);e&&e.success?c("OEM设置保存成功","success"):c((e==null?void 0:e.message)||"保存失败","error")}catch{c("保存OEM设置失败","error")}},le=async()=>{if(confirm(`确定要重置为默认设置吗? + +这将清除所有自定义的网站名称和图标设置。`))try{const s=await Q.resetOemSettings();s&&s.success?c("已重置为默认设置","success"):c("重置失败","error")}catch{c("重置失败","error")}},oe=async s=>{const e=s.target.files[0];if(!e)return;const a=Q.validateIconFile(e);if(!a.isValid){a.errors.forEach(m=>c(m,"error"));return}try{const m=await Q.fileToBase64(e);n.value.siteIconData=m}catch{c("文件读取失败","error")}s.target.value=""},ne=()=>{n.value.siteIcon="",n.value.siteIconData=""},de=()=>{console.warn("Icon failed to load")},W=Q.formatDateTime;return(s,e)=>(u(),i(H,null,[t("div",Fe,[t("div",Ne,[e[141]||(e[141]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",We,[t("nav",$e,[t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=a=>U.value="branding")},e[53]||(e[53]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=a=>U.value="webhook")},e[54]||(e[54]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=a=>U.value="claude")},e[55]||(e[55]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2),t("button",{class:V(["border-b-2 pb-2 text-sm font-medium transition-colors",U.value==="publicStats"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[3]||(e[3]=a=>U.value="publicStats")},e[56]||(e[56]=[t("i",{class:"fas fa-chart-line mr-2"},null,-1),l(" 公开统计 ",-1)]),2)])]),o(L)?(u(),i("div",ze,e[57]||(e[57]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(u(),i("div",He,[d(t("div",null,[t("div",Xe,[t("table",Je,[t("tbody",Ye,[t("tr",Ge,[e[59]||(e[59]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ze,[d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>o(n).siteName=a),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]]),e[58]||(e[58]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",_e,[e[64]||(e[64]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",et,[t("div",tt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",rt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,at),e[61]||(e[61]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne},e[60]||(e[60]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):p("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:K,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[5]||(e[5]=a=>s.$refs.iconFileInput.click())},e[62]||(e[62]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[63]||(e[63]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",st,[e[67]||(e[67]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",lt,[t("div",ot,[t("label",nt,[d(t("input",{"onUpdate:modelValue":e[6]||(e[6]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[65]||(e[65]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",dt,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[66]||(e[66]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",it,[t("div",ut,[t("div",gt,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ct)):(u(),i("i",bt)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ft),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[68]||(e[68]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,pt)]),o(n).updatedAt?(u(),i("div",xt,[e[69]||(e[69]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])])])]),t("div",yt,[t("div",vt,[e[70]||(e[70]=C('

站点名称

自定义您的站点品牌名称

',1)),d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=a=>o(n).siteName=a),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[x,o(n).siteName]])]),t("div",mt,[e[74]||(e[74]=C('

站点图标

上传自定义图标或输入图标URL

',1)),t("div",kt,[o(n).siteIconData||o(n).siteIcon?(u(),i("div",ht,[t("img",{alt:"图标预览",class:"h-8 w-8",src:o(n).siteIconData||o(n).siteIcon,onError:de},null,40,wt),e[71]||(e[71]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ne}," 删除 ")])):p("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:oe},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[8]||(e[8]=a=>s.$refs.iconFileInputMobile.click())},e[72]||(e[72]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[73]||(e[73]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",St,[e[77]||(e[77]=C('

管理入口

控制登录按钮在首页的显示

',1)),t("div",Tt,[t("label",Ut,[d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=a=>b.value=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,b.value]]),e[75]||(e[75]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,y(b.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[76]||(e[76]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Mt,[t("div",It,[t("button",{class:V(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",Bt)):(u(),i("i",Et)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,At),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:o(T),onClick:le},e[78]||(e[78]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,Dt),o(n).updatedAt?(u(),i("div",Vt,[e[79]||(e[79]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])])],512),[[z,U.value==="branding"]]),d(t("div",null,[t("div",Qt,[t("div",Rt,[e[81]||(e[81]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",qt,[d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=a=>k.value.enabled=a),class:"peer sr-only",type:"checkbox",onChange:F},null,544),[[I,k.value.enabled]]),e[80]||(e[80]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",Pt,[e[83]||(e[83]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(u(!0),i(H,null,_(k.value.notificationTypes,(a,m)=>(u(),i("div",{key:m,class:"flex items-center justify-between"},[t("div",null,[t("span",Lt,y(Be(m)),1),t("span",Kt,y(Ee(m)),1)]),t("label",Ot,[d(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[m]=h,class:"peer sr-only",type:"checkbox",onChange:F},null,40,Ft),[[I,k.value.notificationTypes[m]]]),e[82]||(e[82]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Wt,[e[85]||(e[85]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[11]||(e[11]=a=>j.value=!0)},e[84]||(e[84]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(u(),i("div",$t,[(u(!0),i(H,null,_(k.value.platforms,a=>(u(),i("div",{key:a.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",Ht,[t("div",Xt,[t("i",{class:V(["mr-3 text-xl",Ie(a.type)])},null,2),t("div",null,[t("h3",Jt,y(a.name||ae(a.type)),1),t("p",Yt,y(ae(a.type)),1)])]),t("div",Gt,[a.type!=="smtp"&&a.type!=="telegram"?(u(),i("div",Zt,[e[86]||(e[86]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",_t,y(a.url),1)])):p("",!0),a.type==="telegram"?(u(),i("div",er,[e[87]||(e[87]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",tr,"Chat ID: "+y(a.chatId||"未配置"),1)])):p("",!0),a.type==="telegram"&&a.botToken?(u(),i("div",rr,[e[88]||(e[88]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",ar,"Token: "+y(Ae(a.botToken)),1)])):p("",!0),a.type==="telegram"&&a.apiBaseUrl?(u(),i("div",sr,[e[89]||(e[89]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",lr,"API: "+y(a.apiBaseUrl),1)])):p("",!0),a.type==="telegram"&&a.proxyUrl?(u(),i("div",or,[e[90]||(e[90]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",nr,"代理: "+y(a.proxyUrl),1)])):p("",!0),a.type==="smtp"&&a.to?(u(),i("div",dr,[e[91]||(e[91]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",ir,y(Array.isArray(a.to)?a.to.join(", "):a.to),1)])):p("",!0),a.enableSign?(u(),i("div",ur,e[92]||(e[92]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):p("",!0)])]),t("div",gr,[t("label",fr,[t("input",{checked:a.enabled,class:"peer sr-only",type:"checkbox",onChange:m=>Te(a.id)},null,40,cr),e[93]||(e[93]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:m=>Ue(a)},e[94]||(e[94]=[t("i",{class:"fas fa-vial"},null,-1)]),8,br),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:m=>we(a)},e[95]||(e[95]=[t("i",{class:"fas fa-edit"},null,-1)]),8,pr),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:m=>Se(a.id)},e[96]||(e[96]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xr)])])]))),128))])):(u(),i("div",yr,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",vr,[e[100]||(e[100]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",mr,[t("div",null,[e[97]||(e[97]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=a=>k.value.retrySettings.maxRetries=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[98]||(e[98]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=a=>k.value.retrySettings.retryDelay=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[99]||(e[99]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=a=>k.value.retrySettings.timeout=a),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:F},null,544),[[x,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Me},e[101]||(e[101]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[z,U.value==="webhook"]]),d(t("div",null,[G.value?(u(),i("div",kr,e[102]||(e[102]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(u(),i("div",hr,[t("div",wr,[t("div",Sr,[e[104]||(e[104]=C('

仅允许 Claude Code 客户端

启用后,所有 /api/v1/messages/claude/v1/messages 端点将强制验证 Claude Code CLI 客户端

',1)),t("label",Tr,[d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=a=>g.value.claudeCodeOnlyEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.claudeCodeOnlyEnabled]]),e[103]||(e[103]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[105]||(e[105]=C('

此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。

',1))]),t("div",Ur,[t("div",Cr,[e[107]||(e[107]=C('

强制会话绑定

启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性

',1)),t("label",Mr,[d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=a=>g.value.globalSessionBindingEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.globalSessionBindingEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),g.value.globalSessionBindingEnabled?(u(),i("div",Ir,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=a=>g.value.sessionBindingTtlDays=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:R},null,544),[[x,g.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),d(t("textarea",{"onUpdate:modelValue":e[18]||(e[18]=a=>g.value.sessionBindingErrorMessage=a),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:R},null,544),[[x,g.value.sessionBindingErrorMessage]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):p("",!0),e[112]||(e[112]=C('

工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。

新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。

',1))]),t("div",Ar,[t("div",Br,[e[114]||(e[114]=C('

用户消息串行队列

启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流

',1)),t("label",Er,[d(t("input",{"onUpdate:modelValue":e[19]||(e[19]=a=>g.value.userMessageQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.userMessageQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),g.value.userMessageQueueEnabled?(u(),i("div",Dr,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[20]||(e[20]=a=>g.value.userMessageQueueDelayMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[21]||(e[21]=a=>g.value.userMessageQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:R},null,544),[[x,g.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):p("",!0),e[119]||(e[119]=C('

工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。

',1))]),t("div",Vr,[t("div",Qr,[e[121]||(e[121]=C('

并发请求排队

当 API Key 并发请求超限时进入队列等待,而非直接拒绝

',1)),t("label",Rr,[d(t("input",{"onUpdate:modelValue":e[22]||(e[22]=a=>g.value.concurrentRequestQueueEnabled=a),class:"peer sr-only",type:"checkbox",onChange:R},null,544),[[I,g.value.concurrentRequestQueueEnabled]]),e[120]||(e[120]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),g.value.concurrentRequestQueueEnabled?(u(),i("div",qr,[t("div",null,[e[122]||(e[122]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=a=>g.value.concurrentRequestQueueMaxSize=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[123]||(e[123]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[124]||(e[124]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=a=>g.value.concurrentRequestQueueMaxSizeMultiplier=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[125]||(e[125]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[126]||(e[126]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=a=>g.value.concurrentRequestQueueTimeoutMs=a),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:R},null,544),[[x,g.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[127]||(e[127]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):p("",!0),e[128]||(e[128]=C('

工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。

',1))]),g.value.updatedAt?(u(),i("div",Pr,[e[131]||(e[131]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+y(o(W)(g.value.updatedAt))+" ",1),g.value.updatedBy?(u(),i("span",jr,[e[129]||(e[129]=l(" 由 ",-1)),t("strong",null,y(g.value.updatedBy),1),e[130]||(e[130]=l(" 修改 ",-1))])):p("",!0)])):p("",!0)]))],512),[[z,U.value==="claude"]]),d(t("div",null,[t("div",Lr,[t("div",Kr,[e[133]||(e[133]=C('

公开统计概览

配置未登录用户可见的统计数据

',1)),t("label",Or,[d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=a=>o(n).publicStatsEnabled=a),class:"peer sr-only",type:"checkbox"},null,512),[[I,o(n).publicStatsEnabled]]),e[132]||(e[132]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-green-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-green-800"},null,-1)),t("span",Fr,y(o(n).publicStatsEnabled?"已启用":"已禁用"),1)])]),o(n).publicStatsEnabled?(u(),i("div",Nr,[e[139]||(e[139]=t("p",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-eye mr-2 text-gray-400"}),l(" 选择要公开显示的数据: ")],-1)),t("div",Wr,[t("div",$r,[t("label",zr,[d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=a=>o(n).publicStatsShowModelDistribution=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowModelDistribution]]),e[134]||(e[134]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"模型使用分布"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示各模型的使用占比")],-1))]),o(n).publicStatsShowModelDistribution?(u(),i("div",Hr,[e[135]||(e[135]=t("div",{class:"mb-1.5 text-xs text-gray-500 dark:text-gray-400"},"时间范围",-1)),t("div",Xr,[(u(),i(H,null,_(J,a=>t("button",{key:a.value,class:V(["rounded-md px-2.5 py-1 text-xs font-medium transition-all",o(n).publicStatsModelDistributionPeriod===a.value?"bg-white text-green-600 shadow-sm dark:bg-gray-600 dark:text-green-400":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),type:"button",onClick:m=>o(n).publicStatsModelDistributionPeriod=a.value},y(a.label),11,Jr)),64))])])):p("",!0)]),t("label",Yr,[d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=a=>o(n).publicStatsShowTokenTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowTokenTrends]]),e[136]||(e[136]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"Token 使用趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的Token使用量")],-1))]),t("label",Gr,[d(t("input",{"onUpdate:modelValue":e[29]||(e[29]=a=>o(n).publicStatsShowApiKeysTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowApiKeysTrends]]),e[137]||(e[137]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"API Keys 活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 显示近7天的活跃API Key数量 ")],-1))]),t("label",Zr,[d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=a=>o(n).publicStatsShowAccountTrends=a),class:"h-4 w-4 rounded border-gray-300 text-green-600 focus:ring-green-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[I,o(n).publicStatsShowAccountTrends]]),e[138]||(e[138]=t("div",null,[t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"账号活跃趋势"),t("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"显示近7天的活跃账号数量")],-1))])])])):p("",!0),t("div",_r,[t("div",ea,[t("button",{class:V(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":o(T)}]),disabled:o(T),onClick:Z},[o(T)?(u(),i("div",ra)):(u(),i("i",aa)),l(" "+y(o(T)?"保存中...":"保存设置"),1)],10,ta)]),o(n).updatedAt?(u(),i("div",sa,[e[140]||(e[140]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+y(o(W)(o(n).updatedAt)),1)])):p("",!0)])])],512),[[z,U.value==="publicStats"]])]))])]),j.value?(u(),i("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:N},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[52]||(e[52]=Le(()=>{},["stop"]))},[t("div",la,[t("div",oa,[t("div",na,[e[142]||(e[142]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",da,y(D.value?"编辑":"添加")+"通知平台 ",1),t("p",ia," 配置"+y(D.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:N},e[143]||(e[143]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",ua,[t("div",ga,[t("div",null,[e[147]||(e[147]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",fa,[d(t("select",{"onUpdate:modelValue":e[31]||(e[31]=a=>r.value.type=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:D.value},e[144]||(e[144]=[C('',9)]),8,ca),[[X,r.value.type]]),e[145]||(e[145]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),D.value?(u(),i("p",ba,e[146]||(e[146]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):p("",!0)]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=a=>r.value.name=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[x,r.value.name]])]),r.value.type!=="bark"&&r.value.type!=="smtp"&&r.value.type!=="telegram"?(u(),i("div",pa,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",xa,[d(t("input",{"onUpdate:modelValue":e[33]||(e[33]=a=>r.value.url=a),class:V(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":v.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":E.value}]),placeholder:"https://...",required:"",type:"url",onInput:ke},null,34),[[x,r.value.url]]),E.value?(u(),i("div",ya,e[149]||(e[149]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):p("",!0),v.value?(u(),i("div",va,e[150]||(e[150]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):p("",!0)]),se(r.value.type)?(u(),i("div",ma,[e[151]||(e[151]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",ka,y(se(r.value.type)),1)])):p("",!0)])):p("",!0),r.value.type==="telegram"?(u(),i("div",ha,[t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[34]||(e[34]=a=>r.value.botToken=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[x,r.value.botToken]]),e[154]||(e[154]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=a=>r.value.chatId=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[x,r.value.chatId]]),e[156]||(e[156]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[157]||(e[157]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[36]||(e[36]=a=>r.value.apiBaseUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[x,r.value.apiBaseUrl]]),e[158]||(e[158]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[37]||(e[37]=a=>r.value.proxyUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[x,r.value.proxyUrl]]),e[160]||(e[160]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[161]||(e[161]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):p("",!0),r.value.type==="bark"?(u(),i("div",wa,[t("div",null,[e[162]||(e[162]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[38]||(e[38]=a=>r.value.deviceKey=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[x,r.value.deviceKey]]),e[163]||(e[163]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[39]||(e[39]=a=>r.value.serverUrl=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[x,r.value.serverUrl]])]),t("div",null,[e[166]||(e[166]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),d(t("select",{"onUpdate:modelValue":e[40]||(e[40]=a=>r.value.level=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[165]||(e[165]=[C('',5)]),512),[[X,r.value.level]])]),t("div",null,[e[168]||(e[168]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),d(t("select",{"onUpdate:modelValue":e[41]||(e[41]=a=>r.value.sound=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[167]||(e[167]=[C('',9)]),512),[[X,r.value.sound]])]),t("div",null,[e[169]||(e[169]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[42]||(e[42]=a=>r.value.group=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[x,r.value.group]])]),e[170]||(e[170]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):p("",!0),r.value.type==="smtp"?(u(),i("div",Sa,[t("div",null,[e[171]||(e[171]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[43]||(e[43]=a=>r.value.host=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[x,r.value.host]])]),t("div",Ta,[t("div",null,[e[172]||(e[172]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),d(t("input",{"onUpdate:modelValue":e[44]||(e[44]=a=>r.value.port=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[x,r.value.port,void 0,{number:!0}]]),e[173]||(e[173]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[175]||(e[175]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),d(t("select",{"onUpdate:modelValue":e[45]||(e[45]=a=>r.value.secure=a),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[174]||(e[174]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[X,r.value.secure]])])]),t("div",null,[e[176]||(e[176]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[46]||(e[46]=a=>r.value.user=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[x,r.value.user]])]),t("div",null,[e[177]||(e[177]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[47]||(e[47]=a=>r.value.pass=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[x,r.value.pass]]),e[178]||(e[178]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[179]||(e[179]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[48]||(e[48]=a=>r.value.from=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[x,r.value.from]])]),t("div",null,[e[180]||(e[180]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[49]||(e[49]=a=>r.value.to=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[x,r.value.to]]),e[181]||(e[181]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):p("",!0),r.value.type==="dingtalk"||r.value.type==="feishu"?(u(),i("div",Ua,[t("div",Ca,[t("div",Ma,[t("label",Ia,[d(t("input",{id:"enableSign","onUpdate:modelValue":e[50]||(e[50]=a=>r.value.enableSign=a),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[I,r.value.enableSign]]),e[182]||(e[182]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),r.value.enableSign?(u(),i("span",Aa," 已启用 ")):p("",!0)]),qe(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:Pe(()=>[r.value.enableSign?(u(),i("div",Ba,[e[183]||(e[183]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),d(t("input",{"onUpdate:modelValue":e[51]||(e[51]=a=>r.value.secret=a),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[x,r.value.secret]])])):p("",!0)]),_:1})])])):p("",!0)])]),t("div",Ea,[t("div",Da,[e[185]||(e[185]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",Va,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:N},e[184]||(e[184]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:q.value,onClick:Ce},[t("i",{class:V(["mr-2 transition-transform",q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+y(q.value?"测试中...":"测试连接"),1)],8,Qa),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ve.value||P.value,onClick:he},[t("i",{class:V(["mr-2 transition-transform",P.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+y(P.value?"保存中...":D.value?"保存修改":"添加平台"),1)],8,Ra)])])])])])):p("",!0)],64))}}),Fa=Ke(qa,[["__scopeId","data-v-f76246ee"]]);export{Fa as default}; diff --git a/web/admin-spa/dist/assets/SettingsView-Ds_F7gAc.js b/web/admin-spa/dist/assets/SettingsView-Ds_F7gAc.js deleted file mode 100644 index cd0e6cc5..00000000 --- a/web/admin-spa/dist/assets/SettingsView-Ds_F7gAc.js +++ /dev/null @@ -1,3 +0,0 @@ -import{aP as Ae,r as S,aX as De,c as be,o as xe,q as Ve,Z as Qe,x as d,z as t,L as x,C as R,O as l,u as f,K as o,S as J,aq as p,al as q,P as m,aT as U,Q as Y,ac as pe,aV as z,R as Re,J as qe,T as je,Y as Pe,y as i}from"./vue-vendor-R8HMg95E.js";import{c as I,_ as Le,s as g}from"./index-Cr7hSgrN.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const Oe=Ae("settings",()=>{const M=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null}),A=S(!1),L=S(!1),B=async()=>{A.value=!0;try{const c=await I.get("/admin/oem-settings");return c&&c.success&&(M.value={...M.value,...c.data},T()),c}catch(c){throw console.error("Failed to load OEM settings:",c),c}finally{A.value=!1}},b=async c=>{L.value=!0;try{const y=await I.put("/admin/oem-settings",c);return y&&y.success&&(M.value={...M.value,...y.data},T()),y}catch(y){throw console.error("Failed to save OEM settings:",y),y}finally{L.value=!1}},$=async()=>{const c={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null};return M.value={...c},await b(c)},T=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const c=document.querySelector('link[rel="icon"]')||document.createElement("link");c.rel="icon",c.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(c)}};return{oemSettings:M,loading:A,saving:L,loadOemSettings:B,saveOemSettings:b,resetOemSettings:$,applyOemSettings:T,formatDateTime:c=>c?new Date(c).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:c=>{const y=[];return c.size>350*1024&&y.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(c.type)||y.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:y.length===0,errors:y}},fileToBase64:c=>new Promise((y,Q)=>{const V=new FileReader;V.onload=O=>y(O.target.result),V.onerror=Q,V.readAsDataURL(c)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},Ke={class:"mb-6"},We={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},$e={key:1},He={class:"table-container hidden sm:block"},Xe={class:"min-w-full"},Je={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ye={class:"table-row"},Ge={class:"px-6 py-4"},Ze={class:"table-row"},_e={class:"px-6 py-4"},et={class:"space-y-3"},tt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],rt={class:"table-row"},st={class:"px-6 py-4"},lt={class:"flex items-center"},ot={class:"inline-flex cursor-pointer items-center"},nt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},dt={class:"px-6 py-6",colspan:"2"},it={class:"flex items-center justify-between"},ut={class:"flex gap-3"},gt=["disabled"],ct={key:0,class:"loading-spinner mr-2"},ft={key:1,class:"fas fa-save mr-2"},bt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},pt={class:"space-y-4 sm:hidden"},yt={class:"glass-card p-4"},vt={class:"glass-card p-4"},mt={class:"space-y-3"},kt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ht=["src"],wt={class:"glass-card p-4"},St={class:"space-y-2"},Tt={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ut={class:"glass-card p-4"},Mt={class:"flex flex-col gap-3"},It=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},At=["disabled"],Dt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Vt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qt={class:"flex items-center justify-between"},Rt={class:"relative inline-flex cursor-pointer items-center"},qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Pt={class:"font-medium text-gray-700 dark:text-gray-300"},Lt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kt={class:"mb-4 flex items-center justify-between"},Wt={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},$t={class:"flex-1"},Ht={class:"flex items-center"},Xt={class:"font-semibold text-gray-800 dark:text-gray-200"},Jt={class:"text-sm text-gray-500 dark:text-gray-400"},Yt={class:"mt-3 space-y-1 text-sm"},Gt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Zt={class:"truncate"},_t={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},ea={class:"truncate"},ta={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},aa={class:"truncate"},ra={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},sa={class:"truncate"},la={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},oa={class:"truncate"},na={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},da={class:"truncate"},ia={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},ua={class:"ml-4 flex items-center space-x-2"},ga={class:"relative inline-flex cursor-pointer items-center"},ca=["checked","onChange"],fa=["onClick"],ba=["onClick"],xa=["onClick"],pa={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},ya={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},va={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},ma={key:0,class:"py-12 text-center"},ka={key:1},ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},wa={class:"flex items-center justify-between"},Sa={class:"relative inline-flex cursor-pointer items-center"},Ta={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ca={class:"flex items-center justify-between"},Ua={class:"relative inline-flex cursor-pointer items-center"},Ma={key:0,class:"mt-6 space-y-4"},Ia={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ba={class:"flex items-center justify-between"},Ea={class:"relative inline-flex cursor-pointer items-center"},Aa={key:0,class:"mt-6 space-y-4"},Da={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Va={class:"flex items-center justify-between"},Qa={class:"relative inline-flex cursor-pointer items-center"},Ra={key:0,class:"mt-6 space-y-4"},qa={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},ja={key:0,class:"ml-2"},Pa={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},La={class:"flex items-center justify-between"},Oa={class:"flex items-center space-x-3"},Fa={class:"text-xl font-semibold text-gray-900 dark:text-white"},Na={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Ka={class:"p-6"},Wa={class:"space-y-5"},za={class:"relative"},$a=["disabled"],Ha={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Xa={key:0},Ja={class:"relative"},Ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Ga={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Za={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},_a={class:"text-sm text-blue-700 dark:text-blue-300"},er={key:1,class:"space-y-5"},tr={key:2,class:"space-y-5"},ar={key:3,class:"space-y-5"},rr={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sr={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},lr={class:"space-y-4"},or={class:"flex items-center justify-between"},nr={class:"flex cursor-pointer items-center",for:"enableSign"},dr={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},ir={key:0},ur={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},gr={class:"flex items-center justify-between"},cr={class:"flex space-x-3"},fr=["disabled"],br=["disabled"],xr=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const A=Oe(),{loading:L,saving:B,oemSettings:b}=De(A),$=S(),T=S("branding"),u=S(!0),C=S(new AbortController),j=be({get(){return!b.value.showAdminButton},set(r){b.value.showAdminButton=!r}}),c=S(!1),y=S(!1),Q=S(!1),V=S(!1),O={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...O},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),H=S(!1),n=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),P=S(!1),E=S(null),a=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),G=xe(T,async r=>{u.value&&(r==="webhook"?await F():r==="claude"&&await ve())}),Z=xe(()=>a.value.type,r=>{c.value=!1,y.value=!1,E.value||(r==="bark"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1):r==="smtp"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):r==="telegram"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):(a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""))}),ye=be(()=>a.value.type==="bark"?!!a.value.deviceKey:a.value.type==="telegram"?!!(a.value.botToken&&a.value.chatId):a.value.type==="smtp"?!!(a.value.host&&a.value.user&&a.value.pass&&a.value.to):!!a.value.url&&!c.value);Ve(async()=>{try{await A.loadOemSettings(),T.value==="webhook"&&await F()}catch{g("加载设置失败","error")}}),Qe(()=>{u.value=!1,C.value&&C.value.abort(),G&&G(),Z&&Z(),P.value&&(P.value=!1,E.value=null)});const F=async()=>{if(u.value)try{const r=await I.get("/admin/webhook/config",{signal:C.value.signal});if(r.success&&u.value){const e=r.config||{};k.value={...e,notificationTypes:{...O,...e.notificationTypes||{}}}}}catch(r){if(r.name==="AbortError"||!u.value)return;g("获取webhook配置失败","error"),console.error(r)}},N=async()=>{if(u.value)try{const r={...k.value,notificationTypes:{...O,...k.value.notificationTypes||{}}};(await I.post("/admin/webhook/config",r,{signal:C.value.signal})).success&&u.value&&(k.value=r,g("配置已保存","success"))}catch(r){if(r.name==="AbortError"||!u.value)return;g("保存配置失败","error"),console.error(r)}},ve=async()=>{var r,e,s,v,h,W,ne,de,ie,ue,ge,ce,fe;if(u.value){H.value=!0;try{const w=await I.get("/admin/claude-relay-config",{signal:C.value.signal});w.success&&u.value&&(n.value={claudeCodeOnlyEnabled:((r=w.config)==null?void 0:r.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((s=w.config)==null?void 0:s.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((v=w.config)==null?void 0:v.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((W=w.config)==null?void 0:W.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ne=w.config)==null?void 0:ne.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((de=w.config)==null?void 0:de.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ie=w.config)==null?void 0:ie.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ue=w.config)==null?void 0:ue.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ge=w.config)==null?void 0:ge.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((ce=w.config)==null?void 0:ce.updatedAt)||null,updatedBy:((fe=w.config)==null?void 0:fe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!u.value)return;g("获取 Claude 转发配置失败","error"),console.error(w)}finally{u.value&&(H.value=!1)}}},D=async()=>{var r,e;if(u.value)try{const s={claudeCodeOnlyEnabled:n.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:n.value.globalSessionBindingEnabled,sessionBindingErrorMessage:n.value.sessionBindingErrorMessage,sessionBindingTtlDays:n.value.sessionBindingTtlDays,userMessageQueueEnabled:n.value.userMessageQueueEnabled,userMessageQueueDelayMs:n.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:n.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:n.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:n.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:n.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:n.value.concurrentRequestQueueTimeoutMs},v=await I.put("/admin/claude-relay-config",s,{signal:C.value.signal});v.success&&u.value&&(n.value={...n.value,updatedAt:((r=v.config)==null?void 0:r.updatedAt)||new Date().toISOString(),updatedBy:((e=v.config)==null?void 0:e.updatedBy)||null},g("Claude 转发配置已保存","success"))}catch(s){if(s.name==="AbortError"||!u.value)return;g("保存 Claude 转发配置失败","error"),console.error(s)}},me=()=>{if(["bark","smtp","telegram"].includes(a.value.type)){c.value=!1,y.value=!1;return}const r=a.value.url;if(!r){c.value=!1,y.value=!1;return}try{new URL(r),r.startsWith("http://")||r.startsWith("https://")?(c.value=!1,y.value=!0):(c.value=!0,y.value=!1)}catch{c.value=!0,y.value=!1}},_=()=>{if(a.value.type==="bark"){if(!a.value.deviceKey)return g("请输入Bark设备密钥","error"),!1}else if(a.value.type==="telegram"){if(!a.value.botToken)return g("请输入 Telegram 机器人 Token","error"),!1;if(!a.value.chatId)return g("请输入 Telegram Chat ID","error"),!1;if(a.value.apiBaseUrl)try{const r=new URL(a.value.apiBaseUrl);if(!["http:","https:"].includes(r.protocol))return g("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return g("请输入有效的 Telegram API 基础地址","error"),!1}if(a.value.proxyUrl)try{const r=new URL(a.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(r.protocol))return g("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return g("请输入有效的 Telegram 代理地址","error"),!1}}else if(a.value.type==="smtp"){const r=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:s}of r)if(!a.value[e])return g(`请输入${s}`,"error"),!1}else{if(!a.value.url)return g("请输入Webhook URL","error"),!1;if(c.value)return g("请输入有效的Webhook URL","error"),!1}return!0},ke=async()=>{if(u.value&&_()){V.value=!0;try{let r;E.value?r=await I.put(`/admin/webhook/platforms/${E.value.id}`,a.value,{signal:C.value.signal}):r=await I.post("/admin/webhook/platforms",a.value,{signal:C.value.signal}),r.success&&u.value&&(g(E.value?"平台已更新":"平台已添加","success"),await F(),K())}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.message||"操作失败","error"),console.error(r)}finally{u.value&&(V.value=!1)}}},he=r=>{E.value=r,a.value={type:r.type||"wechat_work",name:r.name||"",url:r.url||"",enableSign:r.enableSign||!1,secret:r.secret||"",botToken:r.botToken||"",chatId:r.chatId||"",apiBaseUrl:r.apiBaseUrl||"",proxyUrl:r.proxyUrl||"",deviceKey:r.deviceKey||"",serverUrl:r.serverUrl||"",level:r.level||"",sound:r.sound||"",group:r.group||"",host:r.host||"",port:r.port??null,secure:r.secure||!1,user:r.user||"",pass:r.pass||"",from:r.from||"",to:Array.isArray(r.to)?r.to.join(", "):r.to||"",timeout:r.timeout??null,ignoreTLS:r.ignoreTLS||!1},P.value=!0},we=async r=>{if(u.value&&confirm("确定要删除这个平台吗?"))try{(await I.delete(`/admin/webhook/platforms/${r}`,{signal:C.value.signal})).success&&u.value&&(g("平台已删除","success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("删除失败","error"),console.error(e)}},Se=async r=>{if(u.value)try{const e=await I.post(`/admin/webhook/platforms/${r}/toggle`,{},{signal:C.value.signal});e.success&&u.value&&(g(e.message,"success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("操作失败","error"),console.error(e)}},Te=async r=>{if(u.value)try{const e={type:r.type,secret:r.secret,enableSign:r.enableSign};r.type==="bark"?(e.deviceKey=r.deviceKey,e.serverUrl=r.serverUrl,e.level=r.level,e.sound=r.sound,e.group=r.group):r.type==="smtp"?(e.host=r.host,e.port=r.port,e.secure=r.secure,e.user=r.user,e.pass=r.pass,e.from=r.from,e.to=r.to,e.ignoreTLS=r.ignoreTLS):r.type==="telegram"?(e.botToken=r.botToken,e.chatId=r.chatId,e.apiBaseUrl=r.apiBaseUrl,e.proxyUrl=r.proxyUrl):e.url=r.url,(await I.post("/admin/webhook/test",e,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(e){if(e.name==="AbortError"||!u.value)return;g(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(u.value&&_()){Q.value=!0;try{(await I.post("/admin/webhook/test",a.value,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.error||r.message||"测试失败","error"),console.error(r)}finally{u.value&&(Q.value=!1)}}},Ue=async()=>{var r,e,s,v;if(u.value)try{(await I.post("/admin/webhook/test-notification",{},{signal:C.value.signal})).success&&u.value&&g("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!u.value)return;const W=((e=(r=h==null?void 0:h.response)==null?void 0:r.data)==null?void 0:e.message)||((v=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:v.error)||(h==null?void 0:h.message)||"发送失败";g(W,"error"),console.error(h)}},K=()=>{u.value&&(P.value=!1,setTimeout(()=>{u.value&&(E.value=null,a.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},c.value=!1,y.value=!1,Q.value=!1,V.value=!1)},0))},ee=r=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[r]||r,Me=r=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[r]||"fas fa-bell",te=r=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[r]||"",Ie=r=>r?r.length<=12?r:`${r.slice(0,6)}...${r.slice(-4)}`:"",Be=r=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[r]||r,Ee=r=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[r]||"",ae=async()=>{try{const r={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton},e=await A.saveOemSettings(r);e&&e.success?g("OEM设置保存成功","success"):g((e==null?void 0:e.message)||"保存失败","error")}catch{g("保存OEM设置失败","error")}},re=async()=>{if(confirm(`确定要重置为默认设置吗? - -这将清除所有自定义的网站名称和图标设置。`))try{const r=await A.resetOemSettings();r&&r.success?g("已重置为默认设置","success"):g("重置失败","error")}catch{g("重置失败","error")}},se=async r=>{const e=r.target.files[0];if(!e)return;const s=A.validateIconFile(e);if(!s.isValid){s.errors.forEach(v=>g(v,"error"));return}try{const v=await A.fileToBase64(e);b.value.siteIconData=v}catch{g("文件读取失败","error")}r.target.value=""},le=()=>{b.value.siteIcon="",b.value.siteIconData=""},oe=()=>{console.warn("Icon failed to load")},X=A.formatDateTime;return(r,e)=>(i(),d(Y,null,[t("div",Fe,[t("div",Ne,[e[125]||(e[125]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",Ke,[t("nav",We,[t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=s=>T.value="branding")},e[47]||(e[47]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=s=>T.value="webhook")},e[48]||(e[48]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=s=>T.value="claude")},e[49]||(e[49]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2)])]),f(L)?(i(),d("div",ze,e[50]||(e[50]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(i(),d("div",$e,[o(t("div",null,[t("div",He,[t("table",Xe,[t("tbody",Je,[t("tr",Ye,[e[52]||(e[52]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ge,[o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f(b).siteName=s),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ze,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",_e,[t("div",et,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",tt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,at),e[54]||(e[54]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le},e[53]||(e[53]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:$,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[4]||(e[4]=s=>r.$refs.iconFileInput.click())},e[55]||(e[55]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[56]||(e[56]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",rt,[e[60]||(e[60]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",st,[t("div",lt,[t("label",ot,[o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[58]||(e[58]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",nt,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[59]||(e[59]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",dt,[t("div",it,[t("div",ut,[t("button",{class:R(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",ct)):(i(),d("i",ft)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,gt),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[61]||(e[61]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,bt)]),f(b).updatedAt?(i(),d("div",xt,[e[62]||(e[62]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",pt,[t("div",yt,[e[63]||(e[63]=U('

站点名称

自定义您的站点品牌名称

',1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>f(b).siteName=s),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]])]),t("div",vt,[e[67]||(e[67]=U('

站点图标

上传自定义图标或输入图标URL

',1)),t("div",mt,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",kt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,ht),e[64]||(e[64]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[7]||(e[7]=s=>r.$refs.iconFileInputMobile.click())},e[65]||(e[65]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[66]||(e[66]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",wt,[e[70]||(e[70]=U('

管理入口

控制登录按钮在首页的显示

',1)),t("div",St,[t("label",Tt,[o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[68]||(e[68]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[69]||(e[69]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Ut,[t("div",Mt,[t("button",{class:R(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",Bt)):(i(),d("i",Et)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,It),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[71]||(e[71]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,At),f(b).updatedAt?(i(),d("div",Dt,[e[72]||(e[72]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])],512),[[J,T.value==="branding"]]),o(t("div",null,[t("div",Vt,[t("div",Qt,[e[74]||(e[74]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",Rt,[o(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>k.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:N},null,544),[[q,k.value.enabled]]),e[73]||(e[73]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",qt,[e[76]||(e[76]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(i(!0),d(Y,null,pe(k.value.notificationTypes,(s,v)=>(i(),d("div",{key:v,class:"flex items-center justify-between"},[t("div",null,[t("span",Pt,m(Be(v)),1),t("span",Lt,m(Ee(v)),1)]),t("label",Ot,[o(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[v]=h,class:"peer sr-only",type:"checkbox",onChange:N},null,40,Ft),[[q,k.value.notificationTypes[v]]]),e[75]||(e[75]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[10]||(e[10]=s=>P.value=!0)},e[77]||(e[77]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(i(),d("div",Wt,[(i(!0),d(Y,null,pe(k.value.platforms,s=>(i(),d("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",$t,[t("div",Ht,[t("i",{class:R(["mr-3 text-xl",Me(s.type)])},null,2),t("div",null,[t("h3",Xt,m(s.name||ee(s.type)),1),t("p",Jt,m(ee(s.type)),1)])]),t("div",Yt,[s.type!=="smtp"&&s.type!=="telegram"?(i(),d("div",Gt,[e[79]||(e[79]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Zt,m(s.url),1)])):x("",!0),s.type==="telegram"?(i(),d("div",_t,[e[80]||(e[80]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",ea,"Chat ID: "+m(s.chatId||"未配置"),1)])):x("",!0),s.type==="telegram"&&s.botToken?(i(),d("div",ta,[e[81]||(e[81]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",aa,"Token: "+m(Ie(s.botToken)),1)])):x("",!0),s.type==="telegram"&&s.apiBaseUrl?(i(),d("div",ra,[e[82]||(e[82]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",sa,"API: "+m(s.apiBaseUrl),1)])):x("",!0),s.type==="telegram"&&s.proxyUrl?(i(),d("div",la,[e[83]||(e[83]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",oa,"代理: "+m(s.proxyUrl),1)])):x("",!0),s.type==="smtp"&&s.to?(i(),d("div",na,[e[84]||(e[84]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",da,m(Array.isArray(s.to)?s.to.join(", "):s.to),1)])):x("",!0),s.enableSign?(i(),d("div",ia,e[85]||(e[85]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",ua,[t("label",ga,[t("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:v=>Se(s.id)},null,40,ca),e[86]||(e[86]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:v=>Te(s)},e[87]||(e[87]=[t("i",{class:"fas fa-vial"},null,-1)]),8,fa),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:v=>he(s)},e[88]||(e[88]=[t("i",{class:"fas fa-edit"},null,-1)]),8,ba),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:v=>we(s.id)},e[89]||(e[89]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xa)])])]))),128))])):(i(),d("div",pa,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",ya,[e[93]||(e[93]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",va,[t("div",null,[e[90]||(e[90]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),o(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>k.value.retrySettings.maxRetries=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[91]||(e[91]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>k.value.retrySettings.retryDelay=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[92]||(e[92]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>k.value.retrySettings.timeout=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Ue},e[94]||(e[94]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[J,T.value==="webhook"]]),o(t("div",null,[H.value?(i(),d("div",ma,e[95]||(e[95]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(i(),d("div",ka,[t("div",ha,[t("div",wa,[e[97]||(e[97]=U('

仅允许 Claude Code 客户端

启用后,所有 /api/v1/messages/claude/v1/messages 端点将强制验证 Claude Code CLI 客户端

',1)),t("label",Sa,[o(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>n.value.claudeCodeOnlyEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.claudeCodeOnlyEnabled]]),e[96]||(e[96]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[98]||(e[98]=U('

此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。

',1))]),t("div",Ta,[t("div",Ca,[e[100]||(e[100]=U('

强制会话绑定

启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性

',1)),t("label",Ua,[o(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>n.value.globalSessionBindingEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.globalSessionBindingEnabled]]),e[99]||(e[99]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),n.value.globalSessionBindingEnabled?(i(),d("div",Ma,[t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),o(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>n.value.sessionBindingTtlDays=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,n.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[102]||(e[102]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[103]||(e[103]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),o(t("textarea",{"onUpdate:modelValue":e[17]||(e[17]=s=>n.value.sessionBindingErrorMessage=s),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,n.value.sessionBindingErrorMessage]]),e[104]||(e[104]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[105]||(e[105]=U('

工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。

新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。

',1))]),t("div",Ia,[t("div",Ba,[e[107]||(e[107]=U('

用户消息串行队列

启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流

',1)),t("label",Ea,[o(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>n.value.userMessageQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.userMessageQueueEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),n.value.userMessageQueueEnabled?(i(),d("div",Aa,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[19]||(e[19]=s=>n.value.userMessageQueueDelayMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[20]||(e[20]=s=>n.value.userMessageQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[112]||(e[112]=U('

工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。

',1))]),t("div",Da,[t("div",Va,[e[114]||(e[114]=U('

并发请求排队

当 API Key 并发请求超限时进入队列等待,而非直接拒绝

',1)),t("label",Qa,[o(t("input",{"onUpdate:modelValue":e[21]||(e[21]=s=>n.value.concurrentRequestQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.concurrentRequestQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),n.value.concurrentRequestQueueEnabled?(i(),d("div",Ra,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[22]||(e[22]=s=>n.value.concurrentRequestQueueMaxSize=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>n.value.concurrentRequestQueueMaxSizeMultiplier=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>n.value.concurrentRequestQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[121]||(e[121]=U('

工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。

',1))]),n.value.updatedAt?(i(),d("div",qa,[e[124]||(e[124]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+m(f(X)(n.value.updatedAt))+" ",1),n.value.updatedBy?(i(),d("span",ja,[e[122]||(e[122]=l(" 由 ",-1)),t("strong",null,m(n.value.updatedBy),1),e[123]||(e[123]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[J,T.value==="claude"]])]))])]),P.value?(i(),d("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:K},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[46]||(e[46]=Pe(()=>{},["stop"]))},[t("div",Pa,[t("div",La,[t("div",Oa,[e[126]||(e[126]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",Fa,m(E.value?"编辑":"添加")+"通知平台 ",1),t("p",Na," 配置"+m(E.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:K},e[127]||(e[127]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Ka,[t("div",Wa,[t("div",null,[e[131]||(e[131]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",za,[o(t("select",{"onUpdate:modelValue":e[25]||(e[25]=s=>a.value.type=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:E.value},e[128]||(e[128]=[U('',9)]),8,$a),[[z,a.value.type]]),e[129]||(e[129]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),E.value?(i(),d("p",Ha,e[130]||(e[130]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[132]||(e[132]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>a.value.name=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,a.value.name]])]),a.value.type!=="bark"&&a.value.type!=="smtp"&&a.value.type!=="telegram"?(i(),d("div",Xa,[e[136]||(e[136]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",Ja,[o(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>a.value.url=s),class:R(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":c.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":y.value}]),placeholder:"https://...",required:"",type:"url",onInput:me},null,34),[[p,a.value.url]]),y.value?(i(),d("div",Ya,e[133]||(e[133]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),c.value?(i(),d("div",Ga,e[134]||(e[134]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),te(a.value.type)?(i(),d("div",Za,[e[135]||(e[135]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",_a,m(te(a.value.type)),1)])):x("",!0)])):x("",!0),a.value.type==="telegram"?(i(),d("div",er,[t("div",null,[e[137]||(e[137]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>a.value.botToken=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,a.value.botToken]]),e[138]||(e[138]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[139]||(e[139]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>a.value.chatId=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,a.value.chatId]]),e[140]||(e[140]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[141]||(e[141]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>a.value.apiBaseUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,a.value.apiBaseUrl]]),e[142]||(e[142]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[143]||(e[143]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[31]||(e[31]=s=>a.value.proxyUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,a.value.proxyUrl]]),e[144]||(e[144]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[145]||(e[145]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),a.value.type==="bark"?(i(),d("div",tr,[t("div",null,[e[146]||(e[146]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>a.value.deviceKey=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,a.value.deviceKey]]),e[147]||(e[147]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[33]||(e[33]=s=>a.value.serverUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,a.value.serverUrl]])]),t("div",null,[e[150]||(e[150]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),o(t("select",{"onUpdate:modelValue":e[34]||(e[34]=s=>a.value.level=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[149]||(e[149]=[U('',5)]),512),[[z,a.value.level]])]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),o(t("select",{"onUpdate:modelValue":e[35]||(e[35]=s=>a.value.sound=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[151]||(e[151]=[U('',9)]),512),[[z,a.value.sound]])]),t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[36]||(e[36]=s=>a.value.group=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,a.value.group]])]),e[154]||(e[154]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),a.value.type==="smtp"?(i(),d("div",ar,[t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[37]||(e[37]=s=>a.value.host=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,a.value.host]])]),t("div",rr,[t("div",null,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),o(t("input",{"onUpdate:modelValue":e[38]||(e[38]=s=>a.value.port=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,a.value.port,void 0,{number:!0}]]),e[157]||(e[157]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),o(t("select",{"onUpdate:modelValue":e[39]||(e[39]=s=>a.value.secure=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[158]||(e[158]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[z,a.value.secure]])])]),t("div",null,[e[160]||(e[160]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[40]||(e[40]=s=>a.value.user=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,a.value.user]])]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[41]||(e[41]=s=>a.value.pass=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,a.value.pass]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[42]||(e[42]=s=>a.value.from=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,a.value.from]])]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[43]||(e[43]=s=>a.value.to=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,a.value.to]]),e[165]||(e[165]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),a.value.type==="dingtalk"||a.value.type==="feishu"?(i(),d("div",sr,[t("div",lr,[t("div",or,[t("label",nr,[o(t("input",{id:"enableSign","onUpdate:modelValue":e[44]||(e[44]=s=>a.value.enableSign=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[q,a.value.enableSign]]),e[166]||(e[166]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),a.value.enableSign?(i(),d("span",dr," 已启用 ")):x("",!0)]),Re(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:qe(()=>[a.value.enableSign?(i(),d("div",ir,[e[167]||(e[167]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),o(t("input",{"onUpdate:modelValue":e[45]||(e[45]=s=>a.value.secret=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,a.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ur,[t("div",gr,[e[169]||(e[169]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",cr,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:K},e[168]||(e[168]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:Q.value,onClick:Ce},[t("i",{class:R(["mr-2 transition-transform",Q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+m(Q.value?"测试中...":"测试连接"),1)],8,fr),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ye.value||V.value,onClick:ke},[t("i",{class:R(["mr-2 transition-transform",V.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+m(V.value?"保存中...":E.value?"保存修改":"添加平台"),1)],8,br)])])])])])):x("",!0)],64))}}),kr=Le(xr,[["__scopeId","data-v-d2705d9a"]]);export{kr as default}; diff --git a/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css b/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css deleted file mode 100644 index 7dbed9bc..00000000 --- a/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css +++ /dev/null @@ -1 +0,0 @@ -.theme-toggle-container[data-v-78f09a8c]{position:relative;display:inline-flex;align-items:center}.theme-toggle-button[data-v-78f09a8c]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){background-color:#1f2937e6}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{border-width:1px;border-color:#e5e7eb80}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){border-color:#4b556380}.theme-toggle-button[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]{position:relative;overflow:hidden}.theme-toggle-button[data-v-78f09a8c]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle,rgba(59,130,246,.1),transparent);opacity:0;transition:opacity .2s ease;pointer-events:none}.theme-toggle-button[data-v-78f09a8c]:hover:before{opacity:1}.theme-toggle-button i[data-v-78f09a8c]{font-size:1rem;line-height:1.5rem;transition:transform .2s ease}.theme-toggle-button:hover i[data-v-78f09a8c]{transform:scale(1.1)}.theme-toggle-button i.fa-sun[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-moon[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-circle-half-stroke[data-v-78f09a8c]{background:linear-gradient(90deg,#60a5fa,#2563eb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.theme-switch-wrapper[data-v-78f09a8c]{display:inline-flex;align-items:center}.theme-switch[data-v-78f09a8c]{position:relative;width:76px;height:38px;border-radius:50px;padding:4px;cursor:pointer;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);background:linear-gradient(135deg,#667eea,#764ba2);border:2px solid rgba(255,255,255,.1);box-shadow:0 4px 15px #667eea4d,inset 0 1px 2px #0000001a;overflow:hidden;display:flex;align-items:center}.theme-switch[data-v-78f09a8c]:hover{transform:scale(1.05);box-shadow:0 6px 20px #667eea66,inset 0 1px 2px #0000001a}.theme-switch[data-v-78f09a8c]:active{transform:scale(.98)}.theme-switch.is-dark[data-v-78f09a8c]{background:linear-gradient(135deg,#1e293b,#334155);border-color:#94a3b833;box-shadow:0 4px 15px #00000080,inset 0 1px 2px #ffffff0d}.theme-switch.is-dark[data-v-78f09a8c]:hover{box-shadow:0 6px 20px #0009,inset 0 1px 2px #ffffff0d}.theme-switch.is-auto[data-v-78f09a8c]{background:linear-gradient(135deg,#c4b5fd,#a78bfa 15%,#818cf8 40%,#6366f1 60%,#4f46e5 85%,#4338ca);border-color:#fff3;position:relative;overflow:hidden;background-size:120% 120%;background-position:center;box-shadow:0 4px 15px #8b5cf640,inset 0 1px 3px #0000001a,inset 0 -1px 3px #0000001a}.theme-switch.is-auto[data-v-78f09a8c]:before{content:"";position:absolute;left:50%;top:10%;bottom:10%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent);transform:translate(-50%);pointer-events:none}.switch-bg[data-v-78f09a8c]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;pointer-events:none}.stars[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch.is-dark .stars[data-v-78f09a8c]{opacity:1}.stars span[data-v-78f09a8c]{position:absolute;display:block;width:2px;height:2px;background:#fff;border-radius:50%;opacity:.6}.stars span[data-v-78f09a8c]:nth-child(1){top:25%;left:20%}.stars span[data-v-78f09a8c]:nth-child(2){top:40%;left:40%;width:1.5px;height:1.5px}.stars span[data-v-78f09a8c]:nth-child(3){top:60%;left:25%}.clouds[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch:not(.is-dark):not(.is-auto) .clouds[data-v-78f09a8c]{opacity:.7}.clouds span[data-v-78f09a8c]{position:absolute;background:#ffffff4d;border-radius:100px}.clouds span[data-v-78f09a8c]:nth-child(1){width:20px;height:8px;top:40%;left:15%}.clouds span[data-v-78f09a8c]:nth-child(2){width:15px;height:6px;top:60%;left:35%}.switch-handle[data-v-78f09a8c]{position:absolute;width:30px;height:30px;background:#fff;border-radius:50%;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);box-shadow:0 2px 8px #0003,0 0 0 1px #0000000d;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%) translate(0);left:4px}.theme-switch.is-dark .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(38px);background:linear-gradient(135deg,#1e293b,#475569);box-shadow:0 2px 8px #0006,0 0 0 1px #ffffff1a}.theme-switch.is-auto .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(19px);background:#ffffff40;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.35);box-shadow:0 4px 12px #0000001a,inset 0 0 8px #ffffff40}.handle-icon[data-v-78f09a8c]{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.handle-icon i[data-v-78f09a8c]{font-size:14px;transition:all .3s ease}.handle-icon .fa-sun[data-v-78f09a8c]{color:#f59e0b;filter:drop-shadow(0 0 3px rgba(245,158,11,.5))}.handle-icon .fa-moon[data-v-78f09a8c]{color:#fbbf24;filter:drop-shadow(0 0 3px rgba(251,191,36,.5))}.handle-icon .fa-circle-half-stroke[data-v-78f09a8c]{color:#ffffffe6;filter:drop-shadow(0 0 4px rgba(167,139,250,.5));font-size:15px}.theme-segmented[data-v-78f09a8c]{display:inline-flex;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]{border-radius:9999px;padding:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment[data-v-78f09a8c]{padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-radius:9999px;display:flex;align-items:center;gap:.25rem;cursor:pointer;position:relative}.theme-segment[data-v-78f09a8c]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover{background-color:#ffffff4d}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){background-color:#4b55634d}.theme-segment[data-v-78f09a8c]:hover{transform:scale(1.02)}.theme-segment.active[data-v-78f09a8c]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment i[data-v-78f09a8c]{font-size:.75rem;line-height:1rem;transition:transform .2s ease}.fade-enter-active[data-v-78f09a8c],.fade-leave-active[data-v-78f09a8c]{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.fade-enter-from[data-v-78f09a8c],.fade-leave-to[data-v-78f09a8c]{opacity:0}.dropdown-enter-active[data-v-78f09a8c]{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.dropdown-leave-active[data-v-78f09a8c]{transition:all .2s cubic-bezier(.4,0,1,1)}.dropdown-enter-from[data-v-78f09a8c]{opacity:0;transform:translateY(-10px) scale(.95)}.dropdown-leave-to[data-v-78f09a8c]{opacity:0;transform:translateY(-5px) scale(.98)}@media (max-width: 640px){.theme-dropdown[data-v-78f09a8c]{left:0;right:auto}.theme-segment span[data-v-78f09a8c]{display:none}} diff --git a/web/admin-spa/dist/assets/ThemeToggle-Dkc-_0Ud.js b/web/admin-spa/dist/assets/ThemeToggle-Btdau4yo.js similarity index 94% rename from web/admin-spa/dist/assets/ThemeToggle-Dkc-_0Ud.js rename to web/admin-spa/dist/assets/ThemeToggle-Btdau4yo.js index 906c9520..58300319 100644 --- a/web/admin-spa/dist/assets/ThemeToggle-Dkc-_0Ud.js +++ b/web/admin-spa/dist/assets/ThemeToggle-Btdau4yo.js @@ -1 +1 @@ -import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-R8HMg95E.js";import{_ as T,a as w}from"./index-Cr7hSgrN.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T}; +import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-BVUySZOn.js";import{_ as T,a as w}from"./index-BAse2XU9.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T}; diff --git a/web/admin-spa/dist/assets/TutorialView-BjIHOtH3.css b/web/admin-spa/dist/assets/TutorialView-BjIHOtH3.css new file mode 100644 index 00000000..bbcd9151 --- /dev/null +++ b/web/admin-spa/dist/assets/TutorialView-BjIHOtH3.css @@ -0,0 +1 @@ +.tutorial-container[data-v-01fa9f4e]{min-height:calc(100vh - 300px)}.tutorial-content[data-v-01fa9f4e]{animation:fadeIn-01fa9f4e .3s ease-in-out}@keyframes fadeIn-01fa9f4e{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}code[data-v-01fa9f4e]{font-family:Fira Code,Monaco,Menlo,Ubuntu Mono,monospace}.tutorial-content h4[data-v-01fa9f4e]{scroll-margin-top:100px}.tutorial-content .bg-gradient-to-r[data-v-01fa9f4e]{transition:all .2s ease}.tutorial-content .bg-gradient-to-r[data-v-01fa9f4e]:hover{transform:translateY(-1px);box-shadow:0 4px 12px #0000001a}html.dark[data-v-01fa9f4e] .bg-gray-100{background-color:#1f2937!important;border:1px solid rgba(75,85,99,.5)}html.dark[data-v-01fa9f4e] .bg-gray-700{background-color:#1a202c!important;border:1px solid rgba(75,85,99,.6)}html.dark[data-v-01fa9f4e] button.bg-gray-800{background-color:#3b82f6!important;border:1px solid rgba(59,130,246,.8);box-shadow:0 2px 8px #3b82f666;color:#fff!important}html.dark[data-v-01fa9f4e] button:not(.bg-gray-800).text-gray-600{color:#9ca3af!important}html.dark[data-v-01fa9f4e] button:not(.bg-gray-800).hover\:text-gray-900:hover{color:#d1d5db!important}html.dark[data-v-01fa9f4e] .bg-gray-900{background-color:#1e293b!important;border:1px solid rgba(71,85,105,.6);box-shadow:inset 0 1px 2px #0003}html.dark[data-v-01fa9f4e] a{color:#60a5fa!important;text-decoration:underline}html.dark[data-v-01fa9f4e] a:hover{color:#93c5fd!important}html.dark[data-v-01fa9f4e] code.rounded{background-color:#334155!important;border:1px solid rgba(100,116,139,.6);color:#fbbf24!important;padding:.125rem .375rem}html.dark[data-v-01fa9f4e] .border-blue-200{border-color:#3b82f680!important}html.dark[data-v-01fa9f4e] .bg-blue-50{background-color:#2563eb26!important;border:1px solid rgba(59,130,246,.3)}html.dark[data-v-01fa9f4e] .border-green-200{border-color:#22c55e80!important}html.dark[data-v-01fa9f4e] .bg-green-50{background-color:#22c55e26!important;border:1px solid rgba(34,197,94,.3)}html.dark[data-v-01fa9f4e] .border-yellow-200{border-color:#facc1580!important}html.dark[data-v-01fa9f4e] .bg-yellow-50{background-color:#facc1526!important;border:1px solid rgba(250,204,21,.3)}html.dark[data-v-01fa9f4e] .border-indigo-200{border-color:#6366f180!important}html.dark[data-v-01fa9f4e] .bg-indigo-50{background-color:#6366f126!important;border:1px solid rgba(99,102,241,.3)}html.dark[data-v-01fa9f4e] .border-purple-200{border-color:#a855f780!important}html.dark[data-v-01fa9f4e] .from-purple-50{background:linear-gradient(to right,#a855f726,#ec489926)!important;border:1px solid rgba(168,85,247,.3)}html.dark[data-v-01fa9f4e] .from-blue-50{background:linear-gradient(to right,#3b82f626,#6366f126)!important;border:1px solid rgba(59,130,246,.3)}html.dark[data-v-01fa9f4e] .from-green-50{background:linear-gradient(to right,#22c55e26,#10b98126)!important;border:1px solid rgba(34,197,94,.3)}html.dark[data-v-01fa9f4e] .text-gray-400{color:#9ca3af!important}html.dark[data-v-01fa9f4e] .text-gray-600{color:#d1d5db!important}html.dark[data-v-01fa9f4e] .text-gray-700{color:#e5e7eb!important}html.dark[data-v-01fa9f4e] .text-gray-800{color:#f3f4f6!important}html.dark[data-v-01fa9f4e] .text-blue-600,html.dark[data-v-01fa9f4e] .text-blue-700{color:#60a5fa!important}html.dark[data-v-01fa9f4e] .text-blue-800{color:#93c5fd!important}html.dark[data-v-01fa9f4e] .text-green-700{color:#4ade80!important}html.dark[data-v-01fa9f4e] .text-green-800{color:#86efac!important}html.dark[data-v-01fa9f4e] .text-yellow-700{color:#facc15!important}html.dark[data-v-01fa9f4e] .text-yellow-800{color:#fde047!important}html.dark[data-v-01fa9f4e] .text-indigo-700{color:#818cf8!important}html.dark[data-v-01fa9f4e] .text-indigo-800{color:#a5b4fc!important}html.dark[data-v-01fa9f4e] h3,html.dark[data-v-01fa9f4e] h4,html.dark[data-v-01fa9f4e] h5,html.dark[data-v-01fa9f4e] h6{color:#f9fafb!important}html.dark[data-v-01fa9f4e] .bg-yellow-100{background-color:#facc1533!important}html.dark[data-v-01fa9f4e] .bg-indigo-100{background-color:#6366f133!important}html.dark[data-v-01fa9f4e] .bg-white{background-color:#374151!important;border:1px solid rgba(107,114,128,.5)}html.dark[data-v-01fa9f4e] .border-purple-700{border-color:#a855f799!important}html.dark[data-v-01fa9f4e] .border-blue-100{border-color:#3b82f666!important}html.dark[data-v-01fa9f4e] .border-green-100{border-color:#22c55e66!important}html.dark[data-v-01fa9f4e] .border-purple-100{border-color:#a855f766!important}html.dark[data-v-01fa9f4e] .text-green-400{color:#4ade80!important}html.dark[data-v-01fa9f4e] .text-gray-300{color:#d1d5db!important} diff --git a/web/admin-spa/dist/assets/TutorialView-C0wjIk1C.js b/web/admin-spa/dist/assets/TutorialView-C0wjIk1C.js new file mode 100644 index 00000000..753b43c7 --- /dev/null +++ b/web/admin-spa/dist/assets/TutorialView-C0wjIk1C.js @@ -0,0 +1 @@ +import{_}from"./index-BAse2XU9.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-BVUySZOn.js";import"./element-plus-CKhypU-Q.js";import"./vendor-Dr8jvgFu.js";import"./chart-ChB167Jv.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Windows 安装方法

方法一:官网下载(推荐)

  1. 打开浏览器访问 https://nodejs.org/
  2. 点击 "LTS" 版本进行下载(推荐长期支持版本)
  3. 下载完成后双击 .msi 文件
  4. 按照安装向导完成安装,保持默认设置即可

方法二:使用包管理器

如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:

# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
  • • 建议使用 PowerShell 而不是 CMD
  • • 如果遇到权限问题,尝试以管理员身份运行
  • • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功

安装完成后,打开 PowerShell 或 CMD,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 PowerShell 或 CMD,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。

提示
  • • 建议使用 PowerShell 而不是 CMD,功能更强大
  • • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('

查看已设置的环境变量:

# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)

💡 设置后需要重新打开 PowerShell 窗口才能生效。

',3))])])]),t[35]||(t[35]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",B,[t[14]||(t[14]=m('
验证环境变量设置

设置完环境变量后,可以通过以下命令验证是否设置成功:

在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m('
验证 Gemini CLI 环境变量

在 PowerShell 中验证:

echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json

',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude

Windows 常见问题解决

安装时提示 "permission denied" 错误

这通常是权限问题,尝试以下解决方法:

  • 以管理员身份运行 PowerShell
  • 或者配置 npm 使用用户目录:npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误

如果遇到执行策略限制,运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效

设置永久环境变量后需要:

  • 重新启动 PowerShell 或 CMD
  • 或者注销并重新登录 Windows
  • 验证设置:echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

macOS 安装方法

方法一:使用 Homebrew(推荐)

如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:

# 更新 Homebrew
brew update
# 安装 Node.js
brew install node

方法二:官网下载

  1. 访问 https://nodejs.org/
  2. 下载适合 macOS 的 LTS 版本
  3. 打开下载的 .pkg 文件
  4. 按照安装程序指引完成安装
macOS 注意事项
  • • 如果遇到权限问题,可能需要使用 sudo
  • • 首次运行可能需要在系统偏好设置中允许
  • • 建议使用 Terminal 或 iTerm2
验证安装是否成功

安装完成后,打开 Terminal,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 Terminal,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m('
验证 Gemini CLI 环境变量

在 Terminal 中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。

',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

macOS 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
macOS 安全设置阻止运行

如果系统阻止运行 Claude Code:

  • 打开"系统偏好设置" → "安全性与隐私"
  • 点击"仍要打开"或"允许"
  • 或者在 Terminal 中运行:sudo spctl --master-disable
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
  • 重新启动 Terminal
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Linux 安装方法

方法一:使用官方仓库(推荐)

# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs

方法二:使用系统包管理器

虽然版本可能不是最新的,但对于基本使用已经足够:

# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
  • • 某些发行版可能需要安装额外的依赖
  • • 如果遇到权限问题,使用 sudo
  • • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功

安装完成后,打开终端,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开终端,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m('
验证 Gemini CLI 环境变量

在终端中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",je,[t[127]||(t[127]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。

',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

Linux 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
  • 然后添加到 PATH:export PATH=~/.npm-global/bin:$PATH
缺少依赖库

某些 Linux 发行版需要安装额外依赖:

# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.bashrc 或 .zshrc)
  • 重新启动终端或运行 source ~/.bashrc
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},Je=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{Je as default}; diff --git a/web/admin-spa/dist/assets/TutorialView-DqwFkHUw.js b/web/admin-spa/dist/assets/TutorialView-DqwFkHUw.js deleted file mode 100644 index 427abf57..00000000 --- a/web/admin-spa/dist/assets/TutorialView-DqwFkHUw.js +++ /dev/null @@ -1 +0,0 @@ -import{_}from"./index-Cr7hSgrN.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-R8HMg95E.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Windows 安装方法

方法一:官网下载(推荐)

  1. 打开浏览器访问 https://nodejs.org/
  2. 点击 "LTS" 版本进行下载(推荐长期支持版本)
  3. 下载完成后双击 .msi 文件
  4. 按照安装向导完成安装,保持默认设置即可

方法二:使用包管理器

如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:

# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
  • • 建议使用 PowerShell 而不是 CMD
  • • 如果遇到权限问题,尝试以管理员身份运行
  • • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功

安装完成后,打开 PowerShell 或 CMD,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 PowerShell 或 CMD,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。

提示
  • • 建议使用 PowerShell 而不是 CMD,功能更强大
  • • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('

查看已设置的环境变量:

# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)

💡 设置后需要重新打开 PowerShell 窗口才能生效。

',3))])])]),t[35]||(t[35]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",B,[t[14]||(t[14]=m('
验证环境变量设置

设置完环境变量后,可以通过以下命令验证是否设置成功:

在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m('
验证 Gemini CLI 环境变量

在 PowerShell 中验证:

echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json

',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude

Windows 常见问题解决

安装时提示 "permission denied" 错误

这通常是权限问题,尝试以下解决方法:

  • 以管理员身份运行 PowerShell
  • 或者配置 npm 使用用户目录:npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误

如果遇到执行策略限制,运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效

设置永久环境变量后需要:

  • 重新启动 PowerShell 或 CMD
  • 或者注销并重新登录 Windows
  • 验证设置:echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

macOS 安装方法

方法一:使用 Homebrew(推荐)

如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:

# 更新 Homebrew
brew update
# 安装 Node.js
brew install node

方法二:官网下载

  1. 访问 https://nodejs.org/
  2. 下载适合 macOS 的 LTS 版本
  3. 打开下载的 .pkg 文件
  4. 按照安装程序指引完成安装
macOS 注意事项
  • • 如果遇到权限问题,可能需要使用 sudo
  • • 首次运行可能需要在系统偏好设置中允许
  • • 建议使用 Terminal 或 iTerm2
验证安装是否成功

安装完成后,打开 Terminal,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开 Terminal,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m('
验证 Gemini CLI 环境变量

在 Terminal 中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。

',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

macOS 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
macOS 安全设置阻止运行

如果系统阻止运行 Claude Code:

  • 打开"系统偏好设置" → "安全性与隐私"
  • 点击"仍要打开"或"允许"
  • 或者在 Terminal 中运行:sudo spctl --master-disable
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
  • 重新启动 Terminal
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('

1 安装 Node.js 环境

Claude Code 需要 Node.js 环境才能运行。

Linux 安装方法

方法一:使用官方仓库(推荐)

# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs

方法二:使用系统包管理器

虽然版本可能不是最新的,但对于基本使用已经足够:

# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
  • • 某些发行版可能需要安装额外的依赖
  • • 如果遇到权限问题,使用 sudo
  • • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功

安装完成后,打开终端,输入以下命令:

node --version
npm --version

如果显示版本号,说明安装成功了!

2 安装 Claude Code

安装 Claude Code

打开终端,运行以下命令:

# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code

如果遇到权限问题,可以使用 sudo:

sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装

安装完成后,输入以下命令检查是否安装成功:

claude --version

如果显示版本号,恭喜你!Claude Code 已经成功安装了。

',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m('
验证 Gemini CLI 环境变量

在终端中验证:

echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m('
VSCode Claude 插件配置

如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:

配置文件位置:~/.claude/config.json

💡 如果该文件不存在,请手动创建。

{
"primaryApiKey": "crs"
}
',1)),e("div",je,[t[127]||(t[127]=m('
配置 Droid CLI

Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。

',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('

4 开始使用 Claude Code

现在你可以开始使用 Claude Code 了!

启动 Claude Code
claude
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude

Linux 常见问题解决

安装时提示权限错误

尝试以下解决方法:

  • 使用 sudo 安装:sudo npm install -g @anthropic-ai/claude-code
  • 或者配置 npm 使用用户目录:npm config set prefix ~/.npm-global
  • 然后添加到 PATH:export PATH=~/.npm-global/bin:$PATH
缺少依赖库

某些 Linux 发行版需要安装额外依赖:

# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效

检查以下几点:

  • 确认修改了正确的配置文件(.bashrc 或 .zshrc)
  • 重新启动终端或运行 source ~/.bashrc
  • 验证设置:echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},We=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{We as default}; diff --git a/web/admin-spa/dist/assets/UserDashboardView-C3u0eacX.js b/web/admin-spa/dist/assets/UserDashboardView-C3u0eacX.js deleted file mode 100644 index 43fcd994..00000000 --- a/web/admin-spa/dist/assets/UserDashboardView-C3u0eacX.js +++ /dev/null @@ -1 +0,0 @@ -import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-R8HMg95E.js";import{_ as V,b as z,s as _,a as Z}from"./index-Cr7hSgrN.js";import{T as ee}from"./ThemeToggle-Dkc-_0Ud.js";import{C as te}from"./ConfirmModal-CZV4xGP-.js";import se from"./TutorialView-DqwFkHUw.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('

Daily Usage Trend

Usage Chart

Daily usage trends would be displayed here

(Chart integration can be added with Chart.js, D3.js, or similar library)

',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},Zo=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{Zo as default}; diff --git a/web/admin-spa/dist/assets/UserDashboardView-DyavPA36.js b/web/admin-spa/dist/assets/UserDashboardView-DyavPA36.js new file mode 100644 index 00000000..ac2cf972 --- /dev/null +++ b/web/admin-spa/dist/assets/UserDashboardView-DyavPA36.js @@ -0,0 +1 @@ +import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-BVUySZOn.js";import{_ as V,b as z,s as _,a as Z}from"./index-BAse2XU9.js";import{T as ee}from"./ThemeToggle-Btdau4yo.js";import{C as te}from"./ConfirmModal-BGRLg47v.js";import se from"./TutorialView-C0wjIk1C.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('

Daily Usage Trend

Usage Chart

Daily usage trends would be displayed here

(Chart integration can be added with Chart.js, D3.js, or similar library)

',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},el=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{el as default}; diff --git a/web/admin-spa/dist/assets/UserLoginView-COfwLqzh.js b/web/admin-spa/dist/assets/UserLoginView-COfwLqzh.js new file mode 100644 index 00000000..ecfe7ee4 --- /dev/null +++ b/web/admin-spa/dist/assets/UserLoginView-COfwLqzh.js @@ -0,0 +1 @@ +import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-BVUySZOn.js";import{_ as C,b as T,a as U,s as M}from"./index-BAse2XU9.js";import{T as B}from"./ThemeToggle-Btdau4yo.js";import"./chart-ChB167Jv.js";import"./vendor-Dr8jvgFu.js";import"./element-plus-CKhypU-Q.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),s=h({username:"",password:""}),w=async()=>{var d,t;if(!s.username||!s.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:s.username,password:s.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((t=(d=o.response)==null?void 0:d.data)==null?void 0:t.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,t)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[t[7]||(t[7]=_('
Claude Relay

User Sign In

Sign in to your account to manage your API keys

',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[t[2]||(t[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":t[0]||(t[0]=l=>s.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,s.username]])])]),e("div",null,[t[3]||(t[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":t[1]||(t[1]=l=>s.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,s.password]])])]),a.value?(i(),n("div",D,[e("div",H,[t[4]||(t[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!s.username||!s.password,type:"submit"},[r.value?(i(),n("span",Y,t[5]||(t[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>t[6]||(t[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default}; diff --git a/web/admin-spa/dist/assets/UserLoginView-qdXph3b_.js b/web/admin-spa/dist/assets/UserLoginView-qdXph3b_.js deleted file mode 100644 index 19a5df53..00000000 --- a/web/admin-spa/dist/assets/UserLoginView-qdXph3b_.js +++ /dev/null @@ -1 +0,0 @@ -import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-R8HMg95E.js";import{_ as C,b as T,a as U,s as M}from"./index-Cr7hSgrN.js";import{T as B}from"./ThemeToggle-Dkc-_0Ud.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),t=h({username:"",password:""}),w=async()=>{var d,s;if(!t.username||!t.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:t.username,password:t.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((s=(d=o.response)==null?void 0:d.data)==null?void 0:s.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,s)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[s[7]||(s[7]=_('
Claude Relay

User Sign In

Sign in to your account to manage your API keys

',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[s[2]||(s[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":s[0]||(s[0]=l=>t.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,t.username]])])]),e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=l=>t.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,t.password]])])]),a.value?(i(),n("div",D,[e("div",H,[s[4]||(s[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!t.username||!t.password,type:"submit"},[r.value?(i(),n("span",Y,s[5]||(s[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>s[6]||(s[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default}; diff --git a/web/admin-spa/dist/assets/UserManagementView-CFT_Esng.js b/web/admin-spa/dist/assets/UserManagementView-CFT_Esng.js new file mode 100644 index 00000000..e282d0f7 --- /dev/null +++ b/web/admin-spa/dist/assets/UserManagementView-CFT_Esng.js @@ -0,0 +1 @@ +import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-BVUySZOn.js";import{_ as q,c as A,s as M}from"./index-BAse2XU9.js";import{C as te}from"./ConfirmModal-BGRLg47v.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./chart-ChB167Jv.js";import"./element-plus-CKhypU-Q.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},qs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{qs as default}; diff --git a/web/admin-spa/dist/assets/UserManagementView-CUF5iwjE.js b/web/admin-spa/dist/assets/UserManagementView-CUF5iwjE.js deleted file mode 100644 index 08457f8a..00000000 --- a/web/admin-spa/dist/assets/UserManagementView-CUF5iwjE.js +++ /dev/null @@ -1 +0,0 @@ -import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-R8HMg95E.js";import{_ as q,c as A,s as M}from"./index-Cr7hSgrN.js";import{C as te}from"./ConfirmModal-CZV4xGP-.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./element-plus-BUfCkBQO.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},Hs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{Hs as default}; diff --git a/web/admin-spa/dist/assets/WindowCountdown-DF7xS2EZ.js b/web/admin-spa/dist/assets/WindowCountdown-Cb_iHkvc.js similarity index 98% rename from web/admin-spa/dist/assets/WindowCountdown-DF7xS2EZ.js rename to web/admin-spa/dist/assets/WindowCountdown-Cb_iHkvc.js index 9fede84a..9e278ec5 100644 --- a/web/admin-spa/dist/assets/WindowCountdown-DF7xS2EZ.js +++ b/web/admin-spa/dist/assets/WindowCountdown-Cb_iHkvc.js @@ -1 +1 @@ -import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-R8HMg95E.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _}; +import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-BVUySZOn.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _}; diff --git a/web/admin-spa/dist/assets/chart-yFHxLHpB.js b/web/admin-spa/dist/assets/chart-ChB167Jv.js similarity index 99% rename from web/admin-spa/dist/assets/chart-yFHxLHpB.js rename to web/admin-spa/dist/assets/chart-ChB167Jv.js index 4009691d..73fbbb75 100644 --- a/web/admin-spa/dist/assets/chart-yFHxLHpB.js +++ b/web/admin-spa/dist/assets/chart-ChB167Jv.js @@ -10,4 +10,4 @@ var Jn=Object.defineProperty;var Qn=(i,t,e)=>t in i?Jn(i,t,{enumerable:!0,config * Released under the MIT License */class _a{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,s,n){const o=e.listeners[n],a=e.duration;o.forEach(r=>r({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=cn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;const o=s.items;let a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const s=e.items;let n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var ht=new _a;const es="transparent",ya={boolean(i,t,e){return e>.5?t:i},color(i,t,e){const s=Yi(i||es),n=s.valid&&Yi(t||es);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}};class va{constructor(t,e,s,n){const o=e[s];n=qt([t.to,n,o,t.from]);const a=qt([t.from,o,n]);this._active=!0,this._fn=t.fn||ya[t.type||typeof a],this._easing=se[t.easing]||se.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);const n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=qt([t.to,e,n,t.from]),this._from=qt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to;let l;if(this._active=o!==r&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){const e=t?"res":"rej",s=this._promises||[];for(let n=0;n{const o=t[n];if(!T(o))return;const a={};for(const r of e)a[r]=o[r];(V(o.properties)&&o.properties||[n]).forEach(r=>{(r===n||!s.has(r))&&s.set(r,a)})})}_animateOptions(t,e){const s=e.options,n=ka(t,s);if(!n)return[];const o=this._createAnimations(n,s);return s.$shared&&Ma(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){const s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now();let l;for(l=a.length-1;l>=0;--l){const c=a[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}const h=e[c];let d=o[c];const u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new va(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const s=this._createAnimations(t,e);if(s.length)return ht.add(this._chart,s),!0}}function Ma(i,t){const e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function os(i,t){const{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=Da(o,a,s),d=t.length;let u;for(let f=0;fe[s].axis===t).shift()}function Oa(i,t){return vt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Ta(i,t,e){return vt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Yt(i,t){const e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(const n of t){const o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e],o[s]._visualValues!==void 0&&o[s]._visualValues[e]!==void 0&&delete o[s]._visualValues[e]}}}const ti=i=>i==="reset"||i==="none",as=(i,t)=>t?i:Object.assign({},i),La=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:An(e,!0),values:null};class nt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Qe(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Yt(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d==="x"?u:d==="r"?g:f,o=e.xAxisID=D(s.xAxisID,Ze(t,"x")),a=e.yAxisID=D(s.yAxisID,Ze(t,"y")),r=e.rAxisID=D(s.rAxisID,Ze(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Hi(this._data,this),t._stacked&&Yt(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(T(e)){const n=this._cachedMeta;this._data=Pa(e,n)}else if(s!==e){if(s){Hi(s,this);const n=this._cachedMeta;Yt(n),n._parsed=[]}e&&Object.isExtensible(e)&&mo(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,s=this.getDataset();let n=!1;this._dataCheck();const o=e._stacked;e._stacked=Qe(e.vScale,e),e.stack!==s.stack&&(n=!0,Yt(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&(os(this,e._parsed),e._stacked=Qe(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis;let l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{V(n[t])?u=this.parseArrayData(s,n,t,e):T(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);const f=()=>d[r]===null||c&&d[r]p||d=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(s,n,e),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(as(p,l))),p}_resolveAnimations(t,e,s){const n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){const h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}const c=new Cn(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ti(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){ti(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!ti(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,s=this._cachedMeta.data;for(const[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];const n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;rn-o))}return i._cache.$bar}function Ia(i){const t=i.iScale,e=Ra(t,i.type);let s=t._length,n,o,a,r;const l=()=>{a===32767||a===-32768||(re(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n0?n[i-1]:null,r=iMath.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function On(i,t,e,s){return V(i)?Fa(i,t,e,s):t[e.axis]=e.parse(i,s),t}function rs(i,t,e,s){const n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[];let c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function Va(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.baseh.controller.options.grouped),o=s.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[s.axis],c=h=>{const d=h._parsed.find(f=>f[s.axis]===l),u=d&&d[h.vScale.axis];if(O(u)||isNaN(u))return!0};for(const h of n)if(!(e!==void 0&&c(h))&&((o===!1||a.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&a.push(h.stack),h.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)t[D(this.chart.options.indexAxis==="x"?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){const n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,s=e.iScale,n=[];let o,a;for(o=0,a=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y),c=a._custom;return{label:s[t]||"",value:"("+r+", "+l+(c?", "+c:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;ule(v,r,l,!0)?1:Math.max(y,y*e,_,_*e),g=(v,y,_)=>le(v,r,l,!0)?-1:Math.min(y,y*e,_,_*e),p=f(0,c,d),m=f(j,h,u),b=g(R,c,d),x=g(R+j,h,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}class Ot extends nt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(T(s[t])){const{key:l="value"}=this._parsing;o=c=>+_t(s[c],l)}let a,r;for(a=t,r=t+e;a0&&!isNaN(t)?F*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const s=this.chart;let n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;nt!=="spacing",_indexable:t=>t!=="spacing"&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),M(Ot,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}});class Ce extends nt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled;let{start:r,count:l}=dn(e,n,a);this._drawStart=r,this._drawCount=l,un(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Wt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n==="none",x=e+s,v=t.length;let y=e>0&&this.getParsed(e-1);for(let _=0;_=x){S.skip=!0;continue}const w=this.getParsed(_),P=O(w[f]),C=S[u]=a.getPixelForValue(w[u],_),A=S[f]=o||P?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,w,l):w[f],_);S.skip=isNaN(C)||isNaN(A)||P,S.stop=_>0&&Math.abs(w[u]-y[u])>m,p&&(S.parsed=w,S.raw=c.data[_]),d&&(S.options=h||this.resolveDataElementOptions(_,k.active?"active":n)),b||this.updateElement(k,_,S,n),y=w}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;const o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}M(Ce,"id","line"),M(Ce,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),M(Ce,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class oe extends nt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{const o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){const o=n==="reset",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*R;let f=u,g;const p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?st(this.resolveDataElementOptions(t,e).angle||s):0}}M(oe,"id","polarArea"),M(oe,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),M(oe,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class ui extends Ot{}M(ui,"id","pie"),M(ui,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class Ae extends nt{getLabelAndValue(t){const e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){const a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);const r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){const o=this._cachedMeta.rScale,a=n==="reset";for(let r=e;r0&&this.getParsed(e-1);for(let y=e;y0&&Math.abs(k[f]-v[f])>b,m&&(S.parsed=k,S.raw=c.data[y]),u&&(S.options=d||this.resolveDataElementOptions(y,_.active?"active":n)),x||this.updateElement(_,y,S,n),v=k}this.updateSharedOptions(d,n,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}const s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;const o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}}M(Oe,"id","scatter"),M(Oe,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),M(Oe,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});var $a=Object.freeze({__proto__:null,BarController:Pe,BubbleController:De,DoughnutController:Ot,LineController:Ce,PieController:ui,PolarAreaController:oe,RadarController:Ae,ScatterController:Oe});function Pt(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ei{constructor(t){M(this,"options");this.options=t||{}}static override(t){Object.assign(Ei.prototype,t)}init(){}formats(){return Pt()}parse(){return Pt()}format(){return Pt()}add(){return Pt()}diff(){return Pt()}startOf(){return Pt()}endOf(){return Pt()}}var Ya={_date:Ei};function Ua(i,t,e,s){const{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale,l=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null;if(r&&t===r.axis&&t!=="r"&&a&&o.length){const c=r._reversePixels?go:ft;if(s){if(n._sharedOptions){const h=o[0],d=typeof h.getRange=="function"&&h.getRange(t);if(d){const u=c(o,t,e-d),f=c(o,t,e+d);return{lo:u.lo,hi:f.hi}}}}else{const h=c(o,t,e);if(l){const{vScale:d}=n._cachedMeta,{_parsed:u}=i,f=u.slice(0,h.lo+1).reverse().findIndex(p=>!O(p[d.axis]));h.lo-=Math.max(0,f);const g=u.slice(h.hi).findIndex(p=>!O(p[d.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function Xe(i,t,e,s,n){const o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r{l[a]&&l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var qa={modes:{index(i,t,e,s){const n=Ct(t,i),o=e.axis||"x",a=e.includeInvisible||!1,r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{const h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){const n=Ct(t,i),o=e.axis||"xy",a=e.includeInvisible||!1;let r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a);if(r.length>0){const l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;he.pos===t)}function ds(i,t){return i.filter(e=>Tn.indexOf(e.pos)===-1&&e.box.axis===t)}function Xt(i,t){return i.sort((e,s)=>{const n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Ja(i){const t=[];let e,s,n,o,a,r;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=Xt(Ut(t,"left"),!0),n=Xt(Ut(t,"right")),o=Xt(Ut(t,"top"),!0),a=Xt(Ut(t,"bottom")),r=ds(t,"x"),l=ds(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ut(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function us(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function Ln(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function er(i,t,e,s){const{pos:n,box:o}=e,a=i.maxPadding;if(!T(n)){e.size&&(i[n]-=e.size);const d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&Ln(a,o.getPadding());const r=Math.max(0,t.outerWidth-us(a,i,"left","right")),l=Math.max(0,t.outerHeight-us(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function ir(i){const t=i.maxPadding;function e(s){const n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function sr(i,t){const e=t.maxPadding;function s(n){const o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Jt(i,t,e,s){const n=[];let o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);Ln(u,J(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Za(l.concat(c),d);Jt(r.fullSize,f,d,g),Jt(l,f,d,g),Jt(c,f,d,g)&&Jt(l,f,d,g),ir(f),fs(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,fs(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},I(r.chartArea,p=>{const m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class Rn{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}}class nr extends Rn{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Te="$chartjs",or={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},gs=i=>i===null||i==="";function ar(i,t){const e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[Te]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",gs(n)){const o=Ji(i,"width");o!==void 0&&(i.width=o)}if(gs(s))if(i.style.height==="")i.height=i.width/(t||2);else{const o=Ji(i,"height");o!==void 0&&(i.height=o)}return i}const In=ra?{passive:!0}:!1;function rr(i,t,e){i&&i.addEventListener(t,e,In)}function lr(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,In)}function cr(i,t){const e=or[i.type]||i.type,{x:s,y:n}=Ct(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function We(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function hr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.addedNodes,s),a=a&&!We(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function dr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.removedNodes,s),a=a&&!We(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}const he=new Map;let ps=0;function En(){const i=window.devicePixelRatio;i!==ps&&(ps=i,he.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function ur(i,t){he.size||window.addEventListener("resize",En),he.set(i,t)}function fr(i){he.delete(i),he.size||window.removeEventListener("resize",En)}function gr(i,t,e){const s=i.canvas,n=s&&Ii(s);if(!n)return;const o=hn((r,l)=>{const c=n.clientWidth;e(r,l),c{const l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),ur(i,o),a}function ni(i,t,e){e&&e.disconnect(),t==="resize"&&fr(i)}function pr(i,t,e){const s=i.canvas,n=hn(o=>{i.ctx!==null&&e(cr(o,i))},i);return rr(s,t,n),n}class mr extends Rn{acquireContext(t,e){const s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(ar(t,e),s):null}releaseContext(t){const e=t.canvas;if(!e[Te])return!1;const s=e[Te].initial;["height","width"].forEach(o=>{const a=s[o];O(a)?e.removeAttribute(o):e.setAttribute(o,a)});const n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[Te],!0}addEventListener(t,e,s){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),a={attach:hr,detach:dr,resize:gr}[e]||pr;n[e]=a(t,e,s)}removeEventListener(t,e){const s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:ni,detach:ni,resize:ni}[e]||lr)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return aa(t,e,s,n)}isAttached(t){const e=t&&Ii(t);return!!(e&&e.isConnected)}}function br(i){return!Ri()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?nr:mr}class ot{constructor(){M(this,"x");M(this,"y");M(this,"active",!1);M(this,"options");M(this,"$animations")}tooltipPosition(t){const{x:e,y:s}=this.getProps(["x","y"],t);return{x:e,y:s}}hasValue(){return Wt(this.x)&&Wt(this.y)}getProps(t,e){const s=this.$animations;if(!e||!s)return this;const n={};return t.forEach(o=>{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}}M(ot,"defaults",{}),M(ot,"defaultRoutes");function xr(i,t){const e=i.options.ticks,s=_r(i),n=Math.min(e.maxTicksLimit||s,s),o=e.major.enabled?vr(t):[],a=o.length,r=o[0],l=o[a-1],c=[];if(a>n)return Mr(t,c,o,a/n),c;const h=yr(o,t,n);if(a>0){let d,u;const f=a>1?Math.round((l-r)/(a-1)):null;for(ye(t,c,h,O(f)?0:r-f,r),d=0,u=a-1;dn)return l}return Math.max(n,1)}function vr(i){const t=[];let e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,ms=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e,bs=(i,t)=>Math.min(t||i,i);function xs(i,t){const e=[],s=i.length/t,n=i.length;let o=0;for(;oa+r)))return l}function Pr(i,t){I(i,e=>{const s=e.gc,n=s.length/2;let o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:et(e,et(s,e)),max:et(s,et(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){z(this.options.beforeUpdate,[this])}update(t,e,s){const{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Bo(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=r=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}const h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-Kt(t.grid)-e.padding-_s(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=wi(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){z(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){z(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){const l=_s(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=Kt(o)+l):(t.height=this.maxHeight,t.width=Kt(o)+l),s.display&&this.ticks.length){const{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=st(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){const b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){const{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!=="top"&&this.axis==="x";if(this.isHorizontal()){const h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){z(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:a[P]||0,height:r[P]||0});return{first:w(0),last:w(e-1),widest:w(k),highest:w(S),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return fo(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&tr*n?r/s:l/n:l*n0}_computeGridLineItems(t){const e=this.axis,s=this.chart,n=this.options,{grid:o,position:a,border:r}=n,l=o.offset,c=this.isHorizontal(),d=this.ticks.length+(l?1:0),u=Kt(o),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(B){return wt(s,B,p)};let x,v,y,_,k,S,w,P,C,A,L,U;if(a==="top")x=b(this.bottom),S=this.bottom-u,P=x-m,A=b(t.top)+m,U=t.bottom;else if(a==="bottom")x=b(this.top),A=t.top,U=b(t.bottom)-m,S=x+m,P=this.top+u;else if(a==="left")x=b(this.right),k=this.right-u,w=x-m,C=b(t.left)+m,L=t.right;else if(a==="right")x=b(this.left),C=t.left,L=b(t.right)-m,k=x+m,w=this.left+u;else if(e==="x"){if(a==="center")x=b((t.top+t.bottom)/2+.5);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}A=t.top,U=t.bottom,S=x+m,P=S+u}else if(e==="y"){if(a==="center")x=b((t.left+t.right)/2);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}k=x-m,w=k-u,C=t.left,L=t.right}const tt=D(n.ticks.maxTicksLimit,d),E=Math.max(1,Math.ceil(d/tt));for(v=0;v0&&(kt-=Mt/2);break}ge={left:kt,top:$t,width:Mt+Ft.width,height:jt+Ft.height,color:E.backdropColor}}m.push({label:y,font:P,textOffset:L,options:{rotation:p,color:H,strokeColor:it,strokeWidth:X,textAlign:zt,textBaseline:U,translation:[_,k],backdrop:ge}})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-st(this.labelRotation))return t==="top"?"left":"right";let n="center";return e.align==="start"?n="left":e.align==="end"?n="right":e.align==="inner"&&(n="inner"),n}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:s,mirror:n,padding:o}}=this.options,a=this._getLabelSizes(),r=t+o,l=a.widest.width;let c,h;return e==="left"?n?(h=this.right+o,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h+=l)):(h=this.right-r,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h=this.left)):e==="right"?n?(h=this.left+o,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h-=l)):(h=this.left+r,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h=this.right)):c="right",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;if(e==="left"||e==="right")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e==="top"||e==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:s,top:n,width:o,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,n,o,a),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){const e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,a;const r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o{this.draw(o)}}]:[{z:s,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[];let o,a;for(o=0,a=e.length;o{const s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),a=t[e].split("."),r=a.pop(),l=a.join(".");W.route(o,n,l,r)})}function Rr(i){return"id"in i&&"defaults"in i}class Ir{constructor(){this.controllers=new ve(nt,"datasets",!0),this.elements=new ve(ot,"elements"),this.plugins=new ve(Object,"plugins"),this.scales=new ve(Et,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{const o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):I(n,a=>{const r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){const n=Si(t);z(s["before"+n],[],s),e[t](s),z(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;eo.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}}function zr(i){const t={},e=[],s=Object.keys(rt.plugins.items);for(let o=0;o1&&ys(i[0].toLowerCase());if(s)return s}throw new Error(`Cannot determine type of '${i}' axis. Please provide 'axis' or 'position' option.`)}function vs(i,t,e){if(e[t+"AxisID"]===i)return{axis:t}}function jr(i,t){if(t.data&&t.data.datasets){const e=t.data.datasets.filter(s=>s.xAxisID===i||s.yAxisID===i);if(e.length)return vs(i,"x",e[0])||vs(i,"y",e[0])}return{}}function $r(i,t){const e=Rt[i.type]||{scales:{}},s=t.scales||{},n=fi(i.type,t),o=Object.create(null);return Object.keys(s).forEach(a=>{const r=s[a];if(!T(r))return console.error(`Invalid scale configuration for scale: ${a}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);const l=gi(a,r,jr(a,i),W.scales[r.type]),c=Nr(l,n),h=e.scales||{};o[a]=ee(Object.create(null),[{axis:l},r,h[l],h[c]])}),i.data.datasets.forEach(a=>{const r=a.type||i.type,l=a.indexAxis||fi(r,t),h=(Rt[r]||{}).scales||{};Object.keys(h).forEach(d=>{const u=Wr(d,l),f=a[u+"AxisID"]||u;o[f]=o[f]||Object.create(null),ee(o[f],[{axis:u},s[f],h[d]])})}),Object.keys(o).forEach(a=>{const r=o[a];ee(r,[W.scales[r.type],W.scale])}),o}function zn(i){const t=i.options||(i.options={});t.plugins=D(t.plugins,{}),t.scales=$r(i,t)}function Fn(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function Yr(i){return i=i||{},i.data=Fn(i.data),zn(i),i}const Ms=new Map,Bn=new Set;function Me(i,t){let e=Ms.get(i);return e||(e=t(),Ms.set(i,e),Bn.add(e)),e}const Gt=(i,t,e)=>{const s=_t(t,e);s!==void 0&&i.add(s)};class Ur{constructor(t){this._config=Yr(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),zn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Me(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Me(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Me(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,s=this.type;return Me(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const s=this._scopeCache;let n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){const{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;const l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>Gt(l,t,d))),h.forEach(d=>Gt(l,n,d)),h.forEach(d=>Gt(l,Rt[o]||{},d)),h.forEach(d=>Gt(l,W,d)),h.forEach(d=>Gt(l,hi,d))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Bn.has(e)&&a.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Rt[e]||{},W.datasets[e]||{},{type:e},W,hi]}resolveNamedOptions(t,e,s,n=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=ks(this._resolverCache,t,n);let l=a;if(Kr(a,e)){o.$shared=!1,s=yt(s)?s():s;const c=this.createResolver(t,s,r);l=Nt(a,s,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){const{resolver:o}=ks(this._resolverCache,t,s);return T(e)?Nt(o,e,void 0,n):o}}function ks(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));const n=e.join();let o=s.get(n);return o||(o={resolver:Oi(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes("hover"))},s.set(n,o)),o}const Xr=i=>T(i)&&Object.getOwnPropertyNames(i).some(t=>yt(i[t]));function Kr(i,t){const{isScriptable:e,isIndexable:s}=mn(i);for(const n of t){const o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(yt(r)||Xr(r))||a&&V(r))return!0}return!1}var Gr="4.5.0";const qr=["top","bottom","left","right","chartArea"];function Ss(i,t){return i==="top"||i==="bottom"||qr.indexOf(i)===-1&&t==="x"}function ws(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Ps(i){const t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),z(e&&e.onComplete,[i],t)}function Jr(i){const t=i.chart,e=t.options.animation;z(e&&e.onProgress,[i],t)}function Vn(i){return Ri()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}const Le={},Ds=i=>{const t=Vn(i);return Object.values(Le).filter(e=>e.canvas===t).pop()};function Qr(i,t,e){const s=Object.keys(i);for(const n of s){const o=+n;if(o>=t){const a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function Zr(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}class pt{static register(...t){rt.add(...t),Cs()}static unregister(...t){rt.remove(...t),Cs()}constructor(t,e){const s=this.config=new Ur(e),n=Vn(t),o=Ds(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||br(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Zn(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Er,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=bo(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],Le[this.id]=this,!r||!l){console.error("Failed to create chart: can't acquire context from the given item");return}ht.listen(this,"complete",Ps),ht.listen(this,"progress",Jr),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return O(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return rt}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():qi(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Xi(this.canvas,this.ctx),this}stop(){return ht.stop(this),this}resize(t,e){ht.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,qi(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),z(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};I(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){const t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{});let o=[];e&&(o=o.concat(Object.keys(e).map(a=>{const r=e[a],l=gi(a,r),c=l==="r",h=l==="x";return{options:r,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),I(o,a=>{const r=a.options,l=r.id,c=gi(l,r),h=D(r.type,a.dtype);(r.position===void 0||Ss(r.position,c)!==Ss(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{const u=rt.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),I(n,(a,r)=>{a||delete s[r]}),I(s,a=>{q.configure(this,a,a.options),q.addBox(this,a)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(ws("z","_idx"));const{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){I(this.scales,t=>{q.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Bi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:s,start:n,count:o}of e){const a=s==="_removeElements"?-o:o;Qr(t,n,a)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+","+a.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;q.update(this,this.width,this.height,t);const e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],I(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=Dn(this,t);this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(n&&$e(e,n),t.controller.draw(),n&&Ye(e),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(t){return gt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){const o=qa.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=vt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);re(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ht.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};I(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let a;const r=()=>{n("attach",r),this.attached=!0,this.resize(),s("resize",o),s("detach",a)};a=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){I(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},I(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){const n=s?"set":"remove";let o,a,r,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),r=0,l=t.length;r{const r=this.getDatasetMeta(o);if(!r)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:r.data[a],index:a}});!Ee(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,s){const n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){const s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;const o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){const{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=oo(t),c=Zr(t,this._lastEvent,s,l);s&&(this._lastEvent=null,z(o.onHover,[t,r,this],this),l&&z(o.onClick,[t,r,this],this));const h=!Ee(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}}M(pt,"defaults",W),M(pt,"instances",Le),M(pt,"overrides",Rt),M(pt,"registry",rt),M(pt,"version",Gr),M(pt,"getChart",Ds);function Cs(){return I(pt.instances,i=>i._plugins.invalidate())}function tl(i,t,e){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,d=Math.min(c/a,G(s-e));if(i.beginPath(),i.arc(n,o,a-c/2,s+d/2,e-d/2),r>0){const u=Math.min(c/r,G(s-e));i.arc(n,o,r+c/2,e-u/2,s+u/2,!0)}else{const u=Math.min(c/2,a*G(s-e));if(h==="round")i.arc(n,o,u,e-R/2,s+R/2,!0);else if(h==="bevel"){const f=2*u*u,g=-f*Math.cos(e+R/2)+n,p=-f*Math.sin(e+R/2)+o,m=f*Math.cos(s+R/2)+n,b=f*Math.sin(s+R/2)+o;i.lineTo(g,p),i.lineTo(m,b)}}i.closePath(),i.moveTo(0,0),i.rect(0,0,i.canvas.width,i.canvas.height),i.clip("evenodd")}function el(i,t,e){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t;let c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+j,s-j),i.closePath(),i.clip()}function il(i){return Ai(i,["outerStart","outerEnd","innerStart","innerEnd"])}function sl(i,t,e,s){const n=il(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{const c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Bt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function Ne(i,t,e,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0;let f=0;const g=n-l;if(s){const E=h>0?h-s:0,B=d>0?d-s:0,H=(E+B)/2,it=H!==0?g*H/(H+s):g;f=(g-it)/2}const p=Math.max(.001,g*d-e/R)/d,m=(g-p)/2,b=l+m+f,x=n-m-f,{outerStart:v,outerEnd:y,innerStart:_,innerEnd:k}=sl(t,u,d,x-b),S=d-v,w=d-y,P=b+v/S,C=x-y/w,A=u+_,L=u+k,U=b+_/A,tt=x-k/L;if(i.beginPath(),o){const E=(P+C)/2;if(i.arc(a,r,d,P,E),i.arc(a,r,d,E,C),y>0){const X=Bt(w,C,a,r);i.arc(X.x,X.y,y,C,x+j)}const B=Bt(L,x,a,r);if(i.lineTo(B.x,B.y),k>0){const X=Bt(L,tt,a,r);i.arc(X.x,X.y,k,x+j,tt+Math.PI)}const H=(x-k/u+(b+_/u))/2;if(i.arc(a,r,u,x-k/u,H,!0),i.arc(a,r,u,H,b+_/u,!0),_>0){const X=Bt(A,U,a,r);i.arc(X.x,X.y,_,U+Math.PI,b-j)}const it=Bt(S,b,a,r);if(i.lineTo(it.x,it.y),v>0){const X=Bt(S,P,a,r);i.arc(X.x,X.y,v,b-j,P)}}else{i.moveTo(a,r);const E=Math.cos(P)*d+a,B=Math.sin(P)*d+r;i.lineTo(E,B);const H=Math.cos(C)*d+a,it=Math.sin(C)*d+r;i.lineTo(H,it)}i.closePath()}function nl(i,t,e,s,n){const{fullCircles:o,startAngle:a,circumference:r}=t;let l=t.endAngle;if(o){Ne(i,t,e,s,l,n);for(let c=0;c=R&&f===0&&h!=="miter"&&tl(i,t,p),o||(Ne(i,t,e,s,p,n),i.stroke())}class Qt extends ot{constructor(e){super();M(this,"circumference");M(this,"endAngle");M(this,"fullCircles");M(this,"innerRadius");M(this,"outerRadius");M(this,"pixelMargin");M(this,"startAngle");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,s,n){const o=this.getProps(["x","y"],n),{angle:a,distance:r}=an(o,{x:e,y:s}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:d,circumference:u}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],n),f=(this.options.spacing+this.options.borderWidth)/2,g=D(u,c-l),p=le(a,l,c)&&l!==c,m=g>=F||p,b=ut(r,h+f,d+f);return m&&b}getCenterPoint(e){const{x:s,y:n,startAngle:o,endAngle:a,innerRadius:r,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:c,spacing:h}=this.options,d=(o+a)/2,u=(r+l+h+c)/2;return{x:s+Math.cos(d)*u,y:n+Math.sin(d)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:s,circumference:n}=this,o=(s.offset||0)/4,a=(s.spacing||0)/2,r=s.circular;if(this.pixelMargin=s.borderAlign==="inner"?.33:0,this.fullCircles=n>F?Math.floor(n/F):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();const l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(R,n||0)),h=o*c;e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,nl(e,this,h,a,r),ol(e,this,h,a,r),e.restore()}}M(Qt,"id","arc"),M(Qt,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),M(Qt,"defaultRoutes",{backgroundColor:"backgroundColor"}),M(Qt,"descriptors",{_scriptable:!0,_indexable:e=>e!=="borderDash"});function Wn(i,t,e=t){i.lineCap=D(e.borderCapStyle,t.borderCapStyle),i.setLineDash(D(e.borderDash,t.borderDash)),i.lineDashOffset=D(e.borderDashOffset,t.borderDashOffset),i.lineJoin=D(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=D(e.borderWidth,t.borderWidth),i.strokeStyle=D(e.borderColor,t.borderColor)}function al(i,t,e){i.lineTo(e.x,e.y)}function rl(i){return i.stepped?Ao:i.tension||i.cubicInterpolationMode==="monotone"?Oo:al}function Nn(i,t,e={}){const s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=nr&&o>r;return{count:s,start:l,loop:t.loop,ilen:c(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[x(u)],f.skip)continue;const y=f.x,_=f.y,k=y|0;k===g?(_m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=k,d=0,p=m=_),b=_}v()}function pi(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?cl:ll}function hl(i){return i.stepped?la:i.tension||i.cubicInterpolationMode==="monotone"?ca:At}function dl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wn(i,t.options),i.stroke(n)}function ul(i,t,e,s){const{segments:n,options:o}=t,a=pi(t);for(const r of n)Wn(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}const fl=typeof Path2D=="function";function gl(i,t,e,s){fl&&!t.options.segment?dl(i,t,e,s):ul(i,t,e,s)}class bt extends ot{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){const n=s.spanGaps?this._loop:this._fullLoop;ta(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=pa(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,n=t[e],o=this.points,a=Pn(this,{property:e,start:n,end:n});if(!a.length)return;const r=[],l=hl(s);let c,h;for(c=0,h=a.length;ct!=="borderDash"&&t!=="fill"});function As(i,t,e,s){const n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)i.replace("rgb(","rgba(").replace(")",", 0.5)"));function jn(i){return mi[i%mi.length]}function $n(i){return Os[i%Os.length]}function vl(i,t){return i.borderColor=jn(t),i.backgroundColor=$n(t),++t}function Ml(i,t){return i.backgroundColor=i.data.map(()=>jn(t++)),t}function kl(i,t){return i.backgroundColor=i.data.map(()=>$n(t++)),t}function Sl(i){let t=0;return(e,s)=>{const n=i.getDatasetMeta(s).controller;n instanceof Ot?t=Ml(e,t):n instanceof oe?t=kl(e,t):n&&(t=vl(e,t))}}function Ts(i){let t;for(t in i)if(i[t].borderColor||i[t].backgroundColor)return!0;return!1}function wl(i){return i&&(i.borderColor||i.backgroundColor)}function Pl(){return W.borderColor!=="rgba(0,0,0,0.1)"||W.backgroundColor!=="rgba(0,0,0,0.1)"}var Dl={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(i,t,e){if(!e.enabled)return;const{data:{datasets:s},options:n}=i.config,{elements:o}=n,a=Ts(s)||wl(n)||o&&Ts(o)||Pl();if(!e.forceOverride&&a)return;const r=Sl(i);s.forEach(r)}};function Cl(i,t,e,s,n){const o=n.samples||s;if(o>=e)return i.slice(t,t+e);const a=[],r=(e-2)/(o-2);let l=0;const c=t+e-1;let h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;df&&(f=g,u=i[x],p=x);a[l++]=u,h=p}return a[l++]=i[c],a}function Al(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p;const m=[],b=t+e-1,x=i[t].x,y=i[b].x-x;for(a=t;ap&&(p=c,u=a),n=(o*n+r.x)/++o;else{const k=a-1;if(!O(d)&&!O(u)){const S=Math.min(d,u),w=Math.max(d,u);S!==f&&S!==k&&m.push({...i[S],x:n}),w!==f&&w!==k&&m.push({...i[w],x:n})}a>0&&k!==f&&m.push(i[k]),m.push(r),h=_,o=0,g=p=c,d=u=f=a}}return m}function Yn(i){if(i._decimated){const t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function Ls(i){i.data.datasets.forEach(t=>{Yn(t)})}function Ol(i,t){const e=t.length;let s=0,n;const{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(ft(t,o.axis,a).lo,0,e-1)),c?n=Y(ft(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var Tl={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Ls(i);return}const s=i.width;i.data.datasets.forEach((n,o)=>{const{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(qt([r,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;const h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=Ol(l,c);const f=e.threshold||4*s;if(u<=f){Yn(n);return}O(a)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case"lttb":g=Cl(c,d,u,s,e);break;case"min-max":g=Al(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){Ls(i)}};function Ll(i,t,e){const s=i.segments,n=i.points,o=t.points,a=[];for(const r of s){let{start:l,end:c}=r;c=Ke(l,c,n);const h=bi(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}const d=Pn(t,h);for(const u of d){const f=bi(e,o[u.start],o[u.end],u.loop),g=wn(r,n,f);for(const p of g)a.push({source:p,target:u,start:{[e]:Rs(h,f,"start",Math.max)},end:{[e]:Rs(h,f,"end",Math.min)}})}}return a}function bi(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=G(n),o=G(o)),{property:i,start:n,end:o}}function Rl(i,t){const{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Ke(a,r,n);const l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Ke(i,t,e){for(;t>i;t--){const s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function Rs(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Un(i,t){let e=[],s=!1;return V(i)?(s=!0,e=i):e=Rl(i,t),e.length?new bt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Is(i){return i&&i.fill!==!1}function Il(i,t,e){let n=i[t].fill;const o=[t];let a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!N(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function El(i,t,e){const s=Vl(i);if(T(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return N(n)&&Math.floor(n)===n?zl(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function zl(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Fl(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:T(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Bl(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:T(i)?s=i.value:s=t.getBaseValue(),s}function Vl(i){const t=i.options,e=t.fill;let s=D(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Wl(i){const{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=Nl(t,e);r.push(Un({x:null,y:t.bottom},s));for(let l=0;l=0;--a){const r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&ri(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){const o=s[n].$filler;Is(o)&&ri(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){const s=t.meta.$filler;!Is(s)||e.drawTime!=="beforeDatasetDraw"||ri(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Bs=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},Ql=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index;class Vs extends ot{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=z(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=Bs(s,o);let c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,n,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){const{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r;let d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{const m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){const{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t;let d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{const{itemWidth:x,itemHeight:v}=Zl(s,e,o,m,n);b>0&&f+v+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:x,height:v},u=Math.max(u,x),f+=v+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Vt(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=K(s,this.left+n,this.right-this.lineWidths[r]);for(const c of e)r!==c.row&&(r=c.row,l=K(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(const c of e)c.col!==r&&(r=c.col,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;$e(t,this),this._draw(),Ye(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=W.color,l=Vt(t.rtl,this.left,this.width),c=$(a.font),{padding:h}=a,d=c.size,u=d/2;let f;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=Bs(a,d),b=function(k,S,w){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();const P=D(w.lineWidth,1);if(n.fillStyle=D(w.fillStyle,r),n.lineCap=D(w.lineCap,"butt"),n.lineDashOffset=D(w.lineDashOffset,0),n.lineJoin=D(w.lineJoin,"miter"),n.lineWidth=P,n.strokeStyle=D(w.strokeStyle,r),n.setLineDash(D(w.lineDash,[])),a.usePointStyle){const C={radius:p*Math.SQRT2/2,pointStyle:w.pointStyle,rotation:w.rotation,borderWidth:P},A=l.xPlus(k,g/2),L=S+u;gn(n,C,A,L,a.pointStyleWidth&&g)}else{const C=S+Math.max((d-p)/2,0),A=l.leftForLtr(k,g),L=Tt(w.borderRadius);n.beginPath(),Object.values(L).some(U=>U!==0)?ce(n,{x:A,y:C,w:g,h:p,radius:L}):n.rect(A,C,g,p),n.fill(),P!==0&&n.stroke()}n.restore()},x=function(k,S,w){It(n,w.text,k,S+m/2,c,{strikethrough:w.hidden,textAlign:l.textAlign(w.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();v?f={x:K(o,this.left+h,this.right-s[0]),y:this.top+h+y,line:0}:f={x:this.left+h,y:K(o,this.top+y+h,this.bottom-e[0].height),line:0},Mn(this.ctx,t.textDirection);const _=m+h;this.legendItems.forEach((k,S)=>{n.strokeStyle=k.fontColor,n.fillStyle=k.fontColor;const w=n.measureText(k.text).width,P=l.textAlign(k.textAlign||(k.textAlign=a.textAlign)),C=g+u+w;let A=f.x,L=f.y;l.setWidth(this.width),v?S>0&&A+C+h>this.right&&(L=f.y+=_,f.line++,A=f.x=K(o,this.left+h,this.right-s[f.line])):S>0&&L+_>this.bottom&&(A=f.x=A+e[f.line].width+h,f.line++,L=f.y=K(o,this.top+y+h,this.bottom-e[f.line].height));const U=l.x(A);if(b(U,L,k),A=xo(P,A+g+u,v?A+C:this.right,t.rtl),x(l.x(A),L,k),v)f.x+=C+h;else if(typeof k.text!="string"){const tt=c.lineHeight;f.y+=Kn(k,tt)+h}else f.y+=_}),kn(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,s=$(e.font),n=J(e.padding);if(!e.display)return;const o=Vt(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l;let h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=K(t.align,d,this.right-u);else{const g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+K(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=K(r,d,d+u);a.textAlign=o.textAlign(Di(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,It(a,e.text,f,h,s)}_computeTitleHeight(){const t=this.options.title,e=$(t.font),s=J(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(ut(t,this.left,this.right)&&ut(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;so.length>a.length?o:a)),t+e.size/2+s.measureText(n).width}function ec(i,t,e){let s=i;return typeof t.text!="string"&&(s=Kn(t,e)),s}function Kn(i,t){const e=i.text?i.text.length:0;return t*e}function ic(i,t){return!!((i==="mousemove"||i==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(i==="click"||i==="mouseup"))}var sc={id:"legend",_element:Vs,start(i,t,e){const s=i.legend=new Vs({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s)},stop(i){q.removeBox(i,i.legend),delete i.legend},beforeUpdate(i,t,e){const s=i.legend;q.configure(i,s,e),s.options=e},afterUpdate(i){const t=i.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(i,t){t.replay||i.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(i,t,e){const s=t.datasetIndex,n=e.chart;n.isDatasetVisible(s)?(n.hide(s),t.hidden=!0):(n.show(s),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:i=>i.chart.options.color,boxWidth:40,padding:10,generateLabels(i){const t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=i.legend.options;return i._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(e?0:void 0),h=J(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:s||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:a&&(r||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}};class zi extends ot{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;const n=V(s.text)?s.text.length:1;this._padding=J(s.padding);const o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align;let l=0,c,h,d;return this.isHorizontal()?(h=K(r,s,o),d=e+t,c=o-s):(a.position==="left"?(h=s+t,d=K(r,n,e),l=R*-.5):(h=o-t,d=K(r,e,n),l=R*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);It(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:Di(e.align),textBaseline:"middle",translation:[a,r]})}}function nc(i,t){const e=new zi({ctx:i.ctx,options:t,chart:i});q.configure(i,e,t),q.addBox(i,e),i.titleBlock=e}var oc={id:"title",_element:zi,start(i,t,e){nc(i,e)},stop(i){const t=i.titleBlock;q.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){const s=i.titleBlock;q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ke=new WeakMap;var ac={id:"subtitle",start(i,t,e){const s=new zi({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s),ke.set(i,s)},stop(i){q.removeBox(i,ke.get(i)),ke.delete(i)},beforeUpdate(i,t,e){const s=ke.get(i);q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Zt={average(i){if(!i.length)return!1;let t,e,s=new Set,n=0,o=0;for(t=0,e=i.length;tr+l)/s.size,y:n/o}},nearest(i,t){if(!i.length)return!1;let e=t.x,s=t.y,n=Number.POSITIVE_INFINITY,o,a,r;for(o=0,a=i.length;o-1?i.split(` -`):i}function rc(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Ws(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=J(t.padding);let p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){const y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,I(i.title,v),e.font=l.string,I(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,I(s,y=>{I(y.before,v),I(y.lines,v),I(y.after,v)}),x=0,e.font=h.string,I(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function lc(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),I(r,h=>{const d=$s(t.callbacks,h);n.push(Q(d,"labelColor",this,h)),o.push(Q(d,"labelPointStyle",this,h)),a.push(Q(d,"labelTextColor",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const r=Zt[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const l=this._size=Ws(this,s),c=Object.assign({},r,l),h=Ns(this.chart,s,c),d=Hs(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,b,x,v,y,_;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){const n=this.title,o=n.length;let a,r,l;if(o){const c=Vt(s.rtl,this.x,this.width);for(t.x=Se(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lx!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ce(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ce(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont);let u=d.lineHeight,f=0;const g=Vt(s.rtl,this.x,this.width),p=function(w){e.fillText(w,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let b,x,v,y,_,k,S;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Se(this,m,s),e.fillStyle=s.bodyColor,I(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,k=n.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const a=Zt[t.position].call(this,this._active,this._eventPosition);if(!a)return;const r=this._size=Ws(this,t),l=Object.assign({},a,this._size),c=Ns(e,t,l),h=Hs(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=J(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Mn(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),kn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:r,index:l})=>{const c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!Ee(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!Ee(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);const a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,a=Zt[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}}M(xi,"positioners",Zt);var gc={id:"tooltip",_element:xi,positioners:Zt,afterInit(i,t,e){e&&(i.tooltip=new xi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Gn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:i=>i!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},pc=Object.freeze({__proto__:null,Colors:Dl,Decimation:Tl,Filler:Jl,Legend:sc,SubTitle:ac,Title:oc,Tooltip:gc});const mc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function bc(i,t,e,s){const n=i.indexOf(t);if(n===-1)return mc(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const xc=(i,t)=>i===null?null:Y(Math.round(i),0,t);function Ys(i){const t=this.getLabels();return i>=0&&ie.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}M(_i,"id","category"),M(_i,"defaults",{ticks:{callback:Ys}});function _c(i,t){const e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1);let _=Wi((m-p)/g/f)*f,k,S,w,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Wi(P*_/g/f)*f),O(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n==="ticks"?(S=Math.floor(p/_)*_,w=Math.ceil(m/_)*_):(S=p,w=m),b&&x&&o&&ho((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,S=a,w=r):v?(S=b?a:S,w=x?r:w,P=c-1,_=(w-S)/P):(P=(w-S)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));const C=Math.max(Ni(_),Ni(S));k=Math.pow(10,O(l)?C:l),S=Math.round(S*k)/k,w=Math.round(w*k)/k;let A=0;for(b&&(u&&S!==a?(e.push({value:a}),Sr)break;e.push({value:L})}return x&&u&&w!==r?e.length&&ie(e[e.length-1].value,r,Us(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||w===r)&&e.push({value:w}),e}function Us(i,t,{horizontal:e,minRotation:s}){const n=st(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(""+i).length;return Math.min(t/o,a)}class He extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:n,max:o}=this;const a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){const l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=_c(n,o);return t.bounds==="ticks"&&on(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return fe(t,this.chart.options.locale,this.options.ticks.format)}}class yi extends He{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=st(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}M(yi,"id","linear"),M(yi,"defaults",{ticks:{callback:je.formatters.numeric}});const de=i=>Math.floor(mt(i)),Dt=(i,t)=>Math.pow(10,de(i)+t);function Xs(i){return i/Math.pow(10,de(i))===1}function Ks(i,t,e){const s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function yc(i,t){const e=t-i;let s=de(e);for(;Ks(i,t,s)>10;)s++;for(;Ks(i,t,s)<10;)s--;return Math.min(s,de(i))}function vc(i,{min:t,max:e}){t=et(i.min,t);const s=[],n=de(t);let o=yc(t,e),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10;let d=Math.floor((c-h)/Math.pow(10,o)),u=et(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;const f=et(i.max,u);return s.push({value:f,major:Xs(f),significand:d}),s}class vi extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=He.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Dt(this.min,0)?Dt(this.min,-1):Dt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Dt(s,-1)),a(Dt(n,1)))),s<=0&&o(Dt(n,-1)),n<=0&&a(Dt(s,1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=vc(e,this);return t.bounds==="ticks"&&on(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":fe(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}M(vi,"id","logarithmic"),M(vi,"defaults",{ticks:{callback:je.formatters.logarithmic,major:{enabled:!0}}});function Mi(i){const t=i.ticks;if(t.display&&i.display){const e=J(t.backdropPadding);return D(t.font&&t.font.size,W.font.size)+e.height}return 0}function Mc(i,t,e){return e=V(e)?e:[e],{w:Co(i,t.string,e),h:e.length*t.lineHeight}}function Gs(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function wc(i,t,e){const s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(wi(G(l.angle+j))),h=Oc(l.y,r.h,c),d=Cc(c),u=Ac(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function Pc(i,t){if(!t)return!0;const{left:e,top:s,right:n,bottom:o}=i;return!(gt({x:e,y:s},t)||gt({x:e,y:o},t)||gt({x:n,y:s},t)||gt({x:n,y:o},t))}function Dc(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Mi(o)/2,additionalAngle:a?R/n:0};let c;for(let h=0;h270||e<90)&&(i-=t),i}function Tc(i,t,e){const{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){const l=Tt(t.borderRadius),c=J(t.backdropPadding);i.fillStyle=r;const h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),ce(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function Lc(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=i._pointLabelItems[n];if(!o.visible)continue;const a=s.setContext(i.getPointLabelContext(n));Tc(e,a,o);const r=$(a.font),{x:l,y:c,textAlign:h}=o;It(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:"middle"})}}function qn(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);const u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Rc(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){const h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;const d=J(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}It(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}M(te,"id","radialLinear"),M(te,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:je.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M(te,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),M(te,"descriptors",{angleLines:{_fallback:"grid"}});const Ge={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(Ge);function qs(i,t){return i-t}function Js(i,t){if(O(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let a=t;return typeof s=="function"&&(a=s(a)),N(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Wt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function Qs(i,t,e,s){const n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){const a=Z[o];if(Ge[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function zc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function Fc(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function tn(i,t,e){const s=[],n={},o=t.length;let a,r;for(a=0;a+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Qs(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Wt(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);const g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;an-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(we(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return we(this._table,s*this._tableRange+this._minPos,!0)}}M(ki,"id","timeseries"),M(ki,"defaults",ue.defaults);var Bc=Object.freeze({__proto__:null,CategoryScale:_i,LinearScale:yi,LogarithmicScale:vi,RadialLinearScale:te,TimeScale:ue,TimeSeriesScale:ki});const Vc=[$a,yl,pc,Bc];pt.register(...Vc);export{pt as C}; +`):i}function rc(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Ws(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=J(t.padding);let p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){const y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,I(i.title,v),e.font=l.string,I(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,I(s,y=>{I(y.before,v),I(y.lines,v),I(y.after,v)}),x=0,e.font=h.string,I(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function lc(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),I(r,h=>{const d=$s(t.callbacks,h);n.push(Q(d,"labelColor",this,h)),o.push(Q(d,"labelPointStyle",this,h)),a.push(Q(d,"labelTextColor",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const r=Zt[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const l=this._size=Ws(this,s),c=Object.assign({},r,l),h=Ns(this.chart,s,c),d=Hs(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,b,x,v,y,_;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){const n=this.title,o=n.length;let a,r,l;if(o){const c=Vt(s.rtl,this.x,this.width);for(t.x=Se(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lx!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ce(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ce(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont);let u=d.lineHeight,f=0;const g=Vt(s.rtl,this.x,this.width),p=function(w){e.fillText(w,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let b,x,v,y,_,k,S;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Se(this,m,s),e.fillStyle=s.bodyColor,I(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,k=n.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const a=Zt[t.position].call(this,this._active,this._eventPosition);if(!a)return;const r=this._size=Ws(this,t),l=Object.assign({},a,this._size),c=Ns(e,t,l),h=Hs(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=J(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Mn(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),kn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:r,index:l})=>{const c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!Ee(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!Ee(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);const a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,a=Zt[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}}M(xi,"positioners",Zt);var gc={id:"tooltip",_element:xi,positioners:Zt,afterInit(i,t,e){e&&(i.tooltip=new xi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Gn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:i=>i!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},pc=Object.freeze({__proto__:null,Colors:Dl,Decimation:Tl,Filler:Jl,Legend:sc,SubTitle:ac,Title:oc,Tooltip:gc});const mc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function bc(i,t,e,s){const n=i.indexOf(t);if(n===-1)return mc(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const xc=(i,t)=>i===null?null:Y(Math.round(i),0,t);function Ys(i){const t=this.getLabels();return i>=0&&ie.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}M(_i,"id","category"),M(_i,"defaults",{ticks:{callback:Ys}});function _c(i,t){const e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1);let _=Wi((m-p)/g/f)*f,k,S,w,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Wi(P*_/g/f)*f),O(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n==="ticks"?(S=Math.floor(p/_)*_,w=Math.ceil(m/_)*_):(S=p,w=m),b&&x&&o&&ho((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,S=a,w=r):v?(S=b?a:S,w=x?r:w,P=c-1,_=(w-S)/P):(P=(w-S)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));const C=Math.max(Ni(_),Ni(S));k=Math.pow(10,O(l)?C:l),S=Math.round(S*k)/k,w=Math.round(w*k)/k;let A=0;for(b&&(u&&S!==a?(e.push({value:a}),Sr)break;e.push({value:L})}return x&&u&&w!==r?e.length&&ie(e[e.length-1].value,r,Us(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||w===r)&&e.push({value:w}),e}function Us(i,t,{horizontal:e,minRotation:s}){const n=st(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(""+i).length;return Math.min(t/o,a)}class He extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:n,max:o}=this;const a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){const l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=_c(n,o);return t.bounds==="ticks"&&on(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return fe(t,this.chart.options.locale,this.options.ticks.format)}}class yi extends He{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=st(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}M(yi,"id","linear"),M(yi,"defaults",{ticks:{callback:je.formatters.numeric}});const de=i=>Math.floor(mt(i)),Dt=(i,t)=>Math.pow(10,de(i)+t);function Xs(i){return i/Math.pow(10,de(i))===1}function Ks(i,t,e){const s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function yc(i,t){const e=t-i;let s=de(e);for(;Ks(i,t,s)>10;)s++;for(;Ks(i,t,s)<10;)s--;return Math.min(s,de(i))}function vc(i,{min:t,max:e}){t=et(i.min,t);const s=[],n=de(t);let o=yc(t,e),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10;let d=Math.floor((c-h)/Math.pow(10,o)),u=et(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;const f=et(i.max,u);return s.push({value:f,major:Xs(f),significand:d}),s}class vi extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=He.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Dt(this.min,0)?Dt(this.min,-1):Dt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Dt(s,-1)),a(Dt(n,1)))),s<=0&&o(Dt(n,-1)),n<=0&&a(Dt(s,1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=vc(e,this);return t.bounds==="ticks"&&on(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":fe(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}M(vi,"id","logarithmic"),M(vi,"defaults",{ticks:{callback:je.formatters.logarithmic,major:{enabled:!0}}});function Mi(i){const t=i.ticks;if(t.display&&i.display){const e=J(t.backdropPadding);return D(t.font&&t.font.size,W.font.size)+e.height}return 0}function Mc(i,t,e){return e=V(e)?e:[e],{w:Co(i,t.string,e),h:e.length*t.lineHeight}}function Gs(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function wc(i,t,e){const s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(wi(G(l.angle+j))),h=Oc(l.y,r.h,c),d=Cc(c),u=Ac(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function Pc(i,t){if(!t)return!0;const{left:e,top:s,right:n,bottom:o}=i;return!(gt({x:e,y:s},t)||gt({x:e,y:o},t)||gt({x:n,y:s},t)||gt({x:n,y:o},t))}function Dc(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Mi(o)/2,additionalAngle:a?R/n:0};let c;for(let h=0;h270||e<90)&&(i-=t),i}function Tc(i,t,e){const{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){const l=Tt(t.borderRadius),c=J(t.backdropPadding);i.fillStyle=r;const h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),ce(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function Lc(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=i._pointLabelItems[n];if(!o.visible)continue;const a=s.setContext(i.getPointLabelContext(n));Tc(e,a,o);const r=$(a.font),{x:l,y:c,textAlign:h}=o;It(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:"middle"})}}function qn(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);const u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Rc(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){const h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;const d=J(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}It(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}M(te,"id","radialLinear"),M(te,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:je.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M(te,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),M(te,"descriptors",{angleLines:{_fallback:"grid"}});const Ge={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(Ge);function qs(i,t){return i-t}function Js(i,t){if(O(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let a=t;return typeof s=="function"&&(a=s(a)),N(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Wt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function Qs(i,t,e,s){const n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){const a=Z[o];if(Ge[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function zc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function Fc(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function tn(i,t,e){const s=[],n={},o=t.length;let a,r;for(a=0;a+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Qs(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Wt(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);const g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;an-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(we(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return we(this._table,s*this._tableRange+this._minPos,!0)}}M(ki,"id","timeseries"),M(ki,"defaults",ue.defaults);var Bc=Object.freeze({__proto__:null,CategoryScale:_i,LinearScale:yi,LogarithmicScale:vi,RadialLinearScale:te,TimeScale:ue,TimeSeriesScale:ki});const Vc=[$a,yl,pc,Bc];pt.register(...Vc);export{Qt as A,pt as C,Ot as D,Ce as L,Re as P,_i as a,yi as b,bt as c,gc as d,sc as e,Jl as i,oc as p}; diff --git a/web/admin-spa/dist/assets/element-plus-BWHEPMNp.css b/web/admin-spa/dist/assets/element-plus-BWHEPMNp.css deleted file mode 100644 index 601b4e55..00000000 --- a/web/admin-spa/dist/assets/element-plus-BWHEPMNp.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-autocomplete{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;position:relative;width:var(--el-input-width)}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper,.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);line-height:34px;list-style:none;margin:0;overflow:hidden;padding:0 20px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{color:var(--el-text-color-secondary);font-size:20px;height:100px;line-height:100px;text-align:center}.el-autocomplete-suggestion.is-loading li:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;align-items:center;background:var(--el-avatar-bg-color);box-sizing:border-box;color:var(--el-avatar-text-color);display:inline-flex;font-size:var(--el-avatar-text-size);height:var(--el-avatar-size);justify-content:center;outline:none;overflow:hidden;text-align:center;width:var(--el-avatar-size)}.el-avatar>img{display:block;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);align-items:center;background-color:var(--el-backtop-bg-color);border-radius:50%;box-shadow:var(--el-box-shadow-lighter);color:var(--el-backtop-text-color);cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;position:fixed;width:40px;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{content:"";display:table}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);display:flex;justify-content:space-between;padding:12px 20px}.el-calendar__title{align-self:center;color:var(--el-text-color)}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);font-weight:400;padding:12px 0}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);transition:background-color var(--el-transition-duration-fast) ease;vertical-align:top}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{background-color:var(--el-calendar-selected-bg-color);cursor:pointer}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-carousel__item{display:inline-block;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.el-carousel__item,.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{height:50%;width:100%}.el-carousel__mask{background-color:var(--el-color-white);height:100%;left:0;opacity:.24;position:absolute;top:0;transition:var(--el-transition-duration-fast);width:100%}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31,45,61,.11);--el-carousel-arrow-hover-background:rgba(31,45,61,.23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{align-items:center;background-color:var(--el-carousel-arrow-background);border:none;border-radius:50%;color:#fff;cursor:pointer;display:inline-flex;font-size:var(--el-carousel-arrow-font-size);height:var(--el-carousel-arrow-size);justify-content:center;margin:0;outline:none;padding:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);transition:var(--el-transition-duration);width:var(--el-carousel-arrow-size);z-index:10}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{list-style:none;margin:0;padding:0;position:absolute;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical)*2);position:static;text-align:center;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels{left:0;right:0;text-align:center;transform:none}.el-carousel__indicators--labels .el-carousel__button{color:#000;font-size:12px;height:auto;padding:2px 18px;width:auto}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{height:calc(var(--el-carousel-indicator-width)/2);width:var(--el-carousel-indicator-height)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{background-color:#fff;border:none;cursor:pointer;display:block;height:var(--el-carousel-indicator-height);margin:0;opacity:.48;outline:none;padding:0;transition:var(--el-transition-duration);width:var(--el-carousel-indicator-width)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%) translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%) translate(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);display:flex;font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{border-right:var(--el-cascader-menu-border);box-sizing:border-box;color:var(--el-cascader-menu-text-color);min-width:180px}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;list-style:none;margin:0;min-height:100%;padding:6px 0;position:relative}.el-cascader-menu__hover-zone{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.el-cascader-menu__empty-text{align-items:center;color:var(--el-cascader-color-empty);display:flex;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{align-items:center;display:flex;height:34px;line-height:34px;outline:none;padding:0 30px 0 20px;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{left:10px;position:absolute}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;overflow:hidden;padding:0 8px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-cascader-node>.el-checkbox,.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;font-size:var(--el-font-size-base);line-height:32px;outline:none;position:relative;vertical-align:middle}.el-cascader:not(.is-disabled):hover .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset;cursor:pointer}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{cursor:pointer;text-overflow:ellipsis}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{font-size:14px;transition:transform var(--el-transition-duration)}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--large .el-cascader__tags{gap:6px;padding:8px}.el-cascader--large .el-cascader__search-input{height:24px;margin-left:7px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader--small .el-cascader__tags{gap:4px;padding:2px}.el-cascader--small .el-cascader__search-input{height:20px;margin-left:5px}.el-cascader.is-disabled .el-cascader__label{color:var(--el-disabled-text-color);z-index:calc(var(--el-index-normal) + 1)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill)}.el-cascader__dropdown.el-popper,.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{box-sizing:border-box;display:flex;flex-wrap:wrap;gap:6px;left:0;line-height:normal;padding:4px;position:absolute;right:30px;text-align:left;top:50%;transform:translateY(-50%)}.el-cascader__tags .el-tag{align-items:center;background:var(--el-cascader-tag-background);display:inline-flex;max-width:100%;text-overflow:ellipsis}.el-cascader__tags .el-tag.el-tag--dark,.el-cascader__tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__tags .el-tag>span{flex:1;line-height:normal;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags .el-tag+input{margin-left:0}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{align-items:center;background:var(--el-fill-color);display:inline-flex;max-width:100%;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag.el-tag--dark,.el-cascader__collapse-tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__collapse-tags .el-tag>span{flex:1;line-height:normal;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags .el-tag+input{margin-left:0}.el-cascader__collapse-tags .el-tag{margin:2px 0}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{color:var(--el-cascader-menu-text-color);font-size:var(--el-font-size-base);margin:0;max-height:204px;padding:6px 0;text-align:center}.el-cascader__suggestion-item{align-items:center;cursor:pointer;display:flex;height:34px;justify-content:space-between;outline:none;padding:0 15px;text-align:left}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{background:transparent;border:none;box-sizing:border-box;color:var(--el-cascader-menu-text-color);flex:1;height:24px;margin-left:7px;min-width:60px;outline:none;padding:0}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:700;line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all)}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--primary.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.el-check-tag--primary.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.el-check-tag--primary.is-checked.is-disabled{background-color:var(--el-color-primary-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-checked.is-disabled:hover{background-color:var(--el-color-primary-light-8)}.el-check-tag.el-check-tag--primary.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-check-tag.el-check-tag--success.is-checked{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.el-check-tag--success.is-checked:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.el-check-tag--success.is-checked.is-disabled{background-color:var(--el-color-success-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-checked.is-disabled:hover{background-color:var(--el-color-success-light-8)}.el-check-tag.el-check-tag--success.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-disabled,.el-check-tag.el-check-tag--success.is-disabled:hover{background-color:var(--el-color-success-light-9)}.el-check-tag.el-check-tag--warning.is-checked{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.el-check-tag--warning.is-checked:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.el-check-tag--warning.is-checked.is-disabled{background-color:var(--el-color-warning-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-checked.is-disabled:hover{background-color:var(--el-color-warning-light-8)}.el-check-tag.el-check-tag--warning.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-disabled,.el-check-tag.el-check-tag--warning.is-disabled:hover{background-color:var(--el-color-warning-light-9)}.el-check-tag.el-check-tag--danger.is-checked{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.el-check-tag--danger.is-checked:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.el-check-tag--danger.is-checked.is-disabled{background-color:var(--el-color-danger-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-checked.is-disabled:hover{background-color:var(--el-color-danger-light-8)}.el-check-tag.el-check-tag--danger.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-disabled,.el-check-tag.el-check-tag--danger.is-disabled:hover{background-color:var(--el-color-danger-light-9)}.el-check-tag.el-check-tag--error.is-checked{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.el-check-tag--error.is-checked:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.el-check-tag--error.is-checked.is-disabled{background-color:var(--el-color-error-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-checked.is-disabled:hover{background-color:var(--el-color-error-light-8)}.el-check-tag.el-check-tag--error.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-disabled,.el-check-tag.el-check-tag--error.is-disabled:hover{background-color:var(--el-color-error-light-9)}.el-check-tag.el-check-tag--info.is-checked{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.el-check-tag--info.is-checked:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--info.is-checked.is-disabled{background-color:var(--el-color-info-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-checked.is-disabled:hover{background-color:var(--el-color-info-light-8)}.el-check-tag.el-check-tag--info.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-disabled,.el-check-tag.el-check-tag--info.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);display:inline-block;position:relative}.el-checkbox-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left-color:transparent;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);line-height:1;margin:0;outline:none;padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{margin:0;opacity:0;outline:none;position:absolute;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7);color:var(--el-checkbox-button-checked-text-color)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-bottom-left-radius:var(--el-border-radius-base);border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-bottom-right-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%) rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:50%;position:absolute;top:50%;transform:translate(-45%,-60%) rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0{flex:0 0 0%;max-width:0}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{left:0;position:relative}.el-col-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-1,.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{left:4.1666666667%;position:relative}.el-col-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-2,.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{left:8.3333333333%;position:relative}.el-col-3{flex:0 0 12.5%;max-width:12.5%}.el-col-3,.el-col-3.is-guttered{display:block}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{left:12.5%;position:relative}.el-col-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-4,.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{left:16.6666666667%;position:relative}.el-col-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-5,.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{left:20.8333333333%;position:relative}.el-col-6{flex:0 0 25%;max-width:25%}.el-col-6,.el-col-6.is-guttered{display:block}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{left:25%;position:relative}.el-col-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-7,.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{left:29.1666666667%;position:relative}.el-col-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-8,.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{left:33.3333333333%;position:relative}.el-col-9{flex:0 0 37.5%;max-width:37.5%}.el-col-9,.el-col-9.is-guttered{display:block}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{left:37.5%;position:relative}.el-col-10{flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-10,.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{left:41.6666666667%;position:relative}.el-col-11{flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-11,.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{left:45.8333333333%;position:relative}.el-col-12{flex:0 0 50%;max-width:50%}.el-col-12,.el-col-12.is-guttered{display:block}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%;position:relative}.el-col-13{flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-13,.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{left:54.1666666667%;position:relative}.el-col-14{flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-14,.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{left:58.3333333333%;position:relative}.el-col-15{flex:0 0 62.5%;max-width:62.5%}.el-col-15,.el-col-15.is-guttered{display:block}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{left:62.5%;position:relative}.el-col-16{flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-16,.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{left:66.6666666667%;position:relative}.el-col-17{flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-17,.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{left:70.8333333333%;position:relative}.el-col-18{flex:0 0 75%;max-width:75%}.el-col-18,.el-col-18.is-guttered{display:block}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{left:75%;position:relative}.el-col-19{flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-19,.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{left:79.1666666667%;position:relative}.el-col-20{flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-20,.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{left:83.3333333333%;position:relative}.el-col-21{flex:0 0 87.5%;max-width:87.5%}.el-col-21,.el-col-21.is-guttered{display:block}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{left:87.5%;position:relative}.el-col-22{flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-22,.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{left:91.6666666667%;position:relative}.el-col-23{flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-23,.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{left:95.8333333333%;position:relative}.el-col-24{flex:0 0 100%;max-width:100%}.el-col-24,.el-col-24.is-guttered{display:block}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{left:100%;position:relative}@media only screen and (max-width:767px){.el-col-xs-0{display:none;flex:0 0 0%;max-width:0}.el-col-xs-0.is-guttered{display:none}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{left:0;position:relative}.el-col-xs-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xs-1,.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{left:4.1666666667%;position:relative}.el-col-xs-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xs-2,.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{left:8.3333333333%;position:relative}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xs-3,.el-col-xs-3.is-guttered{display:block}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{left:12.5%;position:relative}.el-col-xs-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xs-4,.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{left:16.6666666667%;position:relative}.el-col-xs-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xs-5,.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{left:20.8333333333%;position:relative}.el-col-xs-6{flex:0 0 25%;max-width:25%}.el-col-xs-6,.el-col-xs-6.is-guttered{display:block}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{left:25%;position:relative}.el-col-xs-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xs-7,.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{left:29.1666666667%;position:relative}.el-col-xs-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xs-8,.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{left:33.3333333333%;position:relative}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xs-9,.el-col-xs-9.is-guttered{display:block}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{left:37.5%;position:relative}.el-col-xs-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{left:41.6666666667%;position:relative}.el-col-xs-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{left:45.8333333333%;position:relative}.el-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xs-12.is-guttered{display:block}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{left:50%;position:relative}.el-col-xs-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{left:54.1666666667%;position:relative}.el-col-xs-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{left:58.3333333333%;position:relative}.el-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xs-15.is-guttered{display:block}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{left:62.5%;position:relative}.el-col-xs-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{left:66.6666666667%;position:relative}.el-col-xs-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{left:70.8333333333%;position:relative}.el-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xs-18.is-guttered{display:block}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{left:75%;position:relative}.el-col-xs-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{left:79.1666666667%;position:relative}.el-col-xs-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{left:83.3333333333%;position:relative}.el-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xs-21.is-guttered{display:block}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{left:87.5%;position:relative}.el-col-xs-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{left:91.6666666667%;position:relative}.el-col-xs-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{left:95.8333333333%;position:relative}.el-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xs-24.is-guttered{display:block}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{left:100%;position:relative}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;flex:0 0 0%;max-width:0}.el-col-sm-0.is-guttered{display:none}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{left:0;position:relative}.el-col-sm-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-sm-1,.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{left:4.1666666667%;position:relative}.el-col-sm-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-sm-2,.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{left:8.3333333333%;position:relative}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%}.el-col-sm-3,.el-col-sm-3.is-guttered{display:block}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{left:12.5%;position:relative}.el-col-sm-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-sm-4,.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{left:16.6666666667%;position:relative}.el-col-sm-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-sm-5,.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{left:20.8333333333%;position:relative}.el-col-sm-6{flex:0 0 25%;max-width:25%}.el-col-sm-6,.el-col-sm-6.is-guttered{display:block}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{left:25%;position:relative}.el-col-sm-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-sm-7,.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{left:29.1666666667%;position:relative}.el-col-sm-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-sm-8,.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{left:33.3333333333%;position:relative}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%}.el-col-sm-9,.el-col-sm-9.is-guttered{display:block}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{left:37.5%;position:relative}.el-col-sm-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{left:41.6666666667%;position:relative}.el-col-sm-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{left:45.8333333333%;position:relative}.el-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.el-col-sm-12.is-guttered{display:block}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{left:50%;position:relative}.el-col-sm-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{left:54.1666666667%;position:relative}.el-col-sm-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{left:58.3333333333%;position:relative}.el-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-sm-15.is-guttered{display:block}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{left:62.5%;position:relative}.el-col-sm-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{left:66.6666666667%;position:relative}.el-col-sm-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{left:70.8333333333%;position:relative}.el-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.el-col-sm-18.is-guttered{display:block}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{left:75%;position:relative}.el-col-sm-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{left:79.1666666667%;position:relative}.el-col-sm-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{left:83.3333333333%;position:relative}.el-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-sm-21.is-guttered{display:block}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{left:87.5%;position:relative}.el-col-sm-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{left:91.6666666667%;position:relative}.el-col-sm-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{left:95.8333333333%;position:relative}.el-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.el-col-sm-24.is-guttered{display:block}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{left:100%;position:relative}}@media only screen and (min-width:992px){.el-col-md-0{display:none;flex:0 0 0%;max-width:0}.el-col-md-0.is-guttered{display:none}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{left:0;position:relative}.el-col-md-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-md-1,.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{left:4.1666666667%;position:relative}.el-col-md-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-md-2,.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{left:8.3333333333%;position:relative}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%}.el-col-md-3,.el-col-md-3.is-guttered{display:block}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{left:12.5%;position:relative}.el-col-md-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-md-4,.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{left:16.6666666667%;position:relative}.el-col-md-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-md-5,.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{left:20.8333333333%;position:relative}.el-col-md-6{flex:0 0 25%;max-width:25%}.el-col-md-6,.el-col-md-6.is-guttered{display:block}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{left:25%;position:relative}.el-col-md-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-md-7,.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{left:29.1666666667%;position:relative}.el-col-md-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-md-8,.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{left:33.3333333333%;position:relative}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%}.el-col-md-9,.el-col-md-9.is-guttered{display:block}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{left:37.5%;position:relative}.el-col-md-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{left:41.6666666667%;position:relative}.el-col-md-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{left:45.8333333333%;position:relative}.el-col-md-12{display:block;flex:0 0 50%;max-width:50%}.el-col-md-12.is-guttered{display:block}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{left:50%;position:relative}.el-col-md-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{left:54.1666666667%;position:relative}.el-col-md-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{left:58.3333333333%;position:relative}.el-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-md-15.is-guttered{display:block}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{left:62.5%;position:relative}.el-col-md-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{left:66.6666666667%;position:relative}.el-col-md-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{left:70.8333333333%;position:relative}.el-col-md-18{display:block;flex:0 0 75%;max-width:75%}.el-col-md-18.is-guttered{display:block}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{left:75%;position:relative}.el-col-md-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{left:79.1666666667%;position:relative}.el-col-md-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{left:83.3333333333%;position:relative}.el-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-md-21.is-guttered{display:block}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{left:87.5%;position:relative}.el-col-md-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{left:91.6666666667%;position:relative}.el-col-md-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{left:95.8333333333%;position:relative}.el-col-md-24{display:block;flex:0 0 100%;max-width:100%}.el-col-md-24.is-guttered{display:block}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{left:100%;position:relative}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;flex:0 0 0%;max-width:0}.el-col-lg-0.is-guttered{display:none}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{left:0;position:relative}.el-col-lg-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-lg-1,.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{left:4.1666666667%;position:relative}.el-col-lg-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-lg-2,.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{left:8.3333333333%;position:relative}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%}.el-col-lg-3,.el-col-lg-3.is-guttered{display:block}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{left:12.5%;position:relative}.el-col-lg-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-lg-4,.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{left:16.6666666667%;position:relative}.el-col-lg-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-lg-5,.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{left:20.8333333333%;position:relative}.el-col-lg-6{flex:0 0 25%;max-width:25%}.el-col-lg-6,.el-col-lg-6.is-guttered{display:block}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{left:25%;position:relative}.el-col-lg-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-lg-7,.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{left:29.1666666667%;position:relative}.el-col-lg-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-lg-8,.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{left:33.3333333333%;position:relative}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%}.el-col-lg-9,.el-col-lg-9.is-guttered{display:block}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{left:37.5%;position:relative}.el-col-lg-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{left:41.6666666667%;position:relative}.el-col-lg-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{left:45.8333333333%;position:relative}.el-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.el-col-lg-12.is-guttered{display:block}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{left:50%;position:relative}.el-col-lg-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{left:54.1666666667%;position:relative}.el-col-lg-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{left:58.3333333333%;position:relative}.el-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-lg-15.is-guttered{display:block}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{left:62.5%;position:relative}.el-col-lg-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{left:66.6666666667%;position:relative}.el-col-lg-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{left:70.8333333333%;position:relative}.el-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.el-col-lg-18.is-guttered{display:block}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{left:75%;position:relative}.el-col-lg-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{left:79.1666666667%;position:relative}.el-col-lg-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{left:83.3333333333%;position:relative}.el-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-lg-21.is-guttered{display:block}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{left:87.5%;position:relative}.el-col-lg-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{left:91.6666666667%;position:relative}.el-col-lg-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{left:95.8333333333%;position:relative}.el-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.el-col-lg-24.is-guttered{display:block}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{left:100%;position:relative}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;flex:0 0 0%;max-width:0}.el-col-xl-0.is-guttered{display:none}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{left:0;position:relative}.el-col-xl-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xl-1,.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{left:4.1666666667%;position:relative}.el-col-xl-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xl-2,.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{left:8.3333333333%;position:relative}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xl-3,.el-col-xl-3.is-guttered{display:block}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{left:12.5%;position:relative}.el-col-xl-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xl-4,.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{left:16.6666666667%;position:relative}.el-col-xl-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xl-5,.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{left:20.8333333333%;position:relative}.el-col-xl-6{flex:0 0 25%;max-width:25%}.el-col-xl-6,.el-col-xl-6.is-guttered{display:block}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{left:25%;position:relative}.el-col-xl-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xl-7,.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{left:29.1666666667%;position:relative}.el-col-xl-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xl-8,.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{left:33.3333333333%;position:relative}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xl-9,.el-col-xl-9.is-guttered{display:block}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{left:37.5%;position:relative}.el-col-xl-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{left:41.6666666667%;position:relative}.el-col-xl-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{left:45.8333333333%;position:relative}.el-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xl-12.is-guttered{display:block}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{left:50%;position:relative}.el-col-xl-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{left:54.1666666667%;position:relative}.el-col-xl-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{left:58.3333333333%;position:relative}.el-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xl-15.is-guttered{display:block}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{left:62.5%;position:relative}.el-col-xl-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{left:66.6666666667%;position:relative}.el-col-xl-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{left:70.8333333333%;position:relative}.el-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xl-18.is-guttered{display:block}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{left:75%;position:relative}.el-col-xl-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{left:79.1666666667%;position:relative}.el-col-xl-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{left:83.3333333333%;position:relative}.el-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xl-21.is-guttered{display:block}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{left:87.5%;position:relative}.el-col-xl-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{left:91.6666666667%;position:relative}.el-col-xl-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{left:95.8333333333%;position:relative}.el-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xl-24.is-guttered{display:block}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{left:100%;position:relative}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{flex:auto;text-align:left}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{border-radius:4px;cursor:pointer;height:20px;margin:0 0 8px 8px;width:20px}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{border-radius:3px;display:flex;height:100%}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{background-color:red;box-sizing:border-box;float:right;height:12px;padding:0 2px;position:relative;width:280px}.el-color-hue-slider__bar{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-hue-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-hue-slider.is-vertical{height:180px;padding:2px 0;width:12px}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-svpanel{height:180px;position:relative;width:280px}.el-color-svpanel__black,.el-color-svpanel__white{bottom:0;left:0;position:absolute;right:0;top:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,#fff0)}.el-color-svpanel__black{background:linear-gradient(0deg,#000,#0000)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;cursor:head;height:4px;transform:translate(-2px,-2px);width:4px}.el-color-alpha-slider{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;box-sizing:border-box;height:12px;position:relative;width:280px}.el-color-alpha-slider__bar{background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-alpha-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-alpha-slider.is-vertical{height:180px;width:20px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,#fff0 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{clear:both;content:"";display:table}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{color:#000;float:left;font-size:12px;line-height:26px;width:160px}.el-color-picker{display:inline-block;height:32px;line-height:normal;outline:none;position:relative;width:32px}.el-color-picker:hover:not(.is-disabled,.is-focused) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled .el-color-picker__trigger{background-color:var(--el-fill-color-light);cursor:not-allowed}.el-color-picker.is-disabled .el-color-picker__color{opacity:.3}.el-color-picker--large{height:40px;width:40px}.el-color-picker--small{height:24px;width:24px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__trigger{align-items:center;border:1px solid var(--el-border-color);border-radius:4px;cursor:pointer;display:inline-flex;font-size:0;justify-content:center;padding:4px}.el-color-picker__color,.el-color-picker__trigger{box-sizing:border-box;height:100%;position:relative;width:100%}.el-color-picker__color{border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);display:block;text-align:center}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{align-items:center;display:inline-flex;height:100%;justify-content:center;width:100%}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{align-items:center;color:#fff;display:inline-flex;font-size:12px;justify-content:center}.el-color-picker__panel{background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);box-sizing:content-box;padding:6px;position:absolute;z-index:10}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:var(--el-text-color-primary);display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper,.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-empty-padding);text-align:center}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;vertical-align:top;width:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:100%;vertical-align:top;width:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translate(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translate(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-input-tag{--el-input-tag-border-color-hover:var(--el-border-color-hover);--el-input-tag-placeholder-color:var(--el-text-color-placeholder);--el-input-tag-disabled-color:var(--el-disabled-text-color);--el-input-tag-disabled-border:var(--el-disabled-border-color);--el-input-tag-font-size:var(--el-font-size-base);--el-input-tag-close-hover-color:var(--el-text-color-secondary);--el-input-tag-text-color:var(--el-text-color-regular);--el-input-tag-input-focus-border-color:var(--el-color-primary);--el-input-tag-width:100%;--el-input-tag-mini-height:var(--el-component-size);--el-input-tag-gap:6px;--el-input-tag-padding:4px;--el-input-tag-inner-padding:8px;--el-input-tag-line-height:24px;align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:var(--el-input-tag-font-size);line-height:var(--el-input-tag-line-height);min-height:var(--el-input-tag-mini-height);padding:var(--el-input-tag-padding);transform:translateZ(0);transition:var(--el-transition-duration);width:var(--el-input-tag-width)}.el-input-tag.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-tag.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-input-tag.is-disabled{background-color:var(--el-fill-color-light);cursor:not-allowed}.el-input-tag.is-disabled,.el-input-tag.is-disabled:hover{box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input-tag.is-disabled .el-input-tag__inner .el-input-tag__input,.el-input-tag.is-disabled .el-input-tag__inner .el-tag{cursor:not-allowed}.el-input-tag__prefix,.el-input-tag__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;padding:0 var(--el-input-tag-inner-padding)}.el-input-tag__suffix{gap:8px}.el-input-tag__inner{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:var(--el-input-tag-gap);max-width:100%;min-width:0;position:relative}.el-input-tag__inner.is-left-space{margin-left:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-right-space{margin-right:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-draggable .el-tag{cursor:move;-webkit-user-select:none;user-select:none}.el-input-tag__drop-indicator{background-color:var(--el-color-primary);height:var(--el-input-tag-line-height);position:absolute;top:0;width:1px}.el-input-tag__inner .el-tag{border-color:transparent;cursor:pointer;max-width:100%}.el-input-tag__inner .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__inner .el-tag .el-tag__content{line-height:normal;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-input-tag__input-wrapper{flex:1}.el-input-tag__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-input-tag-text-color);font-family:inherit;font-size:inherit;line-height:inherit;outline:none;padding:0;width:100%}.el-input-tag__input::placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-input-tag--large{--el-input-tag-gap:6px;--el-input-tag-padding:8px;--el-input-tag-padding-left:8px;--el-input-tag-font-size:14px}.el-input-tag--small{--el-input-tag-gap:4px;--el-input-tag-padding:2px;--el-input-tag-padding-left:6px;--el-input-tag-font-size:12px;--el-input-tag-line-height:20px;--el-input-tag-mini-height:var(--el-component-size-small)}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);align-items:center;color:var(--el-link-text-color);cursor:pointer;display:inline-flex;flex-direction:row;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);justify-content:center;outline:none;padding:0;position:relative;text-decoration:none;vertical-align:middle}.el-link.is-hover-underline:hover:after{border-bottom:1px solid var(--el-link-hover-text-color);bottom:0;content:"";height:0;left:0;position:absolute;right:0}.el-link.is-underline:after{border-bottom:1px solid var(--el-link-text-color);bottom:0;content:"";height:0;left:0;position:absolute;right:0}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link:hover:after{border-color:var(--el-link-hover-text-color)}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link__inner{align-items:center;display:inline-flex;justify-content:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link.is-disabled:after{border-color:var(--el-link-disabled-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-active-color,var(--el-menu-hover-text-color));outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.el-overlay.is-message-box .el-overlay-message-box{bottom:0;left:0;overflow:auto;padding:16px;position:fixed;right:0;text-align:center;top:0}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0;min-width:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;left:50%;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;top:20px;transform:translate(-50%);transition:opacity var(--el-transition-duration),transform .4s,top .4s;width:fit-content}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);background-color:var(--el-bg-color-overlay);border:1px solid var(--el-notification-border-color);border-radius:var(--el-notification-radius);box-shadow:var(--el-notification-shadow);box-sizing:border-box;display:flex;overflow:hidden;overflow-wrap:break-word;padding:var(--el-notification-padding);position:fixed;transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);width:var(--el-notification-width);z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{flex:1;margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right);min-width:0}.el-notification__title{color:var(--el-notification-title-color);font-size:var(--el-notification-title-font-size);font-weight:700;line-height:var(--el-notification-icon-size);margin:0}.el-notification__content{color:var(--el-notification-content-color);font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0}.el-notification__content p{margin:0}.el-notification .el-notification__icon{flex-shrink:0;font-size:var(--el-notification-icon-size);height:var(--el-notification-icon-size);width:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{color:var(--el-notification-close-color);cursor:pointer;font-size:var(--el-notification-close-font-size);position:absolute;right:15px;top:18px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--primary{--el-notification-icon-color:var(--el-color-primary);color:var(--el-notification-icon-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{align-items:center;display:flex;justify-content:space-between;line-height:24px}.el-page-header__left{align-items:center;display:flex;margin-right:40px;position:relative}.el-page-header__back{align-items:center;cursor:pointer;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;display:flex;font-size:16px;margin-right:10px}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{margin-top:8px;text-align:right}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button,.el-radio-button__inner{display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;padding:8px 15px;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);align-items:center;display:inline-flex;height:32px}.el-rate:active,.el-rate:focus{outline:none}.el-rate__item{color:var(--el-rate-void-color);cursor:pointer;display:inline-block;font-size:0;line-height:normal;position:relative;vertical-align:middle}.el-rate .el-rate__icon{display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);position:relative;transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{left:0;position:absolute;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;overflow:hidden}.el-rate__decimal,.el-rate__decimal--box{left:0;position:absolute;top:0}.el-rate__text{color:var(--el-rate-text-color);font-size:var(--el-rate-font-size);vertical-align:middle}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{color:var(--el-rate-disabled-void-color);cursor:auto}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-result-padding);text-align:center}.el-result__icon svg{height:var(--el-result-icon-font-size);width:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{color:var(--el-text-color-primary);font-size:var(--el-result-title-font-size);line-height:1.3;margin:0}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1.3;margin:0}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;display:flex;flex-wrap:wrap;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);display:inline-block;height:16px;width:100%}.el-skeleton__circle{border-radius:50%;height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);width:var(--el-skeleton-circle-size)}.el-skeleton__button{border-radius:4px;height:40px;width:64px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{height:var(--el-font-size-small);width:100%}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{align-items:center;border-radius:0;display:flex;justify-content:center;width:unset}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:22%;width:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{animation:el-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1);cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translate(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translate(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;height:50px;width:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(1turn)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-grow:0;flex-shrink:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{border-color:var(--el-text-color-primary);color:var(--el-text-color-primary)}.el-step__head.is-wait{border-color:var(--el-text-color-placeholder);color:var(--el-text-color-placeholder)}.el-step__head.is-success{border-color:var(--el-color-success);color:var(--el-color-success)}.el-step__head.is-error{border-color:var(--el-color-danger);color:var(--el-color-danger)}.el-step__head.is-finish{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-step__icon{align-items:center;background:var(--el-bg-color);box-sizing:border-box;display:inline-flex;font-size:14px;height:24px;justify-content:center;position:relative;transition:.15s ease-out;width:24px;z-index:1}.el-step__icon.is-text{border:2px solid;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{color:inherit;display:inline-block;font-weight:700;line-height:1;text-align:center;-webkit-user-select:none;user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:currentColor;position:absolute}.el-step__line-inner{border:1px solid;box-sizing:border-box;display:block;height:0;transition:.15s ease-out;width:0}.el-step__main{text-align:left;white-space:normal}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{font-size:12px;font-weight:400;line-height:20px;margin-top:-5px;padding-right:10%}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;left:0;right:0;top:11px}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{bottom:0;left:11px;top:0;width:2px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{font-size:0;padding-right:10px;width:auto}.el-step.is-simple .el-step__icon{background:transparent;font-size:12px;height:16px;width:16px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{align-items:stretch;display:flex;flex-grow:1;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;overflow-wrap:break-word}.el-step.is-simple .el-step__arrow{align-items:center;display:flex;flex-grow:1;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{background:var(--el-text-color-placeholder);content:"";display:inline-block;height:15px;position:absolute;width:1px}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;padding:0 10px}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:20px;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;cursor:pointer;display:inline-flex;flex-direction:column;height:14px;overflow:initial;position:relative;vertical-align:middle;width:24px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{cursor:pointer;display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;height:12px;line-height:12px;margin-right:8px;text-align:center;width:12px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);font-size:var(--el-font-size-base)}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);box-shadow:2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);box-shadow:-2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;overflow:hidden;position:absolute;right:0;top:0}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{overflow:hidden;position:relative}.el-table-v2__header .el-checkbox{z-index:0}.el-table-v2__footer{bottom:0;overflow:hidden;right:0}.el-table-v2__empty,.el-table-v2__footer,.el-table-v2__overlay{left:0;position:absolute}.el-table-v2__overlay{bottom:0;right:0;top:0;z-index:9999}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{align-items:center;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);display:flex;font-weight:700;height:100%;overflow:hidden;padding:0 8px;-webkit-user-select:none;user-select:none}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{display:none;opacity:.6;transition:opacity,display var(--el-transition-duration)}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{align-items:center;border-bottom:var(--el-table-border);display:flex;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{cursor:pointer;margin:0 4px;-webkit-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--bottom .el-tabs__nav,.el-tabs--top .el-tabs__nav{height:var(--el-tabs-header-height)}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{margin:0;max-height:200px}.time-select-item{font-size:14px;line-height:20px;padding:8px 10px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{padding-left:28px;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;left:4px;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{align-items:center;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;position:absolute}.el-timeline-item__node--normal{height:var(--el-timeline-node-size-normal);left:-1px;width:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{height:var(--el-timeline-node-size-large);left:-2px;width:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{align-items:center;display:flex;justify-content:center;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);font-size:var(--el-font-size-small);line-height:1}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);list-style:none;margin:0}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);background-color:var(--el-color-white);border:1px solid var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);padding:var(--el-tooltip-v2-padding)}.el-tooltip-v2__arrow{color:var(--el-color-white);height:var(--el-tooltip-v2-arrow-height);left:var(--el-tooltip-v2-arrow-x);pointer-events:none;position:absolute;top:var(--el-tooltip-v2-arrow-y);width:var(--el-tooltip-v2-arrow-width)}.el-tooltip-v2__arrow:after,.el-tooltip-v2__arrow:before{border:var(--el-tooltip-v2-arrow-border-width) solid transparent;content:"";height:0;position:absolute;width:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-bottom:0;border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-bottom:0;border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-left:0;border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-left:0;border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;color:var(--el-color-white)}.el-tooltip-v2__content.is-dark,.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;padding:0 30px;vertical-align:middle}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);box-sizing:border-box;display:inline-block;max-height:100%;overflow:hidden;position:relative;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width)}.el-transfer-panel__body{border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);height:var(--el-transfer-panel-body-height);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{box-sizing:border-box;height:var(--el-transfer-panel-body-height);list-style:none;margin:0;overflow:auto;padding:6px 0}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{display:block!important;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{box-sizing:border-box;display:block;line-height:var(--el-transfer-item-height);overflow:hidden;padding-left:22px;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{box-sizing:border-box;padding:15px;text-align:center}.el-transfer-panel__filter .el-input__inner{box-sizing:border-box;display:inline-block;font-size:12px;height:var(--el-transfer-filter-height);width:100%}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{align-items:center;background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);display:flex;height:var(--el-transfer-panel-header-height);margin:0;padding-left:15px}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;display:flex;position:relative;width:100%}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{color:var(--el-text-color-primary);font-size:16px;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{color:var(--el-text-color-secondary);font-size:12px;font-weight:400;position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0)}.el-transfer-panel .el-transfer-panel__footer{background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);height:var(--el-transfer-panel-footer-height);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{color:var(--el-text-color-secondary);height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);margin:0;padding:6px 15px 0;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{border-radius:3px;height:14px;width:14px}.el-transfer-panel .el-checkbox__inner:after{height:6px;left:4px;width:3px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__list>.el-select-dropdown__item{padding-left:32px}.el-tree-select__popper .el-select-dropdown__item{background:transparent!important;flex:1;height:20px;line-height:20px;padding-left:0}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{--el-upload-picture-card-size:148px;align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px)}.el-upload-list{list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper.always-on .el-virtual-scrollbar,.el-vl__wrapper:hover .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{color:var(--el-statistic-title-color);font-size:var(--el-statistic-title-font-size);font-weight:var(--el-statistic-title-font-weight);line-height:20px;margin-bottom:4px}.el-statistic__content{color:var(--el-statistic-content-color);font-size:var(--el-statistic-content-font-size);font-weight:var(--el-statistic-content-font-weight)}.el-statistic__value{display:inline-block}.el-statistic__prefix{display:inline-block;margin-right:4px}.el-statistic__suffix{display:inline-block;margin-left:4px}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);box-shadow:var(--el-box-shadow-light);outline:none;overflow-wrap:break-word;padding:var(--el-tour-padding-primary);width:var(--el-tour-width)}.el-tour__arrow,.el-tour__content{background:var(--el-tour-bg-color);box-sizing:border-box}.el-tour__arrow{height:10px;pointer-events:none;position:absolute;transform:rotate(45deg);width:10px}.el-tour__content[data-side^=top] .el-tour__arrow{border-left-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:transparent;border-right-color:transparent}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:transparent;border-left-color:transparent}.el-tour__content[data-side^=right] .el-tour__arrow{border-right-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size, 16px))}.el-tour__title{color:var(--el-tour-title-text-color);font-size:var(--el-tour-title-font-size);font-weight:var(--el-tour-title-font-weight);line-height:var(--el-tour-font-line-height)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{box-sizing:border-box;display:flex;justify-content:space-between;padding-top:var(--el-tour-padding-primary)}.el-tour__content .el-tour-indicators{display:inline-block;flex:1}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;display:inline-block;height:6px;margin-right:6px;width:6px}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{background:#fff;border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);border-radius:4px;opacity:0;position:absolute;z-index:0}.el-anchor.el-anchor--vertical .el-anchor__marker{height:14px;left:0;top:8px;transition:top .25s ease-in-out,opacity .25s;width:4px}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{background-color:#0505050f;content:"";height:100%;left:0;position:absolute;width:2px}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{bottom:0;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;width:20px}.el-anchor.el-anchor--horizontal .el-anchor__list{display:flex;padding-bottom:4px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{background-color:#0505050f;bottom:0;content:"";height:2px;position:absolute;width:100%}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{display:flex;flex-direction:column;overflow:hidden}.el-anchor__link{cursor:pointer;font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);max-width:100%;outline:none;overflow:hidden;padding:4px 0;text-decoration:none;text-overflow:ellipsis;transition:color var(--el-transition-duration);white-space:nowrap}.el-anchor__link,.el-anchor__link:focus,.el-anchor__link:hover{color:var(--el-anchor-color)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block}.el-segmented--vertical{flex-direction:column}.el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented{--el-segmented-color:var(--el-text-color-regular);--el-segmented-bg-color:var(--el-fill-color-light);--el-segmented-padding:2px;--el-segmented-item-selected-color:var(--el-color-white);--el-segmented-item-selected-bg-color:var(--el-color-primary);--el-segmented-item-selected-disabled-bg-color:var(--el-color-primary-light-5);--el-segmented-item-hover-color:var(--el-text-color-primary);--el-segmented-item-hover-bg-color:var(--el-fill-color-dark);--el-segmented-item-active-bg-color:var(--el-fill-color-darker);--el-segmented-item-disabled-color:var(--el-text-color-placeholder);align-items:stretch;background:var(--el-segmented-bg-color);border-radius:var(--el-border-radius-base);box-sizing:border-box;color:var(--el-segmented-color);display:inline-flex;font-size:14px;min-height:32px;padding:var(--el-segmented-padding)}.el-segmented__group{align-items:stretch;display:flex;position:relative;width:100%}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);height:100%;left:0;pointer-events:none;position:absolute;top:0;transition:all .3s;width:10px}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{border-radius:inherit;content:"";top:0;right:0;bottom:0;left:0;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute}.el-segmented__item{align-items:center;border-radius:calc(var(--el-border-radius-base) - 2px);cursor:pointer;display:flex;flex:1;padding:0 11px}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{background:var(--el-segmented-item-hover-bg-color);color:var(--el-segmented-item-hover-color)}.el-segmented__item:not(.is-disabled):not(.is-selected):active{background:var(--el-segmented-item-active-bg-color)}.el-segmented__item.is-selected,.el-segmented__item.is-selected.is-disabled{color:var(--el-segmented-item-selected-color)}.el-segmented__item.is-disabled{color:var(--el-segmented-item-disabled-color);cursor:not-allowed}.el-segmented__item-input{height:0;margin:0;opacity:0;pointer-events:none;position:absolute;width:0}.el-segmented__item-label{flex:1;line-height:normal;overflow:hidden;text-align:center;text-overflow:ellipsis;transition:color .3s;white-space:nowrap;z-index:1}.el-segmented.is-block{display:flex}.el-segmented.is-block .el-segmented__item{min-width:0}.el-segmented--large{border-radius:var(--el-border-radius-base);font-size:16px;min-height:40px}.el-segmented--large .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 2px)}.el-segmented--large .el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented--large .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 2px);padding:0 11px}.el-segmented--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:14px;min-height:24px}.el-segmented--small .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 3px)}.el-segmented--small .el-segmented--vertical .el-segmented__item{padding:7px}.el-segmented--small .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 3px);padding:0 7px}.el-mention{position:relative;width:100%}.el-mention__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-mention__popper.el-popper,.el-mention__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-mention__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-mention-dropdown{--el-mention-font-size:var(--el-font-size-base);--el-mention-bg-color:var(--el-bg-color-overlay);--el-mention-shadow:var(--el-box-shadow-light);--el-mention-border:1px solid var(--el-border-color-light);--el-mention-option-color:var(--el-text-color-regular);--el-mention-option-height:34px;--el-mention-option-min-width:100px;--el-mention-option-hover-background:var(--el-fill-color-light);--el-mention-option-selected-color:var(--el-color-primary);--el-mention-option-disabled-color:var(--el-text-color-placeholder);--el-mention-option-loading-color:var(--el-text-color-secondary);--el-mention-option-loading-padding:10px 0;--el-mention-max-height:174px;--el-mention-padding:6px 0;--el-mention-header-padding:10px;--el-mention-footer-padding:10px}.el-mention-dropdown__item{box-sizing:border-box;color:var(--el-mention-option-color);cursor:pointer;font-size:var(--el-mention-font-size);height:var(--el-mention-option-height);line-height:var(--el-mention-option-height);min-width:var(--el-mention-option-min-width);overflow:hidden;padding:0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-mention-dropdown__item.is-hovering{background-color:var(--el-mention-option-hover-background)}.el-mention-dropdown__item.is-selected{color:var(--el-mention-option-selected-color);font-weight:700}.el-mention-dropdown__item.is-disabled{background-color:unset;color:var(--el-mention-option-disabled-color);cursor:not-allowed}.el-mention-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-mention-dropdown__loading{color:var(--el-mention-option-loading-color);font-size:12px;margin:0;min-width:var(--el-mention-option-min-width);padding:10px 0;text-align:center}.el-mention-dropdown__wrap{max-height:var(--el-mention-max-height)}.el-mention-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:var(--el-mention-padding)}.el-mention-dropdown__header{border-bottom:var(--el-mention-border);padding:var(--el-mention-header-padding)}.el-mention-dropdown__footer{border-top:var(--el-mention-border);padding:var(--el-mention-footer-padding)}.el-splitter{display:flex;height:100%;margin:0;padding:0;position:relative;width:100%}.el-splitter__mask{top:0;right:0;bottom:0;left:0;position:absolute;z-index:999}.el-splitter__mask-horizontal{cursor:col-resize}.el-splitter__mask-vertical{cursor:row-resize}.el-splitter__horizontal{flex-direction:row}.el-splitter__vertical{flex-direction:column}.el-splitter-bar{flex:none;position:relative;-webkit-user-select:none;user-select:none}.el-splitter-bar__disable{cursor:auto!important}.el-splitter-bar__disable:before{background-color:var(--el-border-color-light)!important}.el-splitter-bar__dragger{background:transparent;z-index:1}.el-splitter-bar__dragger,.el-splitter-bar__dragger:before{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:before{background-color:var(--el-border-color-light);content:""}.el-splitter-bar__dragger:hover:before{background-color:var(--el-color-primary-light-5)}.el-splitter-bar__dragger-horizontal:before{height:100%;width:2px}.el-splitter-bar__dragger-vertical:before{height:2px;width:100%}.el-splitter-bar__dragger-active:before{background-color:var(--el-color-primary-light-3)}.el-splitter-bar:hover .el-splitter-bar__collapse-icon{opacity:1}.el-splitter-bar__collapse-icon{align-items:center;background:var(--el-border-color-light);border-radius:2px;cursor:pointer;display:flex;justify-content:center;opacity:0;position:absolute;z-index:9}.el-splitter-bar__collapse-icon:hover{background-color:var(--el-color-primary-light-5);opacity:1}.el-splitter-bar__horizontal-collapse-icon-start{height:24px;left:-12px;top:50%;transform:translate(-50%,-50%);width:16px}.el-splitter-bar__horizontal-collapse-icon-end{height:24px;left:12px;top:50%;transform:translate(-50%,-50%);width:16px}.el-splitter-bar__vertical-collapse-icon-start{height:16px;right:50%;top:-12px;transform:translate(50%,-50%);width:24px}.el-splitter-bar__vertical-collapse-icon-end{height:16px;right:50%;top:12px;transform:translate(50%,-50%);width:24px}.el-splitter-panel{box-sizing:border-box;flex-grow:0;overflow:auto;scrollbar-width:thin}html.dark{color-scheme:dark;--el-color-primary:#409eff;--el-color-primary-light-3:rgb(51,117,185);--el-color-primary-light-5:rgb(42,89,138);--el-color-primary-light-7:rgb(33,61,91);--el-color-primary-light-8:rgb(29,48,67);--el-color-primary-light-9:rgb(24,34,43);--el-color-primary-dark-2:rgb(102,177,255);--el-color-success:#67c23a;--el-color-success-light-3:rgb(78,142,47);--el-color-success-light-5:rgb(62,107,39);--el-color-success-light-7:rgb(45,72,31);--el-color-success-light-8:rgb(37,55,28);--el-color-success-light-9:rgb(28,37,24);--el-color-success-dark-2:rgb(133,206,97);--el-color-warning:#e6a23c;--el-color-warning-light-3:rgb(167,119,48);--el-color-warning-light-5:rgb(125,91,40);--el-color-warning-light-7:rgb(83,63,32);--el-color-warning-light-8:rgb(62,48,28);--el-color-warning-light-9:rgb(41,34,24);--el-color-warning-dark-2:rgb(235,181,99);--el-color-danger:#f56c6c;--el-color-danger-light-3:rgb(178,82,82);--el-color-danger-light-5:rgb(133,64,64);--el-color-danger-light-7:rgb(88,46,46);--el-color-danger-light-8:rgb(65,38,38);--el-color-danger-light-9:rgb(42,29,29);--el-color-danger-dark-2:rgb(247,137,137);--el-color-error:#f56c6c;--el-color-error-light-3:rgb(178,82,82);--el-color-error-light-5:rgb(133,64,64);--el-color-error-light-7:rgb(88,46,46);--el-color-error-light-8:rgb(65,38,38);--el-color-error-light-9:rgb(42,29,29);--el-color-error-dark-2:rgb(247,137,137);--el-color-info:#909399;--el-color-info-light-3:rgb(107,109,113);--el-color-info-light-5:rgb(82,84,87);--el-color-info-light-7:rgb(57,58,60);--el-color-info-light-8:rgb(45,45,47);--el-color-info-light-9:rgb(32,33,33);--el-color-info-dark-2:rgb(166,169,173);--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.36),0px 8px 20px rgba(0,0,0,.72);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.72);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.72);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.72),0px 12px 32px #000000,0px 8px 16px -8px #000000;--el-bg-color-page:#0a0a0a;--el-bg-color:#141414;--el-bg-color-overlay:#1d1e1f;--el-text-color-primary:#E5EAF3;--el-text-color-regular:#CFD3DC;--el-text-color-secondary:#A3A6AD;--el-text-color-placeholder:#8D9095;--el-text-color-disabled:#6C6E72;--el-border-color-darker:#636466;--el-border-color-dark:#58585B;--el-border-color:#4C4D4F;--el-border-color-light:#414243;--el-border-color-lighter:#363637;--el-border-color-extra-light:#2B2B2C;--el-fill-color-darker:#424243;--el-fill-color-dark:#39393A;--el-fill-color:#303030;--el-fill-color-light:#262727;--el-fill-color-lighter:#1D1D1D;--el-fill-color-extra-light:#191919;--el-fill-color-blank:transparent;--el-mask-color:rgba(0,0,0,.8);--el-mask-color-extra-light:rgba(0,0,0,.3)}html.dark .el-button{--el-button-disabled-text-color:rgba(255,255,255,.5)}html.dark .el-card{--el-card-bg-color:var(--el-bg-color-overlay)}html.dark .el-empty{--el-empty-fill-color-0:var(--el-color-black);--el-empty-fill-color-1:#4b4b52;--el-empty-fill-color-2:#36383d;--el-empty-fill-color-3:#1e1e20;--el-empty-fill-color-4:#262629;--el-empty-fill-color-5:#202124;--el-empty-fill-color-6:#212224;--el-empty-fill-color-7:#1b1c1f;--el-empty-fill-color-8:#1c1d1f;--el-empty-fill-color-9:#18181a}:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645,.045,.355,1);--el-transition-function-fast-bezier:cubic-bezier(.23,1,.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:rgb(121,187,255);--el-color-primary-light-5:rgb(160,207,255);--el-color-primary-light-7:rgb(198,226,255);--el-color-primary-light-8:rgb(217,236,255);--el-color-primary-light-9:rgb(236,245,255);--el-color-primary-dark-2:rgb(51,126,204);--el-color-success:#67c23a;--el-color-success-light-3:rgb(149,212,117);--el-color-success-light-5:rgb(179,225,157);--el-color-success-light-7:rgb(209,237,196);--el-color-success-light-8:rgb(225,243,216);--el-color-success-light-9:rgb(240,249,235);--el-color-success-dark-2:rgb(82,155,46);--el-color-warning:#e6a23c;--el-color-warning-light-3:rgb(238,190,119);--el-color-warning-light-5:rgb(243,209,158);--el-color-warning-light-7:rgb(248,227,197);--el-color-warning-light-8:rgb(250,236,216);--el-color-warning-light-9:rgb(253,246,236);--el-color-warning-dark-2:rgb(184,130,48);--el-color-danger:#f56c6c;--el-color-danger-light-3:rgb(248,152,152);--el-color-danger-light-5:rgb(250,182,182);--el-color-danger-light-7:rgb(252,211,211);--el-color-danger-light-8:rgb(253,226,226);--el-color-danger-light-9:rgb(254,240,240);--el-color-danger-dark-2:rgb(196,86,86);--el-color-error:#f56c6c;--el-color-error-light-3:rgb(248,152,152);--el-color-error-light-5:rgb(250,182,182);--el-color-error-light-7:rgb(252,211,211);--el-color-error-light-8:rgb(253,226,226);--el-color-error-light-9:rgb(254,240,240);--el-color-error-dark-2:rgb(196,86,86);--el-color-info:#909399;--el-color-info-light-3:rgb(177,179,184);--el-color-info-light-5:rgb(200,201,204);--el-color-info-light-7:rgb(222,223,224);--el-color-info-light-8:rgb(233,233,235);--el-color-info-light-9:rgb(244,244,245);--el-color-info-dark-2:rgb(115,118,122);--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.04),0px 8px 20px rgba(0,0,0,.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.08),0px 12px 32px rgba(0,0,0,.12),0px 8px 16px -8px rgba(0,0,0,.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,.8);--el-overlay-color-light:rgba(0,0,0,.7);--el-overlay-color-lighter:rgba(0,0,0,.5);--el-mask-color:rgba(255,255,255,.9);--el-mask-color-extra-light:rgba(255,255,255,.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-date-table{font-size:12px;-webkit-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;cursor:pointer;height:30px;padding:4px 0;position:relative;text-align:center;width:32px}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;display:block;height:24px;left:50%;line-height:24px;margin:0 auto;position:absolute;transform:translate(-50%);width:24px}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:1}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);border-radius:15px;color:#fff}.el-date-table td.week{color:var(--el-datepicker-off-text-color);cursor:default;font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-datepicker-header-text-color);font-weight:400;padding:5px}.el-date-table th.el-date-table__week-header{padding:0;width:24px}.el-month-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-month-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-month-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .el-date-table-cell__text,.el-month-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-month-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-month-table td .el-date-table-cell__text{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:54px}.el-month-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date .el-date-table-cell,.el-month-table td.start-date .el-date-table-cell{color:#fff}.el-month-table td.end-date .el-date-table-cell__text,.el-month-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td.start-date .el-date-table-cell{border-bottom-left-radius:24px;border-top-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-bottom-right-radius:24px;border-top-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-year-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-year-table td.today.end-date .el-date-table-cell__text,.el-year-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-year-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-year-table td .el-date-table-cell__text{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:60px}.el-year-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-year-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-year-table td.end-date .el-date-table-cell,.el-year-table td.start-date .el-date-table-cell{color:#fff}.el-year-table td.end-date .el-date-table-cell__text,.el-year-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-year-table td.start-date .el-date-table-cell{border-bottom-left-radius:24px;border-top-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-bottom-right-radius:24px;border-top-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{display:inline-block;max-height:192px;overflow:auto;position:relative;vertical-align:top;width:50%}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;overflow:hidden;text-align:center}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;height:30px;left:0;line-height:30px;position:absolute;text-align:center;width:100%;z-index:var(--el-index-normal)}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{list-style:none;margin:0}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;height:80px;width:100%}.el-time-spinner__item{color:var(--el-text-color-regular);font-size:12px;height:32px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper,.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;position:relative;text-align:left;vertical-align:middle}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{height:var(--el-input-height,var(--el-component-size));width:var(--el-date-editor-width)}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .clear-icon,.el-date-editor .close-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__icon{color:var(--el-text-color-placeholder);float:left;font-size:14px;height:inherit}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-text-color-regular);display:inline-block;font-size:var(--el-font-size-base);height:30px;line-height:30px;margin:0;outline:none;padding:0;text-align:center;width:39%}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{align-items:center;color:var(--el-text-color-primary);display:inline-flex;flex:1;font-size:14px;height:100%;justify-content:center;margin:0;overflow-wrap:break-word;padding:0 5px}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);cursor:pointer;font-size:14px;height:inherit;width:unset}.el-date-editor .el-range__close-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{align-items:center;display:inline-flex;padding:0 10px;vertical-align:middle}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{font-size:14px;height:38px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{font-size:12px;height:22px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled,.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{background:var(--el-bg-color-overlay);border-radius:var(--el-popper-border-radius,var(--el-border-radius-base));color:var(--el-text-color-regular);line-height:30px}.el-picker-panel .el-time-panel{background-color:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{clear:both;content:"";display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{background-color:var(--el-bg-color-overlay);border-top:1px solid var(--el-datepicker-inner-border-color);font-size:0;padding:4px 12px;position:relative;text-align:right}.el-picker-panel__shortcut{background-color:transparent;border:0;color:var(--el-datepicker-text-color);cursor:pointer;display:block;font-size:14px;line-height:28px;outline:none;padding-left:12px;text-align:left;width:100%}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{background-color:transparent;border:1px solid var(--el-fill-color-darker);border-radius:2px;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:24px;outline:none;padding:0 20px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{background:transparent;border:0;color:var(--el-datepicker-icon-color);cursor:pointer;font-size:12px;margin-top:8px;outline:none}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);bottom:0;box-sizing:border-box;overflow:auto;padding-top:6px;position:absolute;top:0;width:110px}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-picker__header{padding:12px 12px 0;text-align:center}.el-date-picker__header--bordered{border-bottom:1px solid var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{color:var(--el-text-color-regular);cursor:pointer;font-size:16px;font-weight:500;line-height:22px;padding:0 5px;text-align:center}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{cursor:pointer;float:left;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{height:28px;position:relative;text-align:center}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__header-label{color:var(--el-text-color-regular);cursor:pointer;font-size:16px;font-weight:500;line-height:22px;padding:0 5px;text-align:center}.el-date-range-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-range-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-range-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-range-picker__content{box-sizing:border-box;float:left;margin:0;padding:16px;width:50%}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-range-picker__time-header>.el-icon-arrow-right{color:var(--el-datepicker-icon-color);display:table-cell;font-size:20px;vertical-align:middle}.el-date-range-picker__time-picker-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{background:#fff;position:absolute;right:0;top:13px;z-index:1}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{overflow:visible;width:354px}.el-time-range-picker__content{padding:10px;position:relative;text-align:center;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;display:inline-block;margin:0;padding:4px 7px 7px;width:50%}.el-time-range-picker__header{font-size:14px;margin-bottom:5px;text-align:center}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{border-radius:2px;box-sizing:content-box;left:0;position:relative;-webkit-user-select:none;user-select:none;width:180px;z-index:var(--el-index-top)}.el-time-panel__content{font-size:0;overflow:hidden;position:relative}.el-time-panel__content:after,.el-time-panel__content:before{box-sizing:border-box;content:"";height:32px;left:0;margin-top:-16px;padding-top:6px;position:absolute;right:0;text-align:left;top:50%;z-index:-1}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{border-bottom:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));box-sizing:border-box;height:36px;line-height:25px;padding:4px;text-align:right}.el-time-panel__btn{background-color:transparent;border:none;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:28px;margin:0 5px;outline:none;padding:0 5px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;font-size:var(--el-font-size-base);position:relative;vertical-align:bottom;width:100%}.el-textarea__inner{-webkit-appearance:none;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;font-family:inherit;font-size:inherit;line-height:1.5;padding:5px 11px;position:relative;resize:vertical;transition:var(--el-transition-box-shadow);width:100%}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea .el-input__count{background:var(--el-fill-color-blank);bottom:5px;color:var(--el-color-info);font-size:12px;line-height:14px;position:absolute;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);box-sizing:border-box;display:inline-flex;font-size:var(--el-font-size-base);line-height:var(--el-input-height);position:relative;vertical-align:middle;width:var(--el-input-width)}.el-input::-webkit-scrollbar{width:6px;z-index:11}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{align-items:center;color:var(--el-color-info);display:inline-flex;font-size:12px;height:100%}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);display:inline-block;line-height:normal;padding-left:8px}.el-input__wrapper{align-items:center;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;cursor:text;display:inline-flex;flex-grow:1;justify-content:center;padding:1px 11px;transform:translateZ(0);transition:var(--el-transition-box-shadow)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px)}.el-input__inner{-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.el-input__inner:focus{outline:none}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__prefix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__suffix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{align-items:center;display:flex;height:inherit;justify-content:center;line-height:inherit;margin-left:8px;transition:all var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;cursor:not-allowed}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{align-items:stretch;display:inline-flex;width:100%}.el-input-group__append,.el-input-group__prepend{align-items:center;background-color:var(--el-fill-color-light);border-radius:var(--el-input-border-radius);color:var(--el-color-info);display:inline-flex;justify-content:center;min-height:100%;padding:0 20px;position:relative;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{background-color:transparent;border-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper,.el-input-group__append{border-bottom-left-radius:0;border-top-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-bottom-right-radius:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-bottom-right-radius:0;border-top-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;word-break:break-all;z-index:2000}.el-popper.is-dark{color:var(--el-bg-color)}.el-popper.is-dark,.el-popper.is-dark>.el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{right:0}.el-popper.is-light,.el-popper.is-light>.el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{right:0}.el-popper.is-pure{padding:0}.el-popper__arrow,.el-popper__arrow:before{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255,255,255,.5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);align-items:center;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);box-sizing:border-box;color:var(--el-button-text-color);cursor:pointer;display:inline-flex;font-weight:var(--el-button-font-weight);height:32px;justify-content:center;line-height:1;outline:none;text-align:center;transition:.1s;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-button:hover{background-color:var(--el-button-hover-bg-color);border-color:var(--el-button-hover-border-color);color:var(--el-button-hover-text-color);outline:none}.el-button:active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base)}.el-button,.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{background-color:var(--el-button-disabled-bg-color);background-image:none;border-color:var(--el-button-disabled-border-color);color:var(--el-button-disabled-text-color);cursor:not-allowed}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{background-color:var(--el-mask-color-extra-light);border-radius:inherit;bottom:-1px;content:"";left:-1px;pointer-events:none;position:absolute;right:-1px;top:-1px;z-index:1}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px;width:32px}.el-button.is-text{background-color:transparent;border:0 solid transparent;color:var(--el-button-text-color)}.el-button.is-text.is-disabled{background-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{background:transparent;border-color:transparent;color:var(--el-button-text-color);height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-link:not(.is-disabled):active,.el-button.is-link:not(.is-disabled):hover{background-color:transparent;border-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color)}.el-button--text{background:transparent;border-color:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button--text:not(.is-disabled):hover{background-color:transparent;border-color:transparent;color:var(--el-color-primary-light-3)}.el-button--text:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-color-primary-dark-2)}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8);color:var(--el-color-primary-light-5)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8);color:var(--el-color-success-light-5)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8);color:var(--el-color-warning-light-5)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8);color:var(--el-color-danger-light-5)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8);color:var(--el-color-info-light-5)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{padding:12px;width:var(--el-button-size)}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:12px;padding:5px 11px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{padding:5px;width:var(--el-button-size)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination button{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:none}.el-pagination button.is-active,.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination button.is-disabled,.el-pagination button:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag,.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-text-color:var(--el-color-white)}.el-tag--dark,.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);font-size:12px;line-height:34px;overflow:hidden;padding:0 20px;text-overflow:ellipsis;white-space:nowrap}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transform:translateZ(0);transition:var(--el-transition-duration)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled,.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%;z-index:-1}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper,.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute;z-index:-1}.el-select__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;outline:none;padding:0;width:100%}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0} diff --git a/web/admin-spa/dist/assets/element-plus-BUfCkBQO.js b/web/admin-spa/dist/assets/element-plus-CKhypU-Q.js similarity index 99% rename from web/admin-spa/dist/assets/element-plus-BUfCkBQO.js rename to web/admin-spa/dist/assets/element-plus-CKhypU-Q.js index 1fe2d08a..42a4d848 100644 --- a/web/admin-spa/dist/assets/element-plus-BUfCkBQO.js +++ b/web/admin-spa/dist/assets/element-plus-CKhypU-Q.js @@ -1,4 +1,4 @@ -import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-R8HMg95E.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(` +import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-BVUySZOn.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(` Add an empty element to avoid render label, do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 `),F("span")]),_:1},8,["model-value","label","disabled","onClick"])):o(d)&&e.node.checked?(_(),oe(o(Se),{key:2,class:T(o(a).e("prefix"))},{default:U(()=>[H(o(va))]),_:1},8,["class"])):J("v-if",!0),H(o(xy),{"render-label-fn":o(l).renderLabelFn,node:e.node},null,8,["render-label-fn","node"]),J(" postfix "),o(d)?J("v-if",!0):(_(),V(Oe,{key:3},[e.node.loading?(_(),oe(o(Se),{key:0,class:T([o(a).is("loading"),o(a).e("postfix")])},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])):(_(),oe(o(Se),{key:1,class:T(["arrow-right",o(a).e("postfix")])},{default:U(()=>[H(o(Cn))]),_:1},8,["class"]))],64))],42,["id","aria-haspopup","aria-owns","aria-expanded","tabindex"]))}});var Ky=fe(Hy,[["__file","node.vue"]]);const Wy=x({name:"ElCascaderMenu"}),jy=x({...Wy,props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=e,n=lt(),l=ue("cascader-menu"),{t:a}=pt(),s=sn();let r,i;const u=we(li),c=I(),d=y(()=>!t.nodes.length),f=y(()=>!u.initialLoaded),m=y(()=>`${s.value}-${t.index}`),v=b=>{r=b.target},h=b=>{if(!(!u.isHoverMenu||!r||!c.value))if(r.contains(b.target)){p();const E=n.vnode.el,{left:C}=E.getBoundingClientRect(),{offsetWidth:w,offsetHeight:k}=E,S=b.clientX-C,$=r.offsetTop,M=$+r.offsetHeight;c.value.innerHTML=` diff --git a/web/admin-spa/dist/assets/fa-brands-400-D1LuMI3I.ttf b/web/admin-spa/dist/assets/fa-brands-400-D1LuMI3I.ttf deleted file mode 100644 index 0f82a8360517d2c8b7d16e85434d40c6fb735954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210792 zcmd4437DKkwfJ52_P%#d?>$>j_ssN6W+s`Qt&@;t2#F*RAj-ZdK}3-?YLLhx!zSp} zOHdY3#Hh&iDk>r>D(YNCL`CI#@# z-rDQbsZ*y;oqD6RQYxq>luH$lJAT>FnLA!}sZzR!(5+`*c-FQrw;XjC3H(YW-~74@ z-tyYDH*9`hscyG&_NC4}=d9QCeY$WDY3~Kb&LzNog8NAP&j6k0UbuaS_XvN0@@`bh zKXJjuXP@PKwdFpgS|@nF?!vQnY;!ibUrs#btKvmxU3kuCKKJZZ%GI1x%H6u{;x}#o z$nVQrl&gKYQn{sywz_;C^@Gb!*>PrU)jkz+$fnevypyM;$D=0Toq0I5-#!Mi`;SQ zlyC#{bB=AtyeWTT{x8%Oc5Hsfzw!FJ)Z0wi zj;U+Xv_rzAY%k!Kbk5aEoB9bSZlSM@JSL6JBlr)>`%8h8Ys%h3yg)r2n3;AG=QioaP1ynBZ1}c%U8YW3hl!&e(l<5A zYoy1G>EG1bK)uxCC(N{W!5vpV^0h6h?_i @@Z|Lo2o%N8V+8O&i2d+$8BHR07ve ze1v!h$eI35nEE_~tCs{-Z_k8r`|It9;+pwH9v^s>F_e1UW~^*lL(h$|gQj0Fe%eJI z19iMgz5xBuQidsK!jxrjA#GihPU4Gz2ax`l^x~4vfc}XIle|q*AFh8X1`Y5pqj^)mf>5A#mhI_l*~U1pw`GS4;nEiZWx|G3JS^i%b= zPpFj1x2v9Rs$LfFdTO4!aK}}YJhm^q8~-F@w}r5s_4E^}#nh)%o<0`=2bODiNTe?UXr8jmJTOPnFde9OFF5;0Pl{W=VHAc(i%DzS{9guKa7)h0{>3R6Wj~^DU~KJ zY2Jy0*8ZaJvv?!Ck=MASKlsi{Rxek|_UH%e^MBmnD{1PH`~nlEUcdgOyqkF2U&hYF zlZJL!I>1Xm$PZ4(O0WgRl}O6s+=Ho>?^S>ueuS4~;A zU6WEy9T)?XMsP0eYT)gE;nw>seTzC9q_31c4j-2?#u-z=xw7HJWe$0_anJ_%p9BYz zhj!yn)^TIYBfqJ~rq5Asw2q&adi_#|(6w0)a7~@kC)$z)ToO+`GMBP8-qJ7c`9>M_ zx-Fje)NyjVop+>@Ii9YU=_0MH0nMh(vYsj`fVM~@^C3;V#)a3J^-tDh8Ea|B!Evzo z7al7#Y1f1~jx?=SEsQc5Rokfa6W_96S}UlQn3zf>KnOZBN0>NIthdbK)R zy+)m*UaMZG&Q-5h=c)761?oa|k-AuIQ*TgjRBuw-)g|i9>Qc2sy+vJCsaB4!oKQKj za&qO?Dc@9bsxZ|ywQ1@VQzuVdH+AFFbH9B2SL46h`m6tVCicwAXO4R2j%VKg%&uQo zf4%M3pZfK;c87O2@9x{ZZ1?KjhwnaP_u0GOu=|SL*X_P#_Xl@>WY6pNynfF$d)~R{ z-Fx1@=SO>cXzH9p9(_fhW>hxpNKc4>W^dG19O}{YXnhDHAXEHN`Gea}AnKd(;XI?dP*39`c z7tL&&dF#wIGw+yr_slIbx6a%#^ZuE8W=8>77&O9|UHG9VFC9_w~ zPRw3Ed*kd)v$xN_Z}x+;chBBG`<28>@Q}YnSE~dkF$T8 zot^#j?A%_@-pJnU-j2QHy&w=k8_~C)4 z5Bz3+p0V#xWwk^Ns#X72$N0plOQ&x5J7YY^7~lKrM|OvH=NRLG-G}WSuaEKNyRX^( z9>(~?W{j^kV|>S+A1)f>!|G%FI>z|?>1~Yho2K6~J;4~i-Hh@37~@^j4@^Ha{hjH@ zr=Okv!}K1;*qQOqL}ucQag{M%Ide2)ymjX6nF|@?D`qBUu49bf!x-Pj7=Lu;pBdv% z&fLcsKRolJnV*|6K6iG<>{YYZGRFTfd-LoavmcoK(Cj_44=~2xsE_e?7~>x@#!t`g zu8;9P#@N~G+nd;%H)GtrXpEm>jGx^X{9ldnx6K$2GRBwH$9U)d+xLH(G5&IWjDNux zj~rNg=orsW&HrNlXY)Uv{}H48|LQ6B7Tb!sV!HkJ?Z0Y&y8Y|zlWj-0Ue+3Fd9G!9 z%i5N7i?{i~<}WmVwz;#gyYPv^ErpjCURJ0T#tMCf-a@Pp$p1AzoBv~eD*x~KC!`^< z{jopBejEE$?31w%$KGH~`J!{t7ovZP zJ{SFY^rzAPP%8Sp=(nSfM8Ape6VZQ)el&VV^v387(YHmfk6ssjOLRw+9dGnv;3DAc z=vn-3jh-1jBl_~_5z)h=b|Xxh--lzwe5?GxGMxjgcGhUmrOy^4iF&BWHzohmioo zKMsFOdL>WzsPNkGVc}YMX}CY!8Ey^d!kN&%(4NpALq84uBy?}+x0NXU z$NvX^_v#1q{rWC_r@p&h%>NZfpQK-LXhH0!mrIBq1Kt6=*}T2+&{Qw=rc;ejR_VX@ zJVgYcp&ovrpa0c^6!4h0=g^%3<8 z9o9*m)g}FT6_%!l&Zu`_8n>ek2m+L)D9Z{zOK|%D4=@O<07SA_1)K&X0A`ng4DPGz zki|W_4mn)GmOvgjrw#?&*VdsK_jPq>!DUZjpcVJ^b!fvquMX|F=hvZ#dqEwf9~ag^ zD1!NKK>7qfFwlv+tq#&p;Y0%6fY7Eu1$a{(dT_Vbp%?d(ItXrrq6Gv;@EimExI5}F zfcus@2%TP5hhW->z3+w=cMGk(3YRex5Src1 zIPGRkgl2c69o@YeKeV}f95@_5G`L&x144JZC7sas1-NgpAau9;a^MQWp}XDJ0D?o> zxcfc8E%@Jr`#}prN4q}^e1vdlXwT~`$e8Y-J^`VPJy!#iB{a3?ofd?S_PpDIqRu_w zZO{8jL*09R2>b~DRk%-EP}eFoowOjj&1q;_Kxk|lIu;PRnr7?;)b+UFVR{w*x8Xt? z0NwxBVbWDEL>xTjjsU&8&71^s1Q z`nUJjCe7t3!47y+iyYBr+qJ25MBQBF$ ze(2zN>K71w)bsRHKvVyI=E;8Wqi1kmX+iJBy$raVaA;)z^%gX3+z;Id=mWU#vY;7* z{X2o138(G*ZwKzc|5w~k1E0Y^kNa5*a#*mRaoztAEXRclt^^zp?!Q@Zytw~v!GQ+% zgZKU5*zx0nQvoLgD;oh;;}7G4lLO$w$>1`M0!{(<9t%!0F8B~|T5x}8!D+>%YyqbY z7rYBN?Mm;x-+g$0gP#;ofns#JJ zmw5n{<#LW++`z{W#3`%5d*MEg$cS$yT?_9m#I@#>YMbDQ?|@Q8%InynREf5f9zu2a zB%1@`Duck3Qav{+wZyN~vU7pIB7{;#btCXNg6D$>ocM=tQEKF2rAC3;PNkMVs?^F( z0Qaz>Qmd~}YAx^MTa{Wz-`4F>>WJ3>l)rwjQX8IAYSWDfn%kAyO!=D$Kju26j(w+6 zFTY!M*Z7c5b)OndlAYe5$I{-4&rt^tkmU%U+Gust^EjBq`QhTChk<~8p^r$ z6o7KBr=A-+5suD95F+dy3b-5L#|^v&cv7i%Em!IvPf+Tn6tD|nh<5G#jZ!yXq11bd z0RCI>-$L43cPMomX>V@)KW|j(6V&wy(%s0D{KT+!YPwkq}Skg-+i%m@ModGe1dT_9cI zIskt&d0UBV+o&|Q47&YeN_WJSE|I_VoYLiYD&4tV>8^f&`nxwPUCAlkL!Mrx^pX>l z?%Sz!{{tv6QV1dklpcOY>5+R8M7Ahh8&rB_55h+$K)O}bvpTNy8p>UJr_$s2*FC88 z5kFCS!$V3RNf{fjP{R+Z@?Aig7w~@JUzNUShtk_f z!`#tt1#JD{kAKVz99^} z1_5Lh@DruqPQ5n`a?lo6`sOE;em7~}^N`ZFJgD@oIp9vEZzKFJKSITOmHzO0rSCph z>5r2Bo*t$Di8?<<+WUC_4E?(Q0;NB@L+Q^^$LBi%@;^xVU!*->+N1QB3I9q9!U5^N z`moYp+pP3t5ulu}ll~jj@$f38AHn_hb4q`AD~2aeD*e4JN`L-N_<*K#aFXsn37@CD`3c}bPOr8p$F)&8Zd`w- zaspeG6Mk4Zk@d=nJ+7P-VX5r^{_JDQX$D$)l+$)6@QiYb_bR7jGw@gCbWvXK$AIUQ zv*bGE^z|#JpZxt7C}-(%jwWpLqslq#-SMb$c7>JmACBm-v9kZ<^1?D<@|I)IX`=+a-KXzIX^Ed=c#*@Gxag${Q7`$cK=2> zzj;VGzgw@I-xL1axyt#&cIEsjuADvFl*10#nc*GD9y>148_ZAY2|cO2D#9+mSu{Mg zny*%=CbGlj;Y!t4%T}@pobqrvTdj4C)vDF8T1PdL%@FMMd3_z#?n-whF@73P<+Gpt z>}jV?oXRtd_tewocI!wqrHiR(M2l~3N_;Ed#xu7UXA+MNixXc+vbEvUyA+S3lJisQ zLSE8nFjaD-QmuBEOFnNpQB7qt!$Y;P(S&QPHbyIG5AE6-2t=a+9{DY1!@*!UYk&2G z4WC!m)oO05PNq^xZGUZjYW^ub$zJ3<(ZeJ&*=jZ8^HqndHF`cq`Sxunn@Oj9-g3Dr zaf{z*1#RiB)v6M=_^njw9v!KT4NF<&>f$#kIqR$WOw8w^KA#Sr8FB?f5xh=drETtp zbi;En%BG6=|86R8I-NcnP}MSO*G|G zIon^xJ6}kLJ#LRT9Ev2;>3Fp{?>H`3Fi#G$WK)?)#OFyS^QkOZ^dvu>+AoDi7!kiO z5{}0_USBM%J$`>UT4*k|CX+$GtHTae+2!*Eyy0*-;`Vs_UXRNg3N^(gLr5>=XfZj; zQ7vFB^d>Kd{8?9DHDnjeJ>P=f(*FO3W_P`^(*N41Z8VCdDI{6<3e% z*X_k(yRQEteJpz0BuN5+xk>Bl@jz#?sVUiMf9KWWH`a`~`6+!3bMUA|BM;7{*@uID@D)dkv*=*I0+az7z7K(&@K9?)}#y5prF0Vfv32n23baA*5^Tx0X zeAZ+1E~0NdLb8z6zkUM|Vaa;L4How|tgFZQHb`7ZG9PiHU|Fm9{2qOu-YJ@IeUOu+ zWj4Z51joZw+F$1@qcXGMFER?{>Zn$>VLNR-I}d%++g>ubo(Mjsz~Q*zWBp*!a#EQa zX~RdsO=Yy^^;LOGo4EqzL*EjvoPmM$>jws$hP$h`xmoMx=H7;@RU>+0!LwBoOf*s$ zkIY>&mWV=}0I4LUGkWz|$`~aUW5V!O+xNsS9Z$r!h8&mA9|?z-j@!O&-D=%&J&}a! z#wAYDw9h?h`)z;qR;l+d_5LFeBui4Onf)WwI#v@rcnz0ra8k3bm^i_}O{H9$rPTJm zRcm^B9o_r(&)T}@RXX5{el4qYHe1qLbM2P=+m>jjw`a|&z8mXpNG9W7&6P^otghog z#$r8f8Id)Oaidl1`>$J0yqXOvGCygHQ6g^Cr2; zCTXZc@c38oIH5l*r!L7cSq%+Ga8=>7{}uJtc?s(QV_f@+RKRF?CwzfmV#?yEXfax} zZ=X6}zfn?1%DFx9SZs@p-eRL0v*4Evni71XHG#4ZT@MXr8QuRLqj2|Ht;3razCa}( zO~0{$%;Vd0`G}{1Om`@Md;^*9jRgZvhkjemvCZ1nz+@cTf(9o2=><%N!m<091`G4? zL!4@^Is}t4A5!U5npKTaZ;W>>n=*6LP_13ZS$UvV-zVWrW zNFb{aEwUH^dR=-(GIHg%?O&?oa2{_&Jv5023))oIqq zVLnE_E^#Df_R=>0+Ww9XR;#=oT-UT>;EWELg}|#7Ix1AE~q#wm}5lhkVBm z4)j6aDTnthS)dG8=gk3@r68Jzajgyx@(_{U<%sX#mwI%b6-{f z=vIbPR%02?#ZrJ>qsEX_g~siSXvhd;KDhPRB9vvxvZb%WkjWM#w4@~#U!Zdvw&jp* z$pRs}OUahPpswR9;%{zhX(_oH_Lgc>ubco=Y*HBHZ1P9#6syeq@e; zmd@cuoBN9Xh)v6{WE?+444sf5Dbu3mkdjQPMI*m-bZ9}KDKzUR?Uu$;C3zbi?Auf2BG^7Wvrv)4em7|7)T^qS`9k3nx_%R%S6LJp?3)-?%HJnz+Abt zHBlOr+>;CJaDfd@NSpQipN(9x3!5N#f4RCK5hDQ`+Nkf>tPH;>L~p9DT2)=POn#Bk z0>R+=lTKRSAB#p~{o)G-1F{{F6yxLkTKVko!v|LI^sieN49iYL+90$nvdu0u5yEp8 z&r6FKks$BKLW|{CsJIkUiv9X!b>d<%kW}72B`-7UTM#B%Oe+dY&`WUO7 zlc{0%+LpUFMl)gbCR%E4V7=bu`lgaMQ|lwL>QnJ7yZ zg*PV0*a=$Q2ZU7DVWA>5`&ksHi^9fg*-Z4KAB|=*by48@U?LH`zK-dP{-CGnz=0-@ zKieQCoq04GeRS@3^~OwO{ig0G;fZ(4{S4~X)F3)98Ba6D6$v@mju_o>Ue}ThJ_yiWp1$F{ue`I<7mt?MoJw+ZGKQ!V3#Fn5n4Z)hKDdpaK{v=v&+i3RM%hL z=+`tgV_Ls6I@n0NbW(bwQzwPUD1j#~sWtld6=XBB7A`K~q}3~= z4w44h=a})f^S4hO20jl;DvMW|#q)ImoiCPJ%(`b$dgklQA%IHuIFS z8PTtn>=HP+tB&7yHzx6pL}z*F>fRn_YL_IFsi4QR zqNq=fG^YZ=KvR_28jQtT+d9W{nXt=`eiv8i zLgn4w?vK^^73+prX}@SaYK-bjtw0lY@Py~#+qJOn)JI9z=gXqFQV^~-?^XaPMHaFPwH+_ zY)R_5iL{f}*}30}Ga+R$KlS`PdWow!j}o2rL4BXk>eGc{S&tU)Z5GefntqE+bm0v* z+#rGz#}EFSZfYd+_dZLo@ud_?pWQo_BTSTqh@jK5Kb z)Z4Lm_sAM4bBq|;x>8ibLHNP@?7+WIPMH`QKL>#Ck#LFs@oje0Z~L*tNQ#Fr7!e$Z z?)ZA>xtsc|zSio#w8&Acgu?Ny##k@bfsLmE{_x!I|7we!o0M0bmRGZ|>qIg>_c_}j z{4u>5zu}4D`G@s>Yy@5Et<*SJt$Iu^E1B$Iy1_d}*du{``CcIikc5>Eu& zyc9cXwe@Elu`cHG^FBV1N;LVF6m@$hlWHz!9Gxz)#SdwRhnnzYvT;9*DL*jK-KAYE zE$yzRq{G7H(O!>_QKKryX=_UsLg`e1Oo31&pYKM0>|0-}6+5)EV)-ef<+7jS6p_`O z9>z6{O=YLrsLsSDenRb3Sp8W(56%Q%E|&4pY8gKmGi$t&pKICC^r)QJ44Yk{oYIJ2 z_KMaAZ>K7|xfZ>*#MWI7wkvW#i!z+RY^9^4Bf&O-9bWy!F;U-Q%KE{$l#}Lsw({0u zG?dAeX5wwsPAEe!oBN)6Gt6TQ(Dlwx`)T&Hd$F zM@Btvz0~cAEj|78(>JW?=m>|8clrkOJ$hi^=+m>oY$TK5IsNo!=Ehg9xTtSrxVy`l zJ5k>@RDIn!!y`IS;F0;{pdp#kUj^?i>SgSj4$3OB3W5Ri3$22S3cWU>N(E~GIn6_R zV&t6Rnn=OOp;@GPaOBfBE!EE2HD{i=X00P`Z@0(YI>b5&cTK-+<;s<5&Sc$(9R?xl z^h%d@+#7Q&Uruf#XtarQDJ8p9qdXdbUl$|RE3_i0cV5rcTpxS6Et-!i?wqd`(c-KZo?O%}xeOAY? zKJv&Tj;IcIb$01pPFH7tUoPYigu zFnw)0-PJu*XlZM1P8XO{!KS7ZYONtxb@1@<>L98i_?hVJurZia>!5Q8F$0VAf?z@J zC}>WD+EG-vAfCOe#K;k=AYRhRhE6shX~IScOYhyXWsBQ=rpLY2?cVa(v5x0V=HixP zAA9WBEndxwbL?aKHA|N+b-R~4&T_YV=^2;)Y3VDy&T_}I&7+qsz4X$h%QRjBysupP zr%TVEjaG*x`+z3yV~s&2auVG*hc;)Tl`g2QqndD;35Hr!4)hK=8X2wDbYCcfMMor( zN=KqzZ)omEdUDg~=%|kOG-uM`P$-_Ck^~Vt~ts% zN=r*78)2;sA1exKuhG*;`@-sUZh>9PEsuv8`?`)#8samoquW<1%U}1wVTXy!0S|vx zB`D${0^$(tduTW#48Z7Dnx>3+xh^m9lLrle~ zErTS`BzsV7L9hl9S&3Q1Jd$-xRpATzv=r>`P5w|6ffMP@@p#j@Tr}kOyFJ47 zkrLhh|2p=FF74@E(qn&HJ;K7#R(dc162Wcq6dt}1xzB-&r#Yq*?+vAQC z4L2oXmtPr6G=-y%6aS>of8CW=UU_-r{a&B%Q;k&6uxI{J{blYeWYlVGD^6DbC@UY9 z36QJVqa>L05SsauABbnLGH8UV24_R`F@GM^0L1!u5xGQ2IOD4f$`Ln^+?a5L|?UDO%_CugmUzCZg(usQXlfYRr~!x2vMKy^2A$&tiny* zZE4SdD=0e_FRg$?mpQKJ@^Ca9_9uM7pi}huf`P0*lk%n0t;<{)L;}ZYYHIIFrb0Rv zO9UBinfi_^mmNw4gYi%>o`KZQ)PAu_3P$xQLbbu5f9|+;*Vx#`jbk-;Dd5M%C8C{W z<#NQB@Obqj#5JNn?{0EKL2aNYpB;C50xcDvx7c2E{X7~9#A3~znT#tOcKXrI zXrI@c4zX#?bhWg2w9C;eTu4X3fak-hoI8Z*>c;F|c(*gI-?CsYSHg;7P}R`!Z-7Hu zAq9~nJzO2Fi!2@+D0&D4m_wb44HRuZaiiAJ-+*4~&)jP9+$KM_FZd3=O3-&VowJc= z?hl(jwaGp$I4vA&$vR({{}=rm?#6g%qpF#+SdXFga)T%sYnGp~Sp^9*%q#;9jLOmp z$)Pwc=*QSs4v&n#{;-vyVr}^`u6!Y%bKU1bnqDF6Wk<*8y7lY3`_`@cC*$i@ z)LL6zQb-du5L7`@l#Lc9dgrZhCt?_l#UUDB zJf6-b+FElmJG!?m=6YGsZjV; ziR{{3B^QUPV_L`K!DywzVTcYK=+;P9{?d?s6(SIh>@Sm_ww72M3ym@d? zH^<48ZygGS+|hg_5%5Pap9-at5OLFS`RJ)3h&m9$5G@w^$M}~wOD*wCCcZXsxG@k* z3Lo1s{-B|2dxpqV+o|7=K>48lrv5i4=%k$zbPbE_9<@xeQXK(}#$T>fOE4$vM_pol zNHXF>cr-rJTOX;rjjtqf4ugXvBVmlA5586R!**DceI`7etqyXwZu~H1bM(WQi*K+@ z9^+5>2FW9|kVWl>4@IR&P52l)!dOy`f7qHJTE8$o<3o-TA4(D98>CL_XE`PZ)J6DE zc94;0bBBLSLZLT8S+-h%4c8MIE=>iMsHz?6XsKoHRa<&a{ z_TnPGIIO!m&%VHk=^R3WE2%Rs*Gt#zp~gdMMz)ZeWwrWm>ZaBgRbF6E`x2F>-R|2W zZhu#APq!aF=PmmEceq>wde9vVdbNWPevc?+XK zH>Rk*sCJ?e=lyhWtqUH2wk3E~f^a{JV;K2^LlSgC?r-(2$ziwZZtm^qNH@7dWpr0q zNBTdgqb!3`$2SA4dTtIcG+#f79>lBz*8eNS(#QV+UKvTo=n%x#hm@87zrm~Pe~#Al z|BRX#%$FjktDQ(W(Nsn!D#}%7%%#h2HzzHLAl3s&5Y5PDV9JS@QNjONK@@UvY)84P zQ}nJTCJ!5SyF=jfgkToAL!$s|g1>svO)U%O-R`_Um+k5ad$Ck<1!BlN`^_kV`ST7BXRk^-~s^#hg$L!-|Zo#z(}~*IHZ9ZV#3_ zyq;XXe_%M5$;bhFHj~Rnqo+8bzV^;PR_-6^?M)`a;Ywwwx^y6$@t#H-QmI@vokTI? z$C_EcG87taO|bzzc+L}*JLqz9DrcnirE-)l9l8?PfW7M;d4Bo=&y`m`a;2=-g~=WS{^WuX(j_VOh*EpLaCk(s)TS~{b90Z+ z$Ka>Av2eC_P{KqI3nhb&MbiN?xDtu6a;Kb6Aji+^hxCM4E$EJp4ti?;WGML)Wu-7~ z;hW|U!J92%MSpqjDE;}lqau++M{jRin{(pwR8v!M?yvr?Q={p0K3B-6Q*gzXd$pc8 zcKPz+c)1*n>Ee-v?(Y8O?dhguD45SxmbACawHt+qiat%TCr)GcvR=MxVb<<)N!C@? zw)z@YsfnfN5Lypb97LT`+MD&rA}@YyA4SYz;WTMvFnv&i6yaq|B%fXKwVUezV0Pka zaHp@r=oJ)deX-W-3^uR2iZB8i&b!yGTjyLzhILxwX#FowJ@u5<3;$&J^w;I*NfV*< z&wnm&BxuuL6QBGD{fQE#2>oqEYuI9Njv@jwkv}okmcO!xot@E`G)80C9GCj^c(JuD zlSSDd&Su(Li*u8^%%i930qd46)q3mPq!@+@4w;uOTW8zjL!b6%@NVzX zC=v5(RgWMap|OJen5`!7_}%Y*w;lDzz?!L1iGa(KOeK@)LPs9aIuVB>N1K`geA+9RjK{SnlWp?LO#sK? zQcu9|hThrPK=bg{T`IbALGcI3nwJ=dYz8osqn$->+(3v$Jx zpxbb-JecVtuZ~2saF;uA*+4|jlB_Q-WbWognJFY*Pt2Y)O#dIC|4aDp%^7?*=_0-* zbe+119n^=|Lz!v8q^KZC%H$Annwc!}oXB>@#(&g^w^@#b_A4^eM)V#3gg9(MZ ziwPvRt-32>5(weR?hDzn5n_VvF^A8F3DaNXUC4rDZ}Z;ka$I5UTynI>lks?7!>)NjM?T+gx?TJO!J3HZFa9v1NVI&CbzS2WUXYP&avTuZwyD$8tO@OR6s(bG!j37WXkG$bOsJ zmMvR8*tewk^%4^-;E7IqomHz($BOuG%ChCoo!vGtFxt`H6msO4+w1lni=4v3?1@G( z31wwQQR(u#lYRL@GS%5N_ocu5Z!$Gg(BO@(yQE*$>N_z|qtFU0q$Rt=$9N&28mY-O{(@4M+LYb=vNqj$_{kja3V)r%{%CSR=Y>^}kl6o^?ufe7Fg)=4@IYCAi+sbv zsM35^_f|p0#4)WT|3lg)bGGR$tSE(Y{7*=T3Jbq4lPHOMaS38u*+ev z*H`Cy5?Vt&D05S&%i2enHC^~{ea?~|vNAfag~@7psSs;d2^#JmHIuj|>RSpksxHeO zGSu45EKbp1AzmR&LMo+EAI!Wgw=G42vu(Hbc_Q<9x$OdRF8J(CB9pyx5~p3hR?dxG zu2y(;Q?^;?syUhn1`{nVSIeE~vt@Pm_?8CbZYk12xf!wyg<4um9jz^)P$1Y`D4(PY z`AVh0<}qKWRPqHqghDDVdC`4k(gzr&v3cgXinBY-pgH3$V&OOmWOFShEUL` zD3z8%ujEuAo z>wfL(^*E=y2|MG<=s7(`#X=J6>Y9YLeIMlr1C*kl}6&mCaR4g_LR^hlTy2ft=sqcO;rG?<8-(p>qDEw<42NToTi z3s{|@F4?dlfNDAFFX;TsVqzH<`?{1TxxU^Ph;rju3VaDicE#||8~E@<4k6%#MnbVDd{k6YnX>RFN&J zY*xz^-{SXFxy({+ncs-n==!=wWP4TDR2Vi)QRufv^-hn6qaVyV$M^yGtHVdugn{J0Eg+=XSxHw6jek zvAkiK@&6-I>@7!g?+@x*i&9kY^E5SO`$HV&CJOm3=RcVxa5QucUf4`ix;qt#xZF9k zq#&JrnAh#3QhkA7AwRH&`!$YkPPK-D1Abp~p>L$8KNu{;TR3$=AajUp#npa?`@+0A zey-DTz7`630s~EnxSzv$3{}`w%X$C5X!-vF*m6T|BBI$Hph$t2#dr?1&i>Cx@&M~`yk z>}_stc2440u~Io=)7rI_3jBVsl1HBC?pm{E^IMlDAnmrc!NJj^uu)5|!C-sY_neJe z$Je@!P3PBa$mSRddJ_>>dAtEtaM9J<*?1`!_ zR7zro162?ywx5+QmPDB%XqsxqkVi7sME7LOP)Y97OTymkTzxL?IBZzYX&~O~yy16T z%gsywwbuqb*XiJ^UiGS@K2Yqtm&J!O3h%O}xn89E51{4`+`a^Y4b45KgLj3!K36Q} z@_EB|LE|GKJ@?g0rE>XYmAt5`3TKmh|Al8QIp&ySK);h+_l}D%zE~#%7<-(!l{3}@ z(4mihAFr-f-_&`1m_8Fpxo*=^H)i43OY|MAK44$wxLJ*aBA`dMhXyr9G_`Ztu6Cn> zFxg{TigB4Y%hNeNO(Az0K5h0-AS@Y145bZow8oKd zy#-Q>nDelbc8``wHE6V3RhOw*VolqaL#)MONL5d5w#c@vGOtKg?q;0QQm2u+Wj$f9 zT%%SA!4#;<%8k4%^TgQb2#2fhyCsFp46&f#KulU^IUdKAhEvw{__U|`1U#F=m@`)_ z4~8}#b(Rr4;J~0?bQwG_UyTI<0wSRMk#|{L@+Xh4@%x5zo#iEN7t%_*NZjoxA+VtH zxH?5j?G%BAtdu|*&d1rWH({E_zP$33WT^th{9 zS4|4rp|!<&bT7&2XZF}FXPvcf+%$>m&oR1RtN=}8oMjS@`G^$laurVXtXh5Y$w%_( zh9HaO`Hs$XbaZzYOBu(*0U;*xx$a6|U!@y4kT#k!=H{e;bVsSHyQ9SAe}gB%m~_H1 z>ANdPisq5NN!(@W^(!}RI^u{P6xjx;&e;W)XY7z%%Ut~PctDa8{yPYnUO24YE5Rx80=`#tRjb{!8!%{j6`K-cU8YV99WA+rnFXU zcD^8@8`jqTdya=i4sk}yr&Ycm4zBIsSsO4ZBtGy_;tNA;=ZNRJhIe53^3`jXFCSoI zJqd3U%{$x>;_ zl4Z-5^mUYyDc25fsl0S)dG3Htr?7BMJNhDreIz?e=Pk`;w#42H3gZ;UkokxJl#ipAa~OP98{u@e3;jgFp1q%`zz`moeqy$O06U)b^lOW7Mk;anEU($rsX zkEbcd)tmOVaJY@Va5k0(y-IWSrbzNdb{I*N>7@PeJ48v^BDb4CT4b2mp$(n0$i#uY> zD__A;jfNaE8^*BI@VIJ6=!~DsO#^T&_*|V?>ekCKZ(>0)8kWXES;Ic_V4;!i+qdgN zb0IM-+ij>iWs%4pfyH4j8Q!6EiV)e6BPB^X06(V@#(il`B@6-!Y_^dx817X>) z&b=B^Hq5G9A}P3wwvw;A=Hm*<=vcXw9v+d6N7nQ~%Ald5(!@SZlzXI3Wkp~YLCJ_B zLx@r+h>SW$-+uT>CytM|xZQ=WV5GTSM*J{{t2$MpmD(61&WfL@=E}SLP2Tl1V-i>1GUUx`Mu@pw6V>SJcRf zWvI{sFZIV_EiHWQ$(6zSA&?Mjj~rwz9X%75qVzEvwhs3Xl)F0O*(@E61hC{yH|O#} zn)PwpP3>9j_41K8x*2la>We2tnBdb}UazB@63dWOvdv5Sx?L_(g`&wO?&#D%gwcZz z4C`vTdL@QOVmILGky;&e38>uRy4+dj6HIL}I6QI%XQ3XA8jI3J4x@$qLl{`#Ve8S}*=0PHYR$L7kCx5dx1|2) zEz4k{i&C_-mP_&XWwY6qctWhrLzp7P)(o~6_44{71q_>5b74D`;ww-pq*9z4d`3Uy zY;ZO^=QwY0-s9Zq-0ytVdD!_6=UMimW1~J%Uh`!E8Yh1~WE#E`IL55P#LrAXd^Pcn zF-65id*;i?+>lwpp}PFa*P57tX*Q8eS>CW)gO`(f@gv)M5XL@UW>u+@F{z|X+4Ogt zS$Z&iCR>AZ)JzU34eL67t$JWk>{8evb;F277kcPJ3v6%LON_|@8?7BhM{4x@qTPc@ zGlb?>b`)s4q)jz1!z%j~Vco1nHLq_7iD%5z3)`m!_T5bKVdjnb0pSk;{Fk;~Ohgg4#Iu*ybGjyI%GF9RT`paE%b zg%*yO*219?ETJ*zMjmL!j7JsPGAqn5D4{99!SX1nmdR$BXE5VxnuKGuT9*tSO@_S> z`fO2Zu&tF^%dOiWKuh9Qk!!vt(ZA#kHb|Mk0<5|_%VR+`g|d5AieQy22s!h zr)D<-$Ap)$3JWiA`&?d;ACMFMur^{aUGt+J^tgkVBXLi{hk_P%YmTim>1yv15k;gN zUjinJ4|O)?d4Z6|1}f6j#F38I#T`qwARL-tt*Ap@jhr9!X>19@9`-$QEFM5@sqLar^fM7`!W*c7L$|GE@(I{!$A#W_6 zOvd8=nA~{@nd6hr&Tbv&I*RP-I0csC%s;mvM7N(4a_gojHyT4eSE5`lbTC2_-LAN7L){5h8S;=eh{++ScLz8X zV_je!@S-2~`yc~@M{k6cd-Sk)EaP<*y3CqMd6*Y+KO&$>8e&&K)naqXBTc1utR;9{ ze81H+o|btv=H_j**W+(Wx=`xNxN-c3@D@aMErZ0ci=mD7a!4f$ODHCThu=#f-Uw@0i4J*=MFqLM@>{^!3^IbzP1=Aa7kcuc8 zI$@~sX#K?86LR|_5Dx{s5yqq?77IB39W+x1Jzl@Rfv^=qJgs2m-yV zrU6KrOTk(%DdaMF*AB*jy1cz!hT6@c8)yDS)|WrBk9;S0X71tt;Q6NdzWnbs+-6+h zuq>4LEzd``hj+rm45#8v+)`RB5X~Q=wCIcszcLG~a9zR>u;sULG9xSi{)C=~65w^i z@N_wagX@`NI62=D&MbdpwF-x0H6%>}vm={nt;+>(o?uyOlta8F`^cvGa7F8ATSzt2Lm9Z;53PFg(ncez-sBh=%#^D zC!6V~{ajHP%Qm^Qxz21czQj{04R)ed#i}vvI3=;ZK;fi4>87S4$F%8G->UW&Cc?#X zgb1u9{_(P%Ap+L3R znof5ITO>~be%YmV7eGap(=^mZkFk3~b} zwv~FTpIaUAL@L#k@T77+UojGKo}laLo|a0bYgBJobHN2`HfX(}G#Kn|9@Bbk=#{S= z8q>XbtVA-Ao_q%vwfLG#HVXzbktUBfp5yHH^&6VtSJCJI>ryxpHRmgh{q}|GYId`B zfAms2?gkcRd0xOGGgTyo1uUAG^mnm{^+opr4m0RujqQ$LQ0BDEz*_kwx9z*zP(``2 zrPW7vqPQ$}z3j-Yq`%o0ZC$ydrMbCfMYTC5>X4W_l4#E*(V<{QlWuZ+p_ER>v#D-9 zjy%6H%9n*BagRF#J;^P5{nA_iCt`(Up^z`@rM(+B_AXnRE&2*gWjW_qv!$BrRtM!oh{^n7cwLjrl45EMF5~CW^1&AH!!> z2H5n_=m@#ZshQ8#o1!FY;@rAnnMZgTfiO!u>a#wRrdlCN$eGBjwd@rwZ&m*|Q0bAI zI7f52t1Sgv<&tyD&;~hg$)&h&z@C%c8k;YcZMNQMWZ4wM$9%!OKM>`Ms7XFav!c+} z7GH|E(N&7Y{4RGjjVW$49ZghGy9m=|Rp2WH@pN-D*G_!n#r7r_GKW8qYHiKsT>3@_ zqZ|3yDi-Knu>jW>VsZJ6^U)d%dQZjFLSz7!JK#r4)Ld8=OeHhPM8)G?!7X2mDE+Z~ z8tWfdn7PIJ;No)$W*sC0Dr+`0U4JeTLo6!Dbb*V3FcN(asNX_;)uYMPtL znDvE4m})|4#FpG$j>SA7qai&yjU5q}#W5@jr(4i!V2>XLEv*Qw^bEU2nH%bO&O67^ zEFUiadn2C^5)oeLK}K6fNA@K$lEY=o&1FFqg_@)>RyP${$C339O=UQ=-E3RFFJ(9Z z`3Qh~E}&Q_V4uX-n+y4N=i7YwInKuiqGXM{*pXAh5GBQ81r)_CIvOVbq*#_ zhQ*iaLb+%-m2eQF?Sq~gJO?3A2-TXnRH|Kk{??~&i0UQWu{Q6(P4ZnB!SG2i{} zG2qF?sqm!!5;F8r>RSCM>oq9IHdrFtbQyG+7>oZzktsrtH2ly%AtbX{Lsrcq&y;<4*3%V(PwL` zDGFq?bt2xFIO*H}q3z8BB)h8n{<^Q0SNpzqEnQXJRlV=k-7`H)&!QO#&5Wd(k%Tnb zM%IQ{gpj~s7LQnDn@AvIykG>#78u)LgTWBs$0BSTJBc0hiwQAy9E6kD*ya}#a2&j~ z^7-CZ)!h;^O8m#KYNqS0_uY4wbI=6CtRUiZzxp;yQEBr)Engj!XHlXX!Xct0i+9^pfh_)(qpiY z7l#c()9(<75iuA!9lD+-lysnwM_mv?zy+Nt9v)^=a<*6@Ej1{Efhe%#B#2#xLKi6- z&pQVQCPE+|*F~4Wd6d1FPDlU|kA>4IX$B-0aB5mtaSoJa5*2O<*;-PgOj$_U5w}$I zYfXgd(sQ^P;T0J&h)N-j%d1G`2|VPNVdTgRGtOhui9COP8af@ceZjr zW@R_Q0z;pvedM6XX_Om57bq8icw#`sFx{eMLCrCzQbL(9b<4_kK_U>%j=&z00F=q* z^Wlu@GKWn7{Ax5-W(5ueiMkR(m2Znir^JKse9VvsMH(I&)3wS7)r?`FXGHzdg(O*{ zwIlHj9xV(_`4lwewZ3l=`saVL3NJA*SFPT4Fx`;Cz4c@P1jugUGTdgWX<%C(jmgGz z0MX%1mBC-QJ()kO^sR}Dj&Oiq(o|Vs;xUDnmt{~REm~j4CXmyEPM8;l8O`6 z(|7ppOlwGmC0ZU=YTtNw1y(#gt9@Tfa3NooWY~vEuW6+p%EXILysjz$63a%LfviD` zcU7G8_W3pfjqdS!#A}#AQ*77GzQPJ6SOPZa3$Je8d)Vy~I&3o)^mm!R*%9YcBx_+ZLH zA*q*#4UZ7XEe_3c;z1}k59Do#yGCWCT@0h~L)-rIuH_v$O?BJ^O)dSJJk5BtCEw8))u(c0>Hsmd zlr+HdNh62SxNOTiNX4@s6r+!fvyEvu>bv&;pko)V!A4d)CM7%+&ZlsD3pp5ldFNb8VqK&x`%%^7CuKvcP|Q-PCH+GemO7ruu=DLFy+uz4MTHm{?@s zqdY_^(%h=0TcS;UPoNRc1h}39S{(W?^PY2#-VWCsE*BWzn)Ps?7{0Ul>u$O1Mk?hF zwlfU6#m<3FCsIt@pUJk{x$L3w-oAa~V=R@aTIWb9mS|6y-~q*=o18rGGfqC2I9@}M zDU2()*8h$*bb5B}(H>1?%9Y-ukHU?ciHXCv;{7uD+mA-Vkc!F4Lx=D)klejnHbNkW?QOH*Sty)HGT-U_`giAC5LbT`9a=fdy)?(aTzU7&yUH7}>dJDvK^d?;}2 zp}-ZNGZ(h*H*ep%{{xpzPsN^O{ZA(AAA0oBM;=kG>H%&iPQK9jp=Kkr2f7wghp0*WM{^bq=uf0v6>&2&gX2g zs?!B5u06`?_JpVqngY8eUr(#9eYViwto1mmbymH`L388D5_A|?{aGxuj}YE zw-)Nj(b5&%+5madx`j#&UM`<|qNzjiG%q(=&KK(YdAWR)TbsKp;U+_+a3CIvaxlV> zDNY8b!YG@fm+>CuYCTjfhg*V-#|l#cYyvMrb(cfWjgVj`ED zn3yeAD_Pbw3%W>6PR^ao<)$Xb(*Sc3Qj3FV01YjP@=J2^Kwi3b_0RxVqq7R?*S z`u#4%V=OISmu|E<+8T{5q|@Q#`1tGuc)EPG!kQtPovKu^LpT$&-R{Qjl{LQJRoRZT(0Nrna8(& z)VzA@M^iC4_mp|H_uB$?*!4kpP-4lf0#zXY(y6*#oxE ztFb$#Wg?pqe9zMFr=j0ZDe@>z%u=v>7%#n~mLlmECCVc(&=f-gBx)(LHrOwi2c6oz z_k@)tRq#w+@&4?@znjS3pQBQPgW-Gbt-;==i2af>kF=6E7viZQmNU;~e?R6pV}H-R zwg}yoiWhE9wg?p?DXpmb?#4u3_PpE!#MpZkP0QUcAqu)veVx51x9}mNe69qXVi5@J zdNhAmKDrJXmfgTgUtlZ%3gno$7+Ufj#43%3!rWLa_+Kxb^y~cv?S(_pIX5HZWX9!P zc8}3zVh0anoqzx2YOyFut>nR?o;8F^|D5;q0!iagC)$96-KMI)gL(86p?~#%^WuuN zj)R^p$CfvGF>UJU|EreR!Q&>#+AxD(iw_>Fr6td^WCxkMtE`^#Zc*5pj2W0@tQv1k zNAd-Y&(*ax^V(ow>w9mH=O8Yj16$u#el6n`6ED7M>oZYv#C+v;>G!h-kV-?Um5;1~X%BK1hHr1zmNnZ(G zZresBCSbY8e8u#+*fGC~WcSwhZd~=&_rCWTCfPH-tISpJ{fZ89>|5K1K#@nE`Azd( z^Esk_9K^@zHNJOY8Ty*lr_SL{%z*ppQ zsVHSbwu*sa1to143TqU-B+Ufm)Yb>%g-1ojtfS{FQH&~G9MlJL>6O&)|C3O+d>)hx zXqP&KIT%hIV?lg)aO`1Da@J`|n&J1XciI?jaORiJ-FoY-_Kb0EMF`Ys-LdtGKm5Z# z^me@%J{*3jckX}b8p0F}&gxg26LPfYb4K?MO62z&+^F+EsdH?+6T#}=4C<~b=_R=S zoAwsu!G|Ay*jB=^d=c61T{Z1vCDO=I3`-%}m1=!4 z9;>!#M9ianfMXYm?P@%>Sg(RtwwIMkg?gnTU!9ADbN-LzR=b#SoK6T4rr@He2J%v> z6O$LVM-aXQui=i?OQi^S%dsr^kMBs|z z>MY-9UmX4cXcdhi)?YYESuz$DFUm#0pcW^m_U*yNdcIvuXF~8XsZ=6^IUHB_PJ0r4 z+-N;p%7rmBCvz8n`47%cO-n|v)nFO{_GL2_aB29$XR@hAHtV-?e?Ay1C7f_RY2!*s zF8Aj3{^z`{99%q+9GIz=lv2U=x8{~yL9H>-va%U*e7)B8d)-dh^EV_iX^?cyWa4b< zvWIro{M{9Q$Eo&1bg6S37Oqh{^^P4T@G zKJ!X)Lk!!$;(O5ddf&r?h*rPs`#5jh)$3d|!nzlFP+Ya;tr7i&B^T|ZFL+VdRjb)n z6WFy^+Hbq=@^{UKP(rVew;D5*qM^#Qgc9hjEHAMl1N>{lClOe?qe;BX8V{M4{0SAf z*oO5y$@g&My~wouq>0u`Kz}f#p%krAmhCYD8(J3$dpSVybGx8Kgyg zPUW_K#~&fvhzqc5u9Ae@WH6A)@q>^jgqS4a@LW8BiZYPJGKh*Z$XV1BsGVH_Rm0h- z>Gfl?v#R5<_35c>cuj1CblBFuWq*tS#Zsxth{!qqqt&*R!g{7E8m1xL%~<$0O2Egg zj0L<|l$AaS(Wf%0YL*otHTsossh+naW*}`1iH!NTpstP_K7Zr!c;d?Sv1%2dZYlw) z%@nFL*b{r}YljJ#(3qKTj5QOjX1&-n6K?3Z&Al$G+Kke7qeQROdW3vw?x~j->dMzW z)1Wg(-RyWFkQl|giu(SB#UGGSYoM*vcvX!()W!dqf@th5QigS#@mxxr{_3^Qr6A`I z9(11Cord+MBS%UfdN%#|X!6*xJJgQEGkWGL#25P%TNxyUANKvI@5hNc^CY}7vw?xS zRO(6T22~(t5fLCUNOuOLUJY8r3cu2a*3i%c1CXbL6-!~89}1&idlah~1?q^M94s^* z_)_=k%Gm{_@-hBBT+s`j&{CRpMY0gBqysx#@ zZ7aYTmC!u8$2&{s+NHwIA#avxvF6*O>(!0e_q?$zTB=#+m8vtSM!s!Yt@ZWGx*aV4 z;Q4U^NT>39Ivwov(}%B~noK0h%x)S?rm$e6-k+$t)`<^9AGS)x}Ki-9=oz|8dFgT#w)W~TSoM{03k!7z~lKe^S? z)6G%G)JA5Pt*d5&Xp;59s6Ue)$q@bq^?AJ>2l$Yx9oT=hSFrc20qybl01&_&-4!=- zJLHeG4>KP`ZfF48G%PA=6gAFv^V;bjx>)n-8v9i!rqwl%abW3vN|7CgOu`iy_=1rT z>@zEgpn6J}5Q}Bo1=L)%+FZY0N8`;Ppxum%GHYt`s>7fXOsBIaNBSj3qV=r!vtfa| zc@9IMD^k~#+W;prom4X9RtxoXnqbGK(OjAx89`WVP7~Av1YkH8asZ9gMr!+~rybLq zIB-b6OgoSou~dp|7~5(Q(Vg9Tn!}1MbLsUPw@m42q#pF>B_qlKc-iDr zsd(Fs%qZ$GC1<^x>vg@aBX3sc0c<)w>?=OfTB>u0^Td0%E>?MOE~&%q+X-$a=Fwvy z#Y~EK;}y*t{bq6L>@XMJsihTCwbzFD!SzbT|I$x;P zCKi#Em3G@W^;+qOJ9OK#{X$>-hWTyc=9O&bBzQvHwHcvWu69PV$4Bnw6^BmUsytof z7Vfy2&s+(`Bu>9-lvJu@-pVnI-0cqVqML6tWWsA7h1>C&=}Db$Vv|TWb}U)%)Rh$$$5Z`BU05i~jr`P$j-K8y-OIDTY>$FN|Ab0qat`1DruK zj5P>IqrE^Zx>h3UY8gF1j4pR?ugKy9;rHl|0Tq=0onDMXkWG7#T`RVKCKAr)u(n5X zd9Y4hCztPxO-**0nSriyouW~nM7DJmrDtY#lK3){TmuAO_G0sARyHR?4c4>35T!DE; z49Z6%c{hw-X1Y>Z+FZtD1?jZZldH?+_H?l*m!+^C?mbN@BGG@edqVhng{ofkHr^)-%Z2a|0OvM z`G1?4ncMeuI~T;qUocM)sdgSoD(BBh@ts?2NdS>!x}4b;d64|71yI*%nLxGY`Z}G? zd*0Jw`mTKHQ=bZcByqd>fzX0~wIBLm{C@-yP#!doY(2QLVjj7$_>&_eC%UQBfp>tf zv^?0;=4qZg$_{o_&&;UDc@L0!bo;+~dUJF0>tD>D4nO#CZtLS|b27H|v5fg?9`KlX z`PO4sUw!N3%*^@I{nHc;Jqw`2{9$yMm-}u*I>G124mnYy0x&`E7mf9NNiI~PnGiid7?GOe54=;1`*zx$`r>NxQq zIuUmgC*S{1|MX8EWbc>!^^N!QYscA+3_Oo^@%h$G)s9dF!`gXuW-Wbg4WWUmqkD;E z^1TuNVlxn(3kOG?g&T|6@a#N6W&(a(@5gVeMZzDO z0HM?(w~?LIf{u4g=SyGuQus?7Kl`&kTX|RTlb`%#`V)#a@`Izd{|=wt)?X-l>x8*` z;>RW@Cwr4`xNzY@^Fo9gjh{tbSuQ_O{>6!jS3mItbqa3lH?qEQFzV-Q1RQU)X=Z3R zY3AV5JXnj@bXXIJF)2fWmNeE9_)f?S6HEpLlpBfxEr|(F6BwtW>>J2zz%uOI(}kYi zL-SH6>=J1QFE{X|O#4M8C-h**eR^@U1@Aq&IQ$(g2!>l29sd4=ADJpF2(N2SjQ3Xa z<6~pvxmB{xK@rA#YdP)biF0AhLZU&O)fxe?Beiy`&`3zk$8EVmsHVZuc3wxVg2E+; z=dS1K`JdnYU{&BZ$?{U+$)riCt?3bi3XJ9Lo{Famc@lYy=fCm1&r>yaD%Z|Gn{S=L zy5utq2Q_0xYvHqEw4mL8ZZ|D|{~`0())Pcbd17d^HMb47o~bE(T{crAxUPOj-uK)C zFzXm}pL_4tH+1oHuid@RSQG#4$%7#>LNBojV_^bk#Ap(6(|?al+hM@S(bt;~9_EN; z`g?~C9eU%T@6iH?cDrRHZ~KmS@@cexvE4A`+i$=92X6TOOT1gpe4WqA3hP7&9LV1@ zCkr;4vlN)%U}#u{z9HNmYeq|ar)2|Rn1V+G8FMV*KWdWLp=M13FSXixDu$%a4417t zVCv)M=Td>Kul~eO@Xp5KkoS6a`5hn-V_x&Qjh@IVCOmS;>I_k|YqVBytAd~jMBL44 ztWq7@7#)qr=OZRIm&-aPbv$CufT4_>B~}w6tiX(;arkW5toY4bYzbx!O5I5G9C4%QoDnmkt1KjgPN2CZr(( zAB<$CiP^rvd=cKa(IGq3ygU;p*5 z!frD!$)mGr-eUD}Snbgjs!c*}Yq+8Kk}!r)cR8u)mnELRI0&;gsyRK!F7p8oE#WV0 z{Vj27En3247Zw&!4&hw4xUsppLBKe0r~ZY5-Ja`gy1nkfcUW|W5E_I3KaTB_1`A$0 zGIFhc&vZ8SUU}u-jSk#<yW#EUkibYI$hN8QYqSe;X^dP$2Sx4(XK__o?eOt%*xE#vipo_ekF=&O=8s8 zFC$1_)~sclD`~LLF_Khx&cskQdEl!JyWFT@MzmV$%2RYu<1tSF4{5kuPx+v5Bdgv6 zR23eLfarbKJY}c~qaY1ckZC(lwYLc)z!!f{Ifd#zd=GRvrLL{om$O^!*$anix8WWp zC3}}-RU|I`S3oI_d9~rMa^!`21I?Z`cj~aDr&IJ$T7ZHnMv2NA_%T=|9yjr&R`Q7; z-ax3NTsxMpmi7pBoc^#6TG=>%;`zIPI8TRBTY|+W?m!@&?oMYgDRNa20C<%2Eug|f z%q$#HxLL7Ek~pU4nw2b(<>DFO(piV3vZYi3b^*7(FA-sySc63SMv2O;0I(gG03egx zDb=o!(wHgGEBTej47|3Ri=_Y_yBO)Rp1 zVzPJULjb#7e1Q-iFghnp9@QC9M%-Wmi%QB6Um5(h!+lt&^Q4pu1+aO8ufr=rQCNZc zySf6e7%Ws$Oa@2NIJ+Wpu~}&}an%M)pDkh%4}wNVKTU}&dC=m=}yp+q~8=A=gfv?mFg@C7J zzB*EjyRFd-M&glb&{fPVnGgZ?7+u_-=W`8T{%;5^=$WsAnl43#$*1i3N;X>(%*DwMY0kPsCh2jwI9xsdF)~{9k4z37@ zBN#2i*@X47gmsU&k#s7T&60IAfj!J|QsI2M6i*v+ykAuMg=l`dlX~&NA1$;#&;?H z>HTw#J3YM?j_$43{AH&)vOZEOg_f6=dVdxyl}1jitwo~E=Ijqe4<0-n3GZE4sP>)H znd#|6MS5jr&-%jmQ1BL($H(z4FOT7IiiyT`DKV&X!Gj_}`1xP4= zJyz770+yNL_O61Qnc{CQb=r*hR4$GaU~$r6Xu{q_!qYY8bE`cujorxL2v6F;Xe>A3 zBoZUxaH~eb<5qk6orRJz)d!%Iqs@gLXpQaN(fMBeTrOK9Mydmh7(SyChfawkVvCr` zWmBn&XlTM^j+PSmz%WxXneI%XFl?vKA+LUpk$62Luw|tVFvGSLtU8=`XFUaU3*)NB zTIx%0=OVlcY#OpY98yzgnbQ{rlD~HK0dH)>j$o(X`fHQf`fDUh^LA@-zt34^HLMK5B5&0Idq_CO)J?o_y7^-Xx?C zx(uumfJa>;gGFJ`>Kb-BChRkm0)AP)O_F>;ebIkUPhXk6l4R}QcVKpTc^Q3Ud7*?Y zcY%3PA>2>6kCR<3baE1V)wz zy444Q^n~A|K||qwRfl17!K!OZ|M^0z?0q`mv2#5P z+HhT7N9wT03A&70Rui?I+EG`#tRGrn>@{4q#`Epv=BI;klF8$6-7A%&gzoS^wYs>7 z0n>TG^6YF0tP<>&!Br_6h#v_C_aC_XvC!Py;X@O|ke{E!!DzyXL8f!#^+tk(eRwdi zd`?ZST$OA#TTQs2WWC-b;AY~wDBMk)*c~x9R%k^+fw2CYWRA2GIB@&CkBxe{_)t?8*s+5QqqHk|<=l5RG~a-m>$ znXWEJxBhh_K}fM`r8bfvxk#nlXuzXIG19{r6+x7^@@|X-pa}z~i{p z*Y>}<-ZL=?VWM8OJz8SVE=YE-Kt1g`*Hvw~L&VJMecjXU2>_?DU@jDzdiH0FYBln#D^0G7+W z-t3PorSUgpl{qlh5k?DSOMMw0D4$zJokFaaF-+?D{6-<4uZ{SLT}oheVm!^2x}<1? z)sKbo#v^a}p<)rIzj1#y=elj=;_LvwT?BDGVXcNOG7$@q1KIVmY#}f8`+W}gF|iPK zW3VyK2Jej4LfTXTNV52{++iMPsmxvfQBuTvyE-)Ze{So~Om*we>?y8#uvpLKZ@e*| zs~1bxUi-3Zul;ST8Fkio6dSwwi;C}!AodM!=TT+uUtR{PgG4)IsW{W`Y+G6fYbp2RGHmab zuaC;-%yQo&l3p$J40^fKxkZjB$Xcv1`T6p$9eh>h`9C*9ajop1U7 zsodwQ5mtqv><}UU=sB#^Z}I&+6boCY8fbMbsGot(et8M%LHoGq+G%xcUlvO&qoiH? zEecDTlxLq)+q&=vI@9g-)}#k;;-Pi{O0=6^d28}eiaBuSop-K| zwh&a!X+L~i25}D@l-am;eQv%U2A`B;orF_6Ip4|?>>*;1z&OYT2T#EICd?z4PV3F_ zwlRnPB_$kM5Spj5-&{hl05INM?H@keUlm8bd%NTrkE_c|oAVPVx&*r?EORWjY9Sgj zU?Zvh`6K739-2G-)q($ZJmBw^8=wC4rz1oW{rGF5@#gGjYYPke*5~fJ6w`E(XWM!V zdGBvCqteYlG5Pu-^BouRWbvKz^ROUn-aswRE(=+PV2SzY@5vukadqdUHF z^w-|>rZ-$d@68?JBmg}wDvg9x=F zukF3KH?W3S9P>?Q^UzCoxAL8bj?C}fJ2UMkAN8TdMgynrN52*L%u5a*mil$ua^M_1 zq{Jpu$BxX*AQxbd&Rv%+TbtNZphKSGoo^+F=R>lIF_583_P?6m(iUoC=@vFmI;T&_ zPcE_e3{_NLaa2RGQa5=OS5NBrqE-G|tr$wm5*vVcwPIgVDvT6E9aJAYql`2&Dbz1&~h2xi_k_C$fQ(H()?}^8A zAh^=MqDZ_WO5cWF&oSO940Us5! z$?>IVEFG@@H1UG`CBR2WaKB(GI99tcB6ygo)I<-xSY@PEMwGp%Q^mtPLu$a9pFA86 z>1ha}T52Wdn+<}MHRqG95z?4N%jNN>{8ihFgmW6^n?UqFX|p^SgD!T&NBXpbwQP#9Wv-goCU+C#6TKDMAo^99yI^rfhenWrF?(W852 zVstEsxoCoAXHJ@?NqzJw`~P)XK8NUKs{vK`8jQ=NI#7~8iG6u<8|Az+WuE#d|Aig* zjY6Am^Tn~)cENIO5@qnT(409BD?yED=mI--AgZTSKQ+EZF?zX?Ii&QYyN(k}eQ==P z8*UVa8zksG{T5KWh`p0+z2&qvzh#elhhMug_?Y}h{^7*KH{bm5M?UhA+T`D`HObFM z_g_d3Syp@6M$82WCvK&%*!Nqel!0PxZQNlCbV(+NTfD4<40=1yb+@K4+D#^k zbeIyYy+kb+32EWz52cdvv5% zf}D6IW8~|rw7-!}6g}?y)0Iln#TSG0=aEnk`wTW0>^?D+C3npNgbM^x$;9a59v7S) zs?}^G8?KEu!~c(#h=1DRB@l?_ch9jAD zX1qo6C=@qeiu+FiMJkRSx668xK&7Tkz~O%*R9)~X(hJN+^As*7A%+)`3_QV57$cA= z-I6O{69QdQZs&{W4~Y?#45fMdU*oJXTW^}}FzTT!DK{Cx5@Q1O0*d80N8+H%9U?p> zLxH&b9k9_+JdYG1iZ+!+87zSX6M!ryT}vWCtZ_o`g%GKElH2QV}0Wfvas+mC~NQ^>6kxP)0CCe^#k z6YVsTb*09gj4Wg#E_{d0mhqZ_OGU0U(-w^ z#C|Qqoreglikw)MUX#6RJ3^fiT(vDaEJO%F>nx3}$R=vBZL6Y0ku;Nall@9jg0a4b zI-C80sfoVu9&G=LQ!b@5fu*?_c{)U+cg%EAkTd2}`4F1BMB<^DnHjfG1jmh^0|YoZ zGn;|Qti5IiwdNv|+Fze12r`vQqXfksh+QR2a;$9(8P$ou1LnpdG$Z^0p~6Q2zJfPSRA zm<)0nu(PYDg?<$h?!s5z9`mWYv43pbT%WuWCMKqdv4U65LkABY z^w;YC7fD#!@h935oZ6@OJl;VYJaY573Phy(s#Z30M;liJe>=U@k`n@M)^Bu1YG&o3 zSuB=;E9+zt{pQ77THlq+ZNz(o^Lr{9t&K!`2n;aOkl{A&Z;^TQ&#h6E+ylDd*~Zr4 zH||uc4KOX9_>RybMoY^%=1sk)-ciFrVolfeK-bQ9lA zp=z^(oG%hSC`~NFw%6MAhc-*Mq8+a`^7*rqxIN*{(wo4cWuu&bOZ2j%cY5lMtq;S8 zMzRG!V-Z5A=X0Yerh%JErhawA^Di11`WX$inuyz|H3yDs&f?NlJxB&z-M*3P%GUdq~1xPB48iS4|;~r0&3vuO6wV3ke>gd22D}|WX zGn_{Oz3NSCXzec~VGu$J(N21rY)&RpejBE`GiqL$Ev^$KZ+u*NoXHe&6~nAn$z+2! z?0As9ra^7#CSWJob@+tfa3Qp+(aY9jqT|%H`K^4dU!_c?w#}^XLHD=t4!Z+Tn zRMs2V2#A7I8b3e0#%$iv!W5q+Tt_;cX<^QaCo0}w+kQj4?J`e$bqKaDgb63rKg2wmhFi;DT29~kiNHuOfX;}P za*}~ylNn5`1L|~KvKR|8@@SgEh`GGnmGHlRb68?Z@>L^_uS7VW{4|#^Udyck0+yaOh+6|5I@H5YVpS(aG>oMPDz8ifH;LrSXzEApo-_jA8qqO9ENME(P zNNBMnF+{(3jafEN=y^>Fg68s9fpCo?C*$^oeqcO2l_TXx-Y$~{22v<87{MG8%9|1N7o0dv9C))BAj-h2lwd97j z-b?3LV3TEdVS5qdB{nFJSdhT3?10X)pq@v;|@Ml7S53W;~Rb5CKY=wWaQz?V^_$x>wnI=OfPx=QE1;I=t;81^7 z&?{SC{cP;nLzF;$v_*CveeS+XfHlXt>u!*%eEj{Dl~rx|oweoV)x3A`HbN9pg#Xst zfV*nT@sD*nf(Bl zAZQ7Hsf0hS8L2zY`1tAcdebY99h;pwn1?Dap`CJMRVVOUAzzPQZ+#59}c5YQu)+ z#AeHJY#B;xH`s7X{Q_$){JM9fVE*Z?b+Mx%`Ve*$bSq=rbJz&%WQY+`0yrshW)P2@R&idu6YLeEtH#>TwGe1gc0*Q zbG;t^?uvU-uZ?%wu~@r((@hhNI=cFFyHK0iw;%0uZ=yHhKZ0sFQcvPX+U~-n;}u_+ zSXx;bA46!Kj>hUQ3=*uel1mp*JjR=Kq9awxBXUA@0XQZLMB{}Gz}7R`EtjxMda!oLwUB+!3@orKSBv-311Os?IjdehTbD&)6VYSb{2Lu71 zeVDNFZhE3r!o=+lPZX<>NUwJ=7A#Ipbpb@lf|x1-4v7@2rD~N#EodeA`sJaDsF1C8 z3i)EQUQNXjJgP`3E>=F$)$y6lL<+?!_NX{G%E zEf{dY7&@;`p%^fgx!D`;Bix0JkK^$t9xmV{_Lw*L-tGG}<-jvt1PEF~l6O!4*W_F$ z1GHFXBw*;2OlKwUtQDNWZne1%N}wx9hsN_sgP*#uhb-;89J(-oqhq0XwL zR&-RyR)BxnW9F@RCf8~U=(y5ziSpLpxUMTJpPNZW7x(U6jHEIzPt2uB5H=6oH|H;# zJ(9r_<-u*K_||uLKDX*XeV%fDWVbzb_xAT!-FuA}qvuFwyvL?fk@=0iiysSSXY$n& zvEbvyYJMggJmU8svB!!Wij}-$S~mre+9d<$2NLkh@eujE)f_8XiX8xSzGf!#G^8-T zB`J5FM+Rm=Wj2I5p0Pl^%|OB^>k=&1@^K6+>*9}_zZ@JqdR$`oirKWfd};J~9u^fw zl$g-a@*3wU2dfu;kDWHNM6xsXFUnBfUC%6`xNV{nuMu5>kCAzYFb1V?1@mC(nM+C0 zj{t`ND`kqe$n6$(3cXMko30z0Qc9%D4*QdF{3-}QR<9LbgNp5nfFDN7W6Js_crTrw zEzOX>Gc-!BY9>7awQ4Vi*(Xf^gcKmYV_rq<7{5Q4cRsTtMeWE+kCckVl9c=z;>nXE zmV4duEaNp53q=X(S?iJ>;3aTA*xo`{TJ325MT#g@#1t`g7!qG}CQ{*y@EajwcA?V& z6Z#$ajJLthA4Cp%sqa;a7nDOs(H+cfn@y)A-%}b*ns$*@n!IS|J6l{wk6ThcAQ3JX zh^k8phcs}3_zgI7Bor|!UIAX8!IiLYM}te}4Osd`c@(Mp1|3++TWgpUE(=zmFRuOJ zRaad_R&aTKw@elVvqL=Ka(V5gj%hZJkbB!E2!|URKj>7d3O^CWD9pmSTt%jjRDnQ8 z!qvC9fw;7=xPk=FnsELgM0`yDpRSLO5u7*}ERDny{;u)w+3)xXz-`)az>t}_RECr+ z*$ApZ%DlXXe+lMKp{LW`TEhSPX}ID*N_lc9KJu`Goe2?3f1Nv6XT`<_e~_ZE47YwM z>>vFb15-O@{%ZnY5=9{)=_qO_J{d&%|%T*AoG zaotGQU(WIxu8pjsq#VVw1H1W1V~L3Uuil)VPQ*tD2pI$k*%@2j+v|cADtCL6DaW5& zpPNHn<;>3?Uw|)3-hTDfYq*gJDp_tPQ`!C%m)~H%4f{>t6f!F&=jUb>#jDrbJJ%wE z9&&XeNVxaOiIwAoSc5MK^KQy(a{~Tz8x)KM*Na8wjbf^<_tW_GD&Mzp$~x_BFR?*O z43l{Kj1j~_n(VL z%N$rKm*f@y%+n6(8V0^EXV4ej4;Qfnf8gocwBB0&3T>lRZ>;synbLXCOUrC9nYhc_?ytB#m`?_5c zAI%-VW_hCxd4%UJ9G;#rePYi*EWtpB7Q7!Fczj=P!f_@@05LIvEN$uwrCPm3C{da| zM6fYuXN&Pqe#&P)ZMGOA^69@Dl;$8J^{^Q%7G~KqqiQ+~MtG+LPvluAtqKmgO$~2n z0d$osX*m`wzOsz6T=DgeS~Ce(($pS_MZ78KR)igju(}Uv>fFL-hx*7Wepi|5+qZW; zb!GKE=;|0Kxvh7hLev0?VRak18k1pb6g4PhAYevDMq7lWxoQN`6>oxT-NkBxUOpPEjl67eyc z{0DU(;krfuHjl|>I5mBIYz#Gro2%g8OE^Ms4J07`Vg*jwng4=lUcgsI@AOUDUNIgT zqI&Wk-%-E!Xk#yGk(hzC#f-~=Az&HOXnv&2=iVNl_n$w1{=xGnf3pSVY4Za69LyHn3!7buIm3Xh~q} zi*Odfd!Vd{H_^STUuJzE++?Wg4~3#LlR(-6-!6xl7t#Azu41Qgg9^RumRoK?yX4k- zgirLh1F?AOEfaOHn2~cS0z)?Z9RB@aBpUvNoHW0TAq)>m)&}1*e}Z1+NigHY!W*G;!QK$Ux@hvfb|7Jh&(6SReBTGMN>`!+?q0-D$(Z5z0Q9I7l7|sqyy{ z%PMWhWRP|EQ_$5oly%Bx>lJ;Zi+l1MmZ3-EfPAwY0cui|ac8jGVI*Mh;X)CkjDl0bFM+c%XhyJeO+)!wdah&wWL-+uifhe+sQWW!@E*rd)G zv`U9Tf;{MZloijbnwO744PSa5T+EtFKr^YAG^DjvWcV&G4-PL|Ibemp7JSQsIXs3< zor`it>54tl$Sk4>y37`3Sr?;6V<5#Zo3G+WYg!Cat#kf+Er4cp7)!%Et*xyauzF4R z0?A-<)0A;`xCN8vL}lWUcF~mb4E}hzkM)2ESbVGX^f@8#7|!eVDk^}e)qfYEnH5v!cgo-*nam?mEeMLR+v@@QdcJGFB~<& z`@;T?WP@aRiHl6~ZKwhW>la4xNId*!zE0b}&&C5N`&#&*KInTJI_(ep{=M(NF}J&B z-Mqk@Cp`LF&3lNV|HtNU9U@pmA+!(|OXCue#WgX%7*!p3a&I3^$RgSk(%{j4`9)ZE zG$5gV8}5Z1dio;&Fr}1;Lzr}~S}3>@tn6VfZX;I7iV4SqI)&JWVk$K?F9MA61`Di$ zVzBje5#k=8+n$x+Md73??GH*s3%|VN=0S^LpI=_JTm3alyoDPOBEvqo)FpGMCl@kq zC=@Lp5~4NyYeY&-!JdqzD%vaFtF!=J#Wmr~?0t|{Gz!c)sLQYx-cq^dIYE>L4;WrJ ztd1VaFFlmlfBHz!f@0H&tlsP zAU2u|KlsU_+lHO+hqXS(8SSp_0oF8zI3Y#?-!A}A_<1D(?O0T4jI`0bgR>DPCuk7Z z6FKv6xfcXE9*YDh;4rtqpYaZ$r`mFU!|NP>{Rw*%Db$fY;#nVbadP?AH^3|H zo$8F?#~dH;Ozq{Zx?W?c(FW~?;Q}^uu!9=uIUh*8F*jU_3_Jo2*Gy*sV zi!05LtuFz?n@vGMxQdhUrRyyEM%g7OJoz0m{nP;5?3PfayT1o_;{DmGjjqFCJa`Od)WJOG#bi{uRZ zg74pub;CEl!fLL;i9>Shk^qM#=*p^H>jd>ts6XA*8NxqxKfAUZ9cE^WX9HcoNQ6Ay zXMrQq1W4o%YHv8LQSvaY#TD4#BLmSA>4giVo?wWDq?)jaLHnvF%d2EGNP|EZusWVy zdv$HRJA4(C5-U9?oFY<0cx%)=z4e@>Mzd#zG=VU+xoW=Xq}PGX)N8f+>}6mmBjn)Bz|Ih6}(Mb|AK`wn+tSWt<%YDvY0%* z#^>x=^b~`-P_GaMf+T3Ad5h=pL zp5FR<-nZRqHsiOstDy)n7{m{6kC8Rd>n|mz+U{r)UZ}%^QMoR!OczWE$o;^FHoEl+bBfQ7y9OddlhM!Lj z=P?ZjMw`ET`1GmT?U~GOn)s>d>FKHEqeqvgCYO&KIdjc5XMX5I=MfZo<9vEpMfPtl zADE6Gj-MWH{}DoUu9x2KhEC`GpWfVDSa60%ww@@G)o1SV%jf5>INmCbmRfJWd}?ay z%;Zfl^>@7eh8ytJsnzbdW52HQvAPfVu`syY2{^Kw@w#{t?dpH_eaH6?mXnt8k;vVQ z;5Jr0>!r;S+uF6SCHHw4Hj7whv_o=94_^(=)4IImG+a^l_1KFnKjok4T6y* z<{ivGB*XS+0>q`Cz`G6Ix>Jogfh?q7q?vUDV~~!%Z&*wL=Z#&(;A(A)Nwc^FY&r9O z(12;mH0c|uSem`m=krdAe+$ltlSa{I_{}3(nKxc)aru#y(6x63Okf0gYc}G9D4(g^ zASo{EstICrxc#P^ZW81bJrULQb2_PJA+)wu`xg&N@JnEOb^#bDy%Jj7=iI}s!8=z> zfmB`jl#lpN!*Lk0lEDe^TCerJ5$gYh?=#T-uJ}z>X<_HpH_xNnr&B_3Y2xcN*F~CWyQSf|k`paU(GNLgGHRvPHb6rWX2IPh;x}uV; z*0G~9i%6Km61h`$1jd^AR@xbJ(yzoM8JB~~yDmlIx9;`N3-N_zHKT;-&RmulHgN+2 zBW5lWBNIbOoQ2UhoskzPy3kk?fA(l#W^C|zLDubX2)Amh{>c9v{v^Q?X2VKV>XKx# zie2cxpreLW3H1?fnoa)~E=Jb>u7}jtj!AUjIhmdbweiTrv`ZMA^`(?kCs)tTBkA-gF4p*q*&uEL@+kMfHNI=0 zFD$=WAhp`6xd$S;<~ZD@*MVp_gzaYlSUO?nKh17C*SkVM7mbTmB#A#|q80L;CU~p@ zsOMZZNi5fP=LIkfyzwacoH27xOa(Tg=ceR|ek|hFr5fKiLzoH@GB@g{4z=3O8x||& zYZNL1ejHa9Hn8HtBIePp=ku*tY!g*r zuY2rAFaaddPgotr)A)WW_UkLqA9?Kc&>KfYZHRfZXLuD}PFf1dud-dRny9HfSXm+MyRgg;m^s#A*|Z}2Th2?;?*pwop_EY3D})e%~Os! zy-3s##)_Lr*2cy2gVPL<#~F-ebx&yA839#S^as%M%G0VnUw~b_ZHRu`4FvtPc*ap4 zl}xs)sMs+%k6JGH+8g|Y$DIsdhY+$b59lB25F2kWe)zIL;$ksP?z)Xd< zzRXA4_Kz7oIyq&GH3nBo3Xk{P{oAg^*O$=m^Ez3oJbSM^45)`bWd^l2785X=`g=Zc|AK1Z4ql(z_NIQe+8)a}Jw4P=zDgw@^zw{LzA!M)h z=Dv5oYSYuRkjq^aWX^#@mo!C`$sBRdl3{F)PAEkrl3W?GluQv}IvTa{-a~y>q}dnT zu)HMUtJCqvqRIk+o<9~e?ba_7peUAZ6P_(H_88Qdd(qF>Yy;=!lBFqyN9@U*| zKC@UVO##D}q>usRiV&TOB$cKD;Q^2d4GPnNPfa`l#D~1=!I&Hlu#e=C1bG+ot3~RK z@$u0&0C7V@42!YbHW>1a+KB8h&BTJeG+V{7JsR=WJ7Hrn68F_=UHp#gF+Y*1}gx5u{q`#sxDB0bG!V)a8NQdAf z!@o;XCBk0lujmil?%*$B$0-x>voEp*g@^ADW3hnYN>4!>W})a9rTg~b3p>|vX^_Sg zBh04jwQG;7ERIgRvfN(~esZdZuzB{<9>wbp_>+=!oI1G7F_sBk-!BYq?6GN!-#!8t zRMN|f*P&qRR-p9Z;(Tme0A{03txczyJO{zYut>lEPp4&gFX^w2F!4 zRRW0ZyJ}Kg6q3^E%!^&P#QpGTLKzWi!1Ialt3B{Ls9a+moHATsgTb=O^Y z_JyZIc&Z++Weg2mmKTNudvP( z70E%XuGU*|%zsJ%HaT7WxxPQkS|Jv8S)~g6JRq6d#ZQS)Mga#1xO+G3= z)#azn3o-xo{#zHTD3;N#`OrOEzYSGMynT4xYXQu9eg}U78}l9;yJA8p+JVJbytt}_ zvw?mrH@L=#*Nzq-M26jG=%RXKY572v>CN@4f-db7T zH$A;?ePwjqOdUABXK``Q@dH!S?RI-{Wn*S$V`Z`30XVGty3J-EMV`llEx$o2h&iumhjhWe0xj9xU z8-ELjE2rIAF>e5e@DlJA)> zF=jt&ZO3^Vb7c~&@tW@deg!A&s&t;HKKFrrdObb{@AiGg_s70J1!?&m-#=mCfiGrN zYLjJmfpzJCxy+m}*Bf|WDWvdqD0x4FJuM8+b~0vfaBy&mpV^BBYv4FG_!0T$;In_8 zeQsd!9$doppg64>m65xf)zrL)l@qh5O)X0FvNf-=Z~Y?}1HBL{mzYT{m0BPf^$3B3 zM+Uvp<*Y}oltNkxyo}$jX4umazgmO1U&{2tH3|)|^8)gNqjr7oXHe+ipxpmC_w1J& zoRd~~aN-VlvOtqb(hM|ykp-X`e3A(kY`o4M`F(rj7zDi$c%ilfU!g*+c_vuf{&`fp zw{Gv=s@=C~ck6w^Xdlz&G1RZ^*e?x9W6$%`>MaNpSj77U+c=3aFpEpMk2eM(cGLK7 z79#dAIv{{OnPloUD$rb~zgxeozy1IGr}f|Zt>5~hd3fuG2LIoo?V`RXtKu2M=&y>Iis`o$P`B+$pwxiqD_0e3v4D4HCMB< z`?K{&?Y{?&{(I!Y>g~L0#oUL=fHeRh2MaDBHRNeH=K|<07_qECiNp+M4I{P8we4SN zPq)l9Tlbou+Pe4l+xh!?*1+q~R)5D#Z*07=6>U8k`x*XTA3NN7vi&PmpO%fG--PxC zd_MD!<^mSa6(Pqoj-@g16g?Vvk{UA%MG1x(2J1jJ*Rsa=lsUkK{TV=ubjT7h^9}OT z5RCIP7>@3R1+SRjs5t)e)+cK61;f>hU;ci@`xzcI7r1<40xOeK-uiV#^DrmM&enfI zg;1|yASQ=Wtq%Em?mieX)<0z5*Fh^}lO0O41Nv$uI?W`n)~d5bq`NvlcoQma7e6f@@ z9vs9Q8CEM}SGdmaUcHY9)&<5&0Jah2htuorUumHXLSo9dbLfDS7NMjjMUMx>3>7G! zz$j)^A~oc5`F^_%44}Vqh57Wt{MkOyB9jS)S4bpt2gYfwTCHE}j8#X7!jvbbSG^T> zGwI1{xmcZ?n(h!e53R9(YGh=Vs0$Qdug}iTpP0c>PICbLs?|N!;F(@WgLtd4C&abqDw?swV_7Of)($zRkWpB z@NUPv{_wd2OH1%k_2#P<_lTux5M*KWJX<44;*mKPehy+tiv}y@UKPO~gHgcsD;=%5brWae#?sP(eajCt zN4(A1iHXszUpAFM_NY7CKef^~tE(qY^;ev?BG_W>L_on>8cQZekO7hmGN^DkNR|!8 z7aFNtK9h!dj*N`t2s7b0C<2P;xHLrvdcF(rL383yMQyBH#xe*mY|V~4zY?dkif;e< zk?4@7%mpk1*W7Xqrk%?Yr|-VuhPzKEk1i}cg&ufy#60oTQ!if_UHI~s`SbFvFLUXp z?PFh*=_>#Do+4)sV6bX^b)tF;P7AUjg`z!VJ97}=Z+OtohfkbDT630{PoD68Pnc0C zH{5%-iqfxA?fwhcc8I;EUL*-@e0k;M$rat={lb!2YYIB%>jL- zkL4HM#!?y`(|kbZrfH=zB?b(R61qrxU1`#|OaFB(;bhjNOwjy9C$Xvms3PaYLD{G9 zWP;<^0|*bwj=r!M^f2(c9FUARm+j?jmv|HG6>By~PRM1B4~x=3;Ze&T!rH!*oQiry zAR_4CtjRMXu(rRxI8~t-wl! zL#l4G5AU(TIOQ$mRkW&`sSNcUP${++XbruJ#&j>w9MUPTz@lJ|c4wf~%ws*`{cV|6 z2dRdn)B=R=e^d4*@RFTnoqxUO)H$d2z3SAyFLz(+E_LtizPE4hYm)9Hbat{5AS3~k z5DII(5!_w)ed6vp>IwDIli;jTPs-EO^IYI}e&>a#${d)pASnP!XrcUId05OceAENFAjGk=4cnq6{9~?WO&4>=iLzMC$ z3I)#sLaqOv6h=jkPW=eW-^S{1;ATyjb}9|8%=*C^H{wusGZ>Fkv_r&2r$vy)e7D<( zT3HCOfTM)+ZW?|Hjpm4cJdxr=@EcQWYkf>ESO4gbuIwe28s5A)2(9c{pT~R|FlYw> zj~n-JL2)936_(p@I`4kYU!e3w?8w^iYk(AqWiyJ2817?-e=jG6LtW5GL=2Dk0pa~` z3>v9d3#cxkuS)$q$Xi%S!y&2HM9xKwIuQiVL>HEKCrcLa6?t*Bep5hyUi2u)0AekBhskg2MTkL0rThE#gYWr5zv{T$MV#;bDik2-E5mTWX)Q@Z^c<-N;gAGJNp4KL zT#hG7Wk{qTS<;Vj@I_5Ko&G9)4_qn=$x%5tL6N*$O4TdJ&yL2X+)~2+N=yR zKk;9dkbu%v;xD)N3_nSAkXVqSBZPmUcZHr7OEkJq&`wYZ zBwkD=)ZgL#$2E?Gz_<-K2WdrHZWQ-EQr;91=Qcxvyi-A(@?@{C8&9Z@>bU)5a2TDr zB4ktt7(xHCJxxM{1&cB)jH0D<@~1{g9l$#n_E{i^rUJoo6_65T z#Nx$bvo+bRZFJhnB)k<%7CE$1=RHNufg@lty&iP?kG-V4!KIGqGL}FoCMH%MA*W(H z99elFte07TdIVgF^{c6|6~vWC3vsLq-~xN^beicA>=Dt1*y?@}YRx;j(|y_*<=M(S zRnBg`aO2*+rnz_TjpOgzRjE8ViE=}*o22JfiFuI4zcvytBnb;IN9C+?_7e0yP@0s)&C&9g=?Lo~{VJfvWlaQ71G-uvsh+iBg@3xD$xT-7gt? z^Dt1wkRGdCDd(X|n^A=JXByqEbaSQL?Nz&|jYhN4`vtRAHCm*<7Yke81*+|rh|D&b zz**IjdQiXka_*%!B;!(uIaWr;!?L&-OIkskXl;rEt3Wx8IMM?EzkFi_P>OuTQ0I2+ zqvL*0kwGFokEHq%GP);}Ai#hLy~IP2*)P2 zuTSZoqUut;@=ny&fIinV~;@z_}LZp zhTVsg!w>%~S}wIA(GeWnUx}2fTwo4!X+ zYSi?5rR0W*2Ztnd3(3$_FZvcUB2BjbzExEdogYBq;+=Uo%GaL>8^3- z{$DzmtV{!)I+Y7n;aSymv1n4%H$Rto-(?$Xq*&H7#i9Xx0UIAbwkA3Ks?l6qJ9J=e zt=UqlUSC@~dUgX3{@U7&*HII~+_U%0|76xsW^5*fu)*XNUvE6VI88-P=<2R5Ah=O} zYP99cz(2389XztO)~Ew#K3F?(WKAMjhMVU4#w)Jgvj;cu`gOMum@RszFG^g^gGBNz zde&j>0YvMRZ^5z?jea1VJ6gPa(=z~Ly!x4EW{c@_=a#Q1d{BNCu2?>IE?t~`=9#ba z>u$Cd*t&E@@kj2y`|ej4Ps!E-TRFE$4Zr8qKfo8n#&D(2Hxj5{nm&u3t38*yFHNpz zFxnv3D%ZSo59B!03yo3O#O~$AxASV{BUfBeTFGB|@=hFiqaRnCeB0ap1vsL2%Z}}Q z_=+ovD}^gh8nUDQk-y^P+uyG5NnLza?Nb-9)t}M+3~yYyT$tv?j3#g#FC}6P2vgEy zOxr~myqYVG6gFFQqcJ~}5iL!zvY|I=8#q6;m7JtO;5V|TNE{`Ww>EbQ`JU+6V5ms_ zjzS?@Kz2m3&M2zD&lC$8QmT;T3g0x^oxz~fHpbrvBxq(FkR#s@a6}_}ipU0#tvIfC zf?&7^)}w7l<56N3{8k*VKe|EGh=bLH%QOC^L5KLC4hL_`cYDCGIC5D&%VJ#}*_I;Y zs4YoVv$Pj`#GDf)irMqhbW3zCuNRn!?yB^|NWwu|^LkkKuN0@W(fMS;uD+;;N2Uz? z^gVlNu!CgZ^be5w|^I+diI=cCNm5o zo20Dxdy%qiqJ5%J<#2Ra)tXu6Vkf%?5g|^RuJINJREu-!alGeslM3i9YM6c5;f z$4}O9vP)~UL?WjbA>W1f*tD0^tTL1JoOcH7$-vP2jE^yDDQ&dgg9tP}vs?+6tck9i zc)W`~%w-4Zak|0cz-v5e%F*N+#fvG|;Ymz#ewFTayGL)_%~*CXe+cUg$|&8dOo}C$ z&K-{9h_To2>8Kqy--nFFu-tRGD!s2@VH; zr9LzkXoHM=LmluA?5KnK&<5wd{J{4;{q)lhJ>Am#j*deO-1{DS=%J?{`oo=m=0FF>{h@i!1!SHJzJ#w1?>U0p z11k{{07rE+FSbOpKr9~7o`F1hAwwQyfRKvC5!Sja%N8LwKGnFN;JHpVbLuuA4b**U zWAX!OuNcRD-|Y&3_z2`~0=CP&{Fj&A%)6-&sY@gqm>JWy@# z>C7%2rDaq7@)xj!%|1FS&faEgSI@+?J3MlO*EV)7!{E^%bEm2Z#%7gm~LV$f~7cVyW)rL}fA0K8wvQoY^NjSrJO`c&&kYJFZ_P$Eo$j{MHbX|Q((VdPe6>)fHqI_B zTh>y!+nF8A9J<}M53H_GIKd+%>h^;(gS+d*6iwrzDowLgUjYgtwW2Yq`htcJ# zn})yH7z_@2ooMc@4j;tPol7pv@83VakOYk^y>#Hf{sVoP10q*`jz|2Pc z+YezlnwrFP^ySYaaQssj5)-YRDOXymp3dj9YtiVmxwL#;xl)OryrVKP(O!T?2V5}c zL4Q6ngOR_m)aZ1YpX=4?*@7}!t&{gnc`+eV&w_Br*ofy7m@R?Ki0SA1JhbmTln>Mx z?n!P_{>4z%r4XxlWyJHL9TAu{BnDK|MCmiFT1$^fFAm^{p3#N9kl6us3dUm9(^5hv z6x+xqYK9c>`uQ7gys@5r3}C0irQXV#bfLdC z*bBQz)|V?e$~}e(k#gzyaiWp25~IyjU$;(?8r@bu^E!0zBlzv^1?m0Ae80_ojl4cQ zCAm8*v{N%}HaU${ooV@zywCdTCKXQm}PKX4b>h@m#U&?;T5zn6xb& zsAVEq&4Fap&|RJwrKg7cWTT8UHesA)4-~lNtPDNbOFQZypNK9r@R(2+B55OdaMA9o zpO$jAYCjoA@Xd8e~N$aio;95b10sg$KYHgG{RGgz*AgFzR~0BomJ#0dSZn8*$5 zd9}KKKMq#vfUU0f`^9azsk1UUQ7%!v+D|I*!YZY}%s*Z~dSqig4cw55@87=mnxlTA z)}N8=D}XG_82%#8BOE-LG9AZCQSluAlLWr97%^T$O>)9;j6k$>OOMC{U{fX+agX>V zc0L-NfWzftnasS~a4oyuTjhqi)S!)n#SDIq@DMEN_~;+S2{b)(;^4$YDCD|(xKvCn zY0+*8(BRhW88C>baQmrMzn=(PfLVgq_m|W`N!GrX`=!z7Vu^3JoMg%-dz%YH%0hJJ zstKosUI-q>XPFNRzHN}igbg|ob5nu8^*lcF^Vt1;USM7e z)GyJ;EWW{af9-2u`@#Fw;)mY&q`L6hR}6=;kMH8Q)ECwFz=MPX*`D*5&TKlK{3U(w zJsX)UEIaCgdBaWndS&41;<1!f&BkN3Vkx~G$)r+Uien=cG;TQzTE+ec-gLZDIMyQ) zm2$6TDu7t0-c>5^o5?qTq`B8LuJ>r9j(Z6R{>2VbnLtO&1l0lTi!K5rz+;=hp4_~> z{h96kmjVlhpSywAXU?AejOIsP42=yxy4m-gJIAv;2e5cJB(+qcJy<5qRO0X@nGkq+ zL^KhXM1N)IxpLDEz)1p3$5szNmv+*dqdf&I(=*(8S1KFj-<5y4;(veR;emr;Yu=B4|49JFLej?p1T-n0ru zBk+2&lRZYpXQ%;A&)1qrcaXC` z&TW&aV@uG0>&23JR_UGTBnf|b|2>W@%es}0wqpXx&f*WtX&Q`#D3el-rz!7>BNI=X znY1v20rZXJ##k<8v{%waDPaU}^6%Yy!wq})`XybK(qP5(%2C|Z4NBjDp3KYruN0#L z*&)&NQ=C2dm+T`BPk)nQb$gYKtGQ(xAx)37A%L2~;gp$5=KYO?9FDs5K`Ajv2ExH$ zD(T8e6Agbe@8YM8$TXDta1SwCvl-}JPtto9bp4B1G}|+9&mNU(Hp+4F_{JHYp0Dr% zJpJ?Jx9y`ZeQ7;Akej)4Awxu3XzY9)Ro&DQ5VAH-n?+ccM7fWoIYy4`u_(c@vVcIK zcb2Kv=MXZ{1geD{-@NbGwd)(CHG*+BAOMlPWn+2y%Jn6;TE#4sFjCp}O?x(o(Ce+Q z&G{#YOH)@u7gG88t#YxK%bD@)-27mE8m9|!Z$H{4M!MPO)oB566b|6Sq3tFRXQk;f zHDiXKpPibhq>miCWkNVgLnUTsS7yq%93#ngXR20~Xt1oXGe_GzBzEmN;&eWPziO6f z=@D9x9w0K&^rX6sQ0uWY;8y7c*TD+n4LMnzb2a(*M1zqCB+2g= z?AH8`uML`?z0f5&V(Rqv)D%#bQ`;w|_tfU*);9Z#)k>wh*x%d>Ozbz62Fshd{r!h0 zu>tPZw%eWU`|gO~4m@lcQ&ao&VYZqJ#iHI>9|reSWm(HW0qCsYIt9puF8VN}bsz;< zh?Uk|wISc>SRKi&7&uTep$m?>3$%boZ@czuU;CQ-!E0_9{+^l`{@&a_4k2G(d)q($ z79k&ByY_=W)xGVV@B8d$Kl@)R8>avQcy3*fIjOn)m*@%a_Wg+XafP;z)1bAAH;$AQ zb#JtcJR|U?lH@Ei6mOn{OKI}XH(OR@c8bLaB?IrRJR||{7$0}{vZqGsATP~|WiO$U z-Bu?fy9jZFtoE}c2JHUrX4U^h*YK-08S7TZU-owdW?rMe1c(h`2;qWvaO+^?B=;1T zF2aVp$Z=seJ z(GfxG4F)x{yhhK|E$jDhYfFYs`?lX_I9c0%|F-uDQ50TiyaSwZu&0UNWrk{QDB*uH zRwa>!j?;RW7}`9ixO{qVt<~r~7_iduKqyGp^JdADZJ6rlbkfZ->2)1!wu(K36Z>yK zM`v^<%wAAU zn*@BsU25tWjZ_LWwHC%MV^xZQUaC`>V9sL&AH_^~3{))JqX~aWI@2A&{FXO8Cfvf4 z@P*~dMsEsLQf6(v*dvtb_g5ArQd-Cdq6S9lM z*ZN+Cox4Qt%YNSpv=-)&@O=qn6kE5%evU|$X5gCBOZi`EBsq4%)yeClxin-4$wH7z z&wjOm|0LYq?1t^efp)NcK%FG={rK^-A^q{dr+K~V1G%63x!ean{j)#&>3v&UTixa5 z?&vepXmD)?WAAr~dHfl!?+VeWg!k(BZlRGPUub6P zHsh2GTj|vs)iM@#EBULHrBmqNST_uHEZ=KqGMz#Q1rf=QwCSQc!}rLuj*Wz37&$rq z<#N~91EhuYy*vX=W%=foRfnWhAlZ3MtDkanQqOb8A0yH5Z6`{% z+)_GW{JU#ZRwuFk0iV-nAGv#gY)&v+b}+d6RqN~E2$*YwAHM$j>)-kGarP)4|MuBL{<%@`{KXA5o@4dCN<`3O5DO^{-p2b=F)Nh@w z-+OQU?5{uh>Q}S!uKtH)(_KDw@gFY!hT*7RAp1!B2r!HzOUbjgAxbh@HNg>$mEVve zI!EMEaml$z45AlH>Z-i;)aqfFQ|gFR5`g3~hv$EJ9s;SO8ZF}p1zeiyo|QUBv+FDO zsAf1C|2rt?r_n*7r}#UbcmkgXirpEyl$`vlK53{U(fJaGcw z_CB9PQE5MemI6e$X|~Y8H1*@+2VzYeDdUc0^b3v6imWXUT?eKN1P)5CR$qqLSF4NF zQYj$?7ZasYb)i;;0d!NzO%WhBld10TXUGkm`v2w@`%@Fk%hT`wD6h9S+ij8=qtU!z zFc%B$cJtuD10#v>z`<)aHqN?~;s^xmg=R32KD$9swoha0dwN6xKlv6JDOdWg^W6rb zD||tspqXnFX}x5^X$Xu|R&t<(q>WXA-8m~#4ONrI?07-O4>ZRe|K8cqd(j4UAsR^y z-=7l9vb4H~Zvef5uixCfpD;~i!Fwz<{3ifOkB3)RS0CQ~oiFmbmU#1rSFgSEPW8s& z`_(m;d}D`RUOquW#CtC7IU7 z6)~`&MQD`(ZGGfAH2hFJR$2e;u~d%7 z#JWA%>?zA#IRIhPuzOkZ47Ymr%6ie3WZ3iOTMGz-e^w^IEyT1D4~fD-{I2n)UjrT36AYzw05m2Y=0Usw^a@!n z8C>s@D)RvI~Xh!7y7lT7(Mp_T@k9*ucmCh zx!Rgvm|tj3f)$r`@54Zr&Xee9McR!9;HV&Hl-&9RJ*g(II+mZFnfT6fWiM!m>e!>} z0}{#BHx?GNp>AhoV{+06xmjY#Nu@fr*^zjV&iv|NHo~*3M8cMx#I_yHC4>2VGaM{s zb5ttEOt-Mm+cjqkU`4!*KJq5vOQ7^9&n_+A1dT_cN8TtJWw46;i7&1v#7NkUguaS- zc$q1ydlxyLpR%*pXC4%dz@*9=&rOCn^pb!*!%sI1Rjn>((hhNAT|x}f=~|7j1Y4zw z;E)*LMH!UlQ4Wa)xLBL>3(cp%k_wp$TSkt$w-L&_fqO~i57O0N8nb8kjqdDRy2Q<4L2{L#O-z^9PZD?OMw40+gH!ww@j0jTW&Tht=3P_uS6Ch;#=WpD#rP+DW?n7 zDngGD6W&K`Y5tW35 zOagpQ8<~q-18O@^71nNoXM-u-iX}^MaEwqn(nccDQc^qvPB4-LwAv4g;v7yO>G%_V zi|mgu(^6yuuA0O*E1R2~%w;X0xV5>MEp`y@7_w;YBm=A^6Jh|r2%d?0j?q*Ja8)i` zsy9)@B1KM_N>au;9Z7_7(PvjT-~)jf8q#R! z2(BbjN^S{h4%+Cs*-R+#XkdFulQ`IAsOxCfv8lXe>+!ZT8Ft2*Hx5Pk)uWT~)t3sH z@*a)MT$ZtSY23-^^QHumW zBR;UsNahGClu!bCA{^%SBII$&z3MKo1L0_rb9dtet3{n~yh~njl1yvKLei~ph~b^1 zc@W4p;CIl&m=ItE(t_2NiWh1Ta(~FY2~ubwPf`-Is9(!JWRehZLJ)4Yl46S}VU z&rKhjU%h_M9*Q*Xxn922M#!POBwED$BtEKi9prnXSUkqro#Cgd1WL1MqSK$BUr-+l zZIs6Q$@jIJ(RlwL8i?Um5zM01$}0-fQ+>%49)5SB)#}Nn)ZEdd$dOnJEab}1Y1!xj z-@hZD{wSZ^!-I?L~hVr*bZvuFj^SOPgVP`;bzHw(aod zQZzMNO;g{E(G>RQa;eH}GTN6G2c?A--t0${vz1g%TKvAelE3M_p4Bg@P$PwI#^1mH zh~8^!bX<3Q+|ijMmYn(U{?VC7$JJ-v-J*68i|9q)xpRvD&>MOE`NI$Y`Ku^}@pbuI z5=0jPVHtmGy82(#=doec@b6xYK7|G^_6iw0c+Kbvv9Jj>6f^4TV8Hef;i83Jx8mW< zNj#Xln3lelngdJpc9&@MoO2Vlap##T!#|UmiF9@BMWOdU4jw!>UG6}QBJsv-o0v?z zK$BbjyU%?sgxz?-*;4AEG}vm@-zs72Ns}Pm`7Me9tF8@CwAxrL0%$$59NQs}r`xm)ImShU%_!kc0kzf($cfa|q4=P8J;e^a0P+^{NFx&AI zYuSNA2+hyB%L9*#uu{sLp)Yk;^od2%T^+0dl_3x0UtC5}5Y{Ib#^FXfne4IqpGT;n zeL0+*5x$88C1?E#OaQ)3>cj#$l$lNkKN6M5DMErpp0q*O!SDX{5<3C53fSKIF$DqPReR0Le94xFSC_xqKY^p-rqri{w_h#(-RBFo72} zl`=#5{LFlveBQ-Sw3y9US$v1DA=<~W15%6ae5Kce?`DH_LCV6;H2w#7MS`cW)|3bV z%S%{$vD2wk4C0dI4kKoCPG`EXovaKmB58(y*3R?Cx9 zQyShB3^gMhjr1?dUDZJ%&eTUsCO=0o63^44i(eeZ?_$P_wvz3r3_I>Vs=<)HL{g)UTYD+wJq&`(7A3dx!*{CN;uXDGAS2`E z@H~~?^S1S#_gHow2Y|wcdO>}Pa}g~j0T7-gk#GvwkQ`nN-{Wtw^oj|5{K-VkasdNz zHOpFYTL{Aw&NNW>Qw&H|dk8JJ$M2munf>mY-&UHcXRF!d0Ys)Nksa`c&XtUUv!N`p z^koV}0;&D4*(!G5w>Z;#S0nzaa`eh0tEArzn2Gty70pyTd18hxLT7Zaqe)y(2fFVQ z@1%5*Hcn_a_?U9#AReQ^(qp8EaYOjEN6H|NScR#G=BQsJy%SX-S;;iW9^SKY)s-8h zQBkUGeJ}mmnMh}FV?RNi+tz$8LUIg||MArQrg{Gx%;YBVaExJqj23TPkvz858xAfm zfSO6&E1CFU2ye(UFtXUMQ)$;yA9_lur}pu9E#Y9sraDJ{RE>MN$M-II=At?Z5rwkK z<>!zZ^g8HbItT7_b|tgOm5ZqWn}WWpzL(b_tz90Bo*mlYHzJd0xpF+@ay@hC1>WG_ zY4Q!9M0n67S5C!SG>h945X7j96#?>6s(?=5j~-O}->Ysx0Q6(onijg#C7Q_11*j*3 z8^^L^X$c)8GBqA^Q1=iiO&iN#a00Ow;DJxLQ4W*XuMQH1YsD)B>7b0&7^V&)Zn4?z z_Lq9V1>rOZMEBi&^VaZL5nI)VRU%f%14;*XZV#5bT|x{T{D_EE-@@??q z!@$V{Bf*oWbdA)%A;}CgP6(hXKi2ysVv8%~Nhv)>X`EysoCrB-s==ank_IN3Qd0aT zf?}x1jEl#LrFcoILVUKjy$^Xoago>-uLWn7dZ_BUvuE$8=sNX{sMmvdhZ})P5r+<~YP*074of(c ze|OZpP7y?FE0bJgUVQqA*FX>H&)zVJk<7AkcR66KRicq zn6sOmsaCKdlT%aWEA;P?g@ctqs1T=$donQ*aH!Nwv-k9psp(L}M^uvZ&#$N-XQ>BA zzJ^HKCw!muJvWYeK*AFDqqvMk@bX;B-ZIsYnLw_1Vs$7sKXODANpu14R!amnnNajI zJu5!lMX#-Nqeo#SsS$CQC`rASrqG;1?=)hivQ;zEMbCkl#q!4S7hs4D=5seo3OL7O znR&hlCRP$xLW3Gv23(9M?d)w5wp$&p(`*Z+D>G;70}(zhvDC7 z$~uxpd3w^P3~)H3Q74cdRYO*hN3|AV?g88~d@I0X{-Szh_*Ou+F-59J(&Tmohi`rB zV~-u*zkmN@x7>2mO^*>r?X-?R_Sj>XX26ZfETkNP-ZmZ}qzj&uX5Z`k9%jJ~38iz!Z{SrSqwLuZc%*>`S z%3Ap0NSziY$PUt29s!#$7c9Xpy>*_bh@pzZIqLS|P#MGF1inSEmnQ&LlyJ;aak8I7 zdXj0h@C`@Kl*_r|Dey;=-n!gGuk)3lC5bZF+IKY~HhtWr zH_?%63d*^)yyx|Eg=_$^OX{u}bqaykn%?qBZwgpBTcuxRt?o~CVQb&Mtt0buHXgR> zbzA$k_U-&QZB5T?ZUX6L%}j3sV`-@KQdTRxxOjA`+pAm`;MdNNKilkf4Qq;q@;yC; zkrWrf$j(#ttrOdJ1985uyPVVLIp$p>PnS2g9g$(=Uq;L2Vyi@lYRwJN3Em=VoB#@n zDkth&PYj1U+w}rgre=poLta~bnmVl;WOTKICj zFY4UxtQjv@sy9XrKUOAxq=$H+D5-0ljt0VU z`M1-KQ!iE{^#)h@fgJsp|A)N5KIjkAd1O2Qhr7ASh2HikH9-e-@^-(oKBV0_82h4tKjoN75*je zQW8BQpR0$!5Y&i9vEhYXyVoz@$2-nO+!4j}@L@b=s$PFu1)_p>%>CtwL-`nXsQtQT zjZea08Q@rv#iAq^OSF@oHceTA{Rv59I|N$uE|~=K=H|$q;Ttoz^aBlgGE-!u=}kx` zChnIJy_BVv`VVAJ;o1Y#dNQHNuq9NrINK}tn)9com%v*=F*%e>8>rR|$~G9`je9^| zQTs_=6kBF){Qb;ii3G0P1aigXPuTZ=2)KgDoq;_fMEk>P# zpQG$bJQ3RjARDaTG?0h!*a2``VjtXnR5|+aDXh%I680tr2PY@#jftetLG$A9;$In$ zs3(YkyuEIq|@IDc(Mn)gLTg%hGF_m@s|_lN(bO-Nn*p`i&eXlH7uX zK#V)sMKc!Crp;5D270lfqu&xCis>G6)6Nbo?HpbmSPI}xZ#1U+!Y%RInkZgmo;kM| zpx7kTc@#&-PbuuO*n|Bh8P^lFDuNH821Vdz9jOKzv>MHs`A*yaBPNKJL|&E4e$XDB z^+2JBiQH;pNhK74C^Y}f?A|@Ib0~OWu*yvsNyYC3zsTf1fThK1)TbA_T~msflM+DC z0AQMq(Iilc7??LhB}i7muteO0ZMHiL3!Sz}^n-|(QEPg7eb4+n@fOT=i6@dm9>EhL z*+T;uPog~|DPoe3iqeLtN#Gn+h*CIl<=F|(e;%$YwZE>#yYpe+)4tz8E@?DgCNjY4 zju;Tn!;?#3ICQS)kAiBdABKKz-qN_!VSb)xNS>QSk;-Oqz9W8X_%`${$%4ztv-22{ zJbrI?cSW?LQQKA67b=-Ne!W?nH|T9p-1L|ju_w78nyEh??oq!s+#~K4JE?vRJs$~s z_?29t7{*&450I;dp1!qDCq0^BQ_vq_6}Y3Fxw-j(5e{W59k2_DvQRZl2c|K6BaUZ= z1p~wQ_5Xxo%u59=z#Bz(otl}B2Mbn;xUdQF@r$cEu9g#(YTV7o@`Y4f*~71k(E;j} z<|>FIA?2~A&U1akx9ICksYkfZXMuh!M5zf3r;0|cS`kyiB;l~JS{*D;R*QmX*@&nM zZaN)`qE4AkBJxKt6uExnUunU2KwUfhL)9AoAwGLQc~78yXEKMD7D2l-{n?{BIw7w9 ztfeabC9ogde61d9*`()T{$aonq*+K}e=vy8ma+0~@+_y3ZEP6{JCBIYb~>X~y%Dh+ zDOAh7^AnR(M81W4<8O8A#>o>Kod}-qRScC|r#83RZKZy9P$x(Vqm${Y;NU38fS_C7};djuiv7!7Md#?M+!;W2D zZIg*ep6oPf$gtmvSw*Vq)Ls)Re#cy$nA`{Y6kzVRVT& z_Ku%t?j9jdd&G^Qkz&c=t*4GKA?<|q$S~Wy9+E!M#)#4M6Z0dc2c{g+lQOZO&-wtX zgTJ0%Se$_1FuL$LOij*AB9_he`;!w%7t>n+tnt;(^iBBsL$fxa&}wD6l|m*`(=?#5az0E5Hi+JM&ztW!baN-!2oZi4VN z{P#J75@Xc5#>y86Q(6*_(M4)Co>NznH!|yc#P`F#^S+<*{Tzmb0@dsBS_|)X;LgIi zFMWHzJOu>*5N%*VY_?EEyjC)D$Ag;AgSd!4X_Y1U-hC|Z*s|8uTP|%ERYte$aRM1v zy!G>-2?^ScwyL?D+jiW6KJ%bAx&S$-cfj$d18#~uExClul5AadcWz+kf_ivXTz+{c z9%zY6ZbU9aucPuFZ$`Nzxiq}JGs!LSxIH_GEB!%h;~cVM%V_c6G`A!3^?WT_zvZhi zxM(>#{Cn)C{xZnNv9y%$G*Zc0L85`o9#&Y>+;6sxw$b4|aO=UGdD6^>HvAKTx6hCg z2b45X!dUbYsc^|$Gs-3?WJVT}9LVI}g$*k1ejI8#5vZ@{YoSutu1Ioug&06MTrU^% z*Kq|+TNNvTtE(fI0iDJ#G!gd~y7oHog$U}{SW@PF0qiY7yJ_xIHL4ys5yWv7{7teA z1Bu@e#-1|DM#d=mzvDsUVdL~Q_B$EjZ#LeXz`oX16%Zm2{}W{hC0YnpDXI(+#a!~2 z4ZWk8eWUUEvqsq}8#kMAA{>vfJ0XCfP$Y^_hE`Y&B&{;RhDWL4l@2s!yWQ@DaS{&4 zncrgE{TgH60b^1{5^&k?#<9h9xX$N!KZ;Z5xd1tDXCqM zMYgyO4_^kpj4ugL5!ZqwhwX55#thTJ^~^t72#}wbJHgpUs4ydngM00j51A&Mj0djU zmtgSyqIl_-4`c%IWH@*gLkUxE0Pv8Ht*orbrb@T( ze&Xfw7KVR?A;&-Fl&u%3k1b0wwk)BP2bIEKhf@>7Xq`oYT zv3`LhJ$z9C_2GwOPB>8rq?@bsqk5o~q{n#CiBD2NGDaf06YEwx`CK{`umg<&B8&)> z!HYxRb+Gk{qe~EpB6?*${9XixV z4k|?f?Lm$}EX_B2`uQ!d$Q2Rx;2oYz5(8#7BljRqHW6C&U93z2oMRH%(zOHKIhJ}@ z7pl{S5;#?Z#6#1)5=ww^BH$!)ArTf3J<$QpR3sCY6w2FP&oEh@QWtID^d`Ke9poIu+c_Qv$g)py=^?@d?Tytcl! z{9w6!ERp`21DX8?PAB5u82+(4IXTzNrz7>v>50|KQd9XmD}m6_`%}3ylarHFvOfRT zaDW^^-^G7qPQ23>@zs%5j&OgtldQ!KCJ#P^>vC7(Sim;o-K{Qi(wXY;OH~g+x~i6CY50?1q}?BnY)3a2617CCdRN8z4u91MCR0(vPC0K1P#ti1 z@gnw%cVP9t()R)1pQAES_hpci9*2Bj;t}V$^tyz+i(m}Z(w;!z$RR#GKF7fpB5(6# zGywuQv@6@84Y>hjP2jZbtik7&NED|JgzyM4@gD5XFI=_DvKwz)wVZN+J`=bo=3=j9 zjUvq?nsfxLnxoH`Mcd*c>SN{9ONK-3|8g2^*%|`q7-_NtcrX$j^LilmO~w?eB@wyNGMP;i;SsSA#I$+ zWlPI=9-FH~EyjL2OyOIJ`%92Uh1!}#qc$2HVniU3s2brg!6T9$(P)qaky1&EJRw9o zY?_7GZ(~QV<4^i{izBEYgWXk=Oln& zHB3%VkUFkaf)LVf^>7`@4_h*Z0j$Uw35aw@ zUet4snS{R*EASE(2vDnRJ;$^Wo4Mr08}58F^JFH%hHQOE4ojpG2Y@;Zc2-GXw_ZiO z)5}Po?=|CzVi*fgn2%tv6no#*8zI$G$>@ZfJ>IM#ddfk=dY# z6Phv1S$md1m1=>27prw0a)hn+iqFHnp0UQvU&W&l%#ywE!o}ZHL-ic>d8f(lJS8al z=}Y`fYZt=#;Ogm|kWHae(tAQQdDE48rTi4)110TYUKS4MMRKPz0^}r*mFFU{V zrraRM&N%L|5?{Hvxw*C3ryO7Oz_r)zml|PrVoy)JVsbJ=VHFFcWy*m4&@FRw87mew zk`oiBseTmSGQ?xTilhE$bbDVE%wyn{4Wr$foo%%x@5)ebn@PkIiFr^;LR%YrM25Ej zYG;>E96yV!5Z~V1Ry`y|Wh zqdh@kto_nut;+h>Bw#J0P3a?3l*9|y)X5YpZ$NE}PTYXoP3l>z@1Y!SOsdAPVYINi zv-H@`66;1g&`%<3d2}rg>h8V1ABT^xN)17b%=C~}2Jk27LFRhgP3Ns+2Ggb$&k?FI z^zb>*lD4|F>>(}-dFzA)!H?yb`lvEcv8-`)X~qtEB+9bvF2feeD&neVd}F6^u*nLc z(<>h_Z9A97)=GT5Wo3%E;S6i5M?kL)ZVU1BbfsQFCKTCTFfeizUBJ&XHR=aVNx&5RG?lgSLR15lEI@loeG9h4 z@gf2HR%vAmvLlC%$r;`;gNDFLIAaK`N3P+_Y4~Nx=%FPzq)g*wZMUyJJ2~P1 ztmNI}b^shtI5yNEIcr9u?KuKBTtZA)?JU)F07x`M~wLX+Imt1C{EgVw)3ZaD=$|zdQbPgdzESu7v7GMPO9jYi1Cp@R&&UFd{bO{C~;5daJa zBPV-d*9tv{v?F^dn;+71aQq-4kKk{O$N9I%9(ZvZ4-td#PT%{GXMJgSvp_htT;{t@ zHW>UH)>!|BHs5}n|EIl3uzK?wculEFIyk3)l6 ztpA{X4gbb0RCXjS=t0D=(L=`Rjv2Z)^kk*Sm`Ix+Z|Zq`3S_6_W`>%wqyvt>&z=~p zmCJ!3LH*a9KE1MPQMP;U-eaE(Qxbi1avHsO<;c-1o?#bryo*1RF8{eT(c9WO#sn{Q z(wVKTn@;T6(`cBV+&jNeZ^Wi=y6H{fN(C(CUG%R5w#P~0m~}>lr!Z#7kP=}Bldo2u zwePStT2}Pe*ORObP30cO+V?*C`gGL=iJc z10my-gxX#k;w8mMFz=^m@XQ z{cm7N4jcYoyJLZNFAvY{KBOF)?$PmA7qs6fAwDe8!@V$2$r~Z}&gy%r+sOPtKY2Zc z^k?|~WbIG>Wc?c#eVrQVOH^y9buKOa0o9$pAq_r~OxEk|cDB{1-u^2 z(G}kVzDImNA`o6(Q6Dh?i}lSGzP0;jYk-V(X{#8E9lA=?(Mt`V zBmiLV1gY5M+J!@Iel6K(b~wG5 zp`zpr^YH|g&CEuZip0|kGc)NKd{O>j6xeSwYb3KN3VKH-!YTk*AaLr5TD_K{q&0p4 z;wr0!LM#%1u@TTssTRv}$&YG+my*gfyOk_qIMK+&YepBs)l7`91O|)tF}fBNxCKj! zTulLTAI7%uE#EogyHyl>=m9FwJVHH;ukp5P<*pRLun+VgoV7YWe+H3VbeP2*Pr*>nU&~NOM%D@DYHGn7||oFyLP- z@R4@RWQMdJtcL-%1?6~m5Rq@#4S1xP!(+0NL?>eR`3kT$fk5IQn*N_)3s9kVsL*Xx z=0>$7yegA*%VBqtOn+4jz_`s;jGRPM)d;%4jHU=lqr_1h@8hzRW^4u?4Tj=(I;wSt zqXMF<1}9i($o?mkRYim&ZH8J!BrdA*gnX)y#<+p_AeWxQW)`A4iVqbmE%u-EV#Ctn z$s(h`^VRi)4Dl9m6o$gfGnYyHo|i=I5ISGw;nK$4USdxEm%81^8(>qVy90sivH2fSFRo)m*{Bww6+b6)En z%~>IbKwFUO^$35n=f$mzZdx=5EyrR?)XQ?K?07<4X|b;Yu1e}%kHg; z#cy;5kZo3JbZJ-7YB;oZ_lu{QYR97!=r-^NeJOf7hrJX%FOqnclS#*UcpO}+z75t0 z@(^$DB9>5o1eQ^f-nmt{jdU;6rAsf#(WL{rv`40AKY38zR-UdLQMgx*hSyNwCD;@( zI8=Aj>rp!v5WN@zkRYnbz|0rI6-FGSAko*uQ3wCSSCeiUpl&H4D=L6^Ab@BXn8qKwl?rF;V?v> zI_vE+$Mtv8oX{d2A|5k)R!m?&jV;19t zK}lsXVHysBSr)}dMFs2z~j&Y2*@Sb1G`Z!Z^Jo*c&l58Z@f&v z7O5+k43qry-Pqle>Xu?I9Gc8y!BS*JTCt5*JtcTP3VJRE(M%o#f(oa}ZO?FniFUE< z*1s!Bd#SZTk{H)uCE@S*GW7+i@*F2hMR>ISSee9jSOhVU&9Z*(T(T|Qpq|c%5!p5? z>2RsqKqKWTI@xS8Q5G{YRgD*ePJ%eca$d}^kZ^`YK7w1XRP2(3ZyD6&!pSemY{b^Z z@Tt;FJY1xt!D*5_FVVYsNSKBtPXSvq>?RQeI3@~U32Rod&=?ZRrw4 zh%QMSmC(;b1IkKelOX~Ll{uqJe0m+d7DFPLVV#i!RH>+gmV8|xBifxJtVYJ0} zsltRgS(Fxm8=6s$V+VoSN@ASyPhNv@|gq-6!d zf#|9|uVQ3kYgRBX|E+C1+KcR^PF)U1xzc!9FZ|n=c@dhFoW!+|O|Y;{UJSt~-sg8O z@nUUaip{x1CY##7d$T&k)75rp?_12-@;{C)R+pC6{yNK?bTZ2ll84bW`I?Uqr7Q85 zQcD~A<469r2EWOPF8W3%lJB~NEnoEQoJ=pl%l(4Op`M3_RzPKc6*g|4J8-0tQj>uwJ;au<|2mMHb5HKxXcY@c}mU=QZIkk57#EH2% zbsLE32uHxng|Tb)ddt@kUs@{s#jUqCPk`3Gx%u(6$*EMKRNS|9&2q1Y`H~7y)z$g= zYK490=1!bA`=__^65Ch?U+aU&jmO9jzn@vvNu~$*kn5>IUGW$onl!FDl(>8N+d#H?r3S##{vtmF9s<-^ z9!5Oos<)^j;kS?)GW&7%z2e$yuBPr)L6J4Cf?{lhHUUZjGv$y>ouaD>i%R{{_YeOM zYIT8#R4xJUwx?!a_FL5K9s5{Q%iEWX8rn{afV80XF1c6wi?=CW9h~dhkvqQqKi*ne z0zU1JxB7h^4MisV{Vk(XIFpO3Hsx(PZQSCWRXop?O25BpHk&gum}M|SEG=zrQOmNb zhUX)hlcnakseE&Jo*hCxLHw#MIQmioNx+jChdGogDPGb?asrSn3mFj_8 zZ%xIMsbBh~-@Q%Mzwi6%?|8>M?owxrYt5nW3sM>uydLq-i>`6WHh3-d81IHc5D6w~ zpf&=ouplFNMa+VFLF@v0fob6_AX76W7;55wWcz>{%kB}2M|Ta6m3OjkE5;8 zqa(>^(w_Ly9_slgo_OM>e7&A8ki=}JGwt^BOrbyxk3_tZCpjvb!?ql#k&xrhWD1sl zZE70HNS#LGnxFp*Ba<}@0790sGt*Omjt8TWCUJB)Jw-k!maxC{ufF=~{pE?t$%V;D z7o}V{5PEbo23`!JR3e{EB#_twCTN>f)2NZ;zi)09OUU+pQYDSBA$O+mq zqMzzLRJJyX^?KtK=l=e7->?Vu~S_%9c?f5Uyj} z4-W~r@lud3PfI#K-RTf(k?VA(FDx)#Szmnq;W^IRoto-; zS1?+F7C>yUJDlekHF+u?n`6pL$4b|DEKHARQ387{-}dXy&d;manVWz5r_ZbofFsyE z{J>AE^KW|7n+E3m!q(n}MRQx#8~vsAoAw=6c-X%MUdNxPU&J@rVhpVKeuwxOpK5Sw zJq2Xo!>dqosf;5}QbZ6rmsa8-C-TTS@pyqKczKGVqTAwM8}vPr%ms6q`m*)2<>Glu z=!%X|m1QwdHG4MPPvW0Jvt}fSe@+jbOIkW7xAh3o`QC6tt-p_sF9TLCh6a<3u!Be}3Z$SMg-=m$h93nB-D1zfFY zFnVZ#Q4|4FI3n3Uqy#y%n8AyO8zP>p+zME929VZxMHo7f1XNi<`5@iDSgMy-1kaKy z5|mYB{=lY$R-n-7OcFBegxv=m!g%cA-?(nQ8Ie2`>ZD-~Ck~Y0#bwkba$!(4DB{MU z2$X8652(hi7I+dd+d`INpyY)7GkOR=*elh6~N(CGDh7lQriG6 z3#mM=cSUu$c9ghvZp@0=D00x<;1sE&;7l46pb{-0nYJMr(fCi)LAx|4%LyQdxb^6j zAVC!ymX$(C@h5>Vk@QgiwQ}>eRR^<)$07}J_~mkBt$2LroABnxd||Yu3O;II8eS_* zUKj`SK^!mg1F9(kr&xEh9?O-XCee)KvXJt8-Cd_3*MHe66#O3t%d7pTi^fo3SWYZ; zJH^|I^)u?R;p@&k^3bUuVj1b5IThT#BanCnQG-UUHnlLl(+WE%A<{JomBhc9(f-G==1TT`Zw8j|r1=n9Iyq&kV;5mnG((QuiJ{0_*E&8w4md z@eowZy7KrjL4rJd_;pVnKYkntyXZzRcok-3|7AbaXN&^}?^&IlYcLGc!6?-|NN|$O z7Oo3m&U+3XFn;l&haN(!4$j#2UV^)V;~#r$evF>q1?;#NczUzG4LodGcJun?5}Mlz z&oe91oOGE-WM$Qg=YrLOlKhmS3bJC zCx|ZI62mI39ec@>NWBVhT^@-zDD-h$cQN}fR)AY{9-#O~{0hU_^GpS~%c*wNYde&q zI814IEN?P#RP6D`A1@QW)Ck^h*tsgAMQ92Tm#WpxMzdY3`ux(5VQsLREi?Qfzgnu? zX`(#L29PU4p%kt`WBAWaf9Qt-W^m#w=!nYSR5#7e&W3?YA^I3=`III3U(%LUv98ii_M@HbhfxHMq>r({@x|WF zT4XW_;iO2K%UbsLe&skD1wZ+h-(DN|7$`vSGCrw!%o3lnMt-4V$hTfEYxH{A#ui!D z`@n6z7W^V~Vzeh~y{*tBsiG_~F@lpKpUadDTpskL0yMDC%S#yAQL5y6BvQj`g{4{Y zn$S}v2zFtm56_l8Wm%&bNqaz1b!^8HG4`}1@ zKV%N^(6E|#$I?zzw#soYTh>0cujG&l{W*p)bb>D z4dBo*V*?I7BOL8zUs_`xZ8a*BlPJwhx$%n8_hnz&x~Q87x6-c{f6K}~wrp>!_o`gmVUbI<878d4XzCrP^G4Qn0O>x5Q#7j1IxYdjNIV(r5Wr=@Q63re@Pq9aW$ikZbQtI8^l zT1dMm050^A-~W#nzoC9jeFUD@(cD~1_9Do`ll6r1DCU4KBwj5YuMRA>jn>0rpsLam z*_dTa2K)k_xLm1KW5lfjEsYPJs`Pf?3zZrfEg*cA7u2K`phie8CpPm;AUwNz^X4eq zi|-PsxVJeN86)9ntyV^ywTUvI^kq585o7gQWwCk>pgRa)AsuI|FWp4ie#Jzc# zBv*Onn-P&2k^8<^?pc{x`(BmRdv&S1CA7CBgd~L2LOa5Mkid8VBS0)R28L}IVH+eQ zGuR$%dCd3%2BtA!z%wvHwi%mM_Sj&1>}$M@@ne&k-+LmnyBbSy|G4+L6;+jy5hqTZ zIC0K*zV-bMUVr_;LykW8uMnKUk8oZ;YhPe}5^UqQ1>VDoZXUrH%`XlHy_=xGZ+FwSu|RQk6aQHT8Ynjx8BbokU7c!&?J3L4_ok{pDv=15 z3N0EQ?hr7RXdo>{>-B-=svW3-(Q-5V_j%;OF&wU8T*glhh9)|?fjC%A-$|D;b=X+D zdCy|TU=S!VCQrG(k-5yw9ve^S(C$1;rtnYW>$5ZK8TrlfGkxOH#U*6b)Xd=EQe7UM z3&16854VSnxb^ngPR9*q(sRW|W2%b}c(`8QT6EUoZDXtLj*HZ&I_#rCdtvd~>CRTG zMTA|kVjudc3oZcM;Nbj13d*;XuUIcY#d3UUb{1%}Y;|sKVXFl{YsL<~YZJY0py%YA zb$m#=9+FcVPKZdFoCAJ5sR6Hip7)&mxhr31O^yCk ze`Of(H(Tk^clGyXD}~Z77^ol%e#hvf(}4!G-snU_tHO22Fhi_W%MX;7cZxdN>V`d7a3jc+`3@GoNJ(TQ>l z6;a@iJDtwX(XJA!jQ;wehaNik4ZYtM`lKEFQ?_K!VkpaEHTly(N0ia4V>2(+Ux5nB z52dqa+w?UrT8qxQz4;{8C}tp~<4VLR!y*r{a+yWx?o=v|B^X<4Is`hwR8wj1bNQ)d zxw$J?mORWzxMceXe~~GH(LTt+iIo>vTa+=7(l7q0HrJNqyU)Ko2|4*mYZ}ULF@7) zd10+!w#Ag6z0v6mlmtBsI>%}2CwX@Z*gI}R3;PB6x=iF|YZGaM z|62T66a9(B6oZP5i5stlSQu!sPpsM*5PhU_8KmU9R407mgmJ zY+tu4&nUfbUpDhw!WGM&EE`MNHro1uTxapUk#r;KSOm*^B< z=vKa{tP~$O(dagO&lhymEDqdDo3PG7STYYr8Ob5KB@ZMU)&yzE+>xWW)Tk?TB_=*Z zL0pWatoR02R_I%+0m(Hu(ZUHVtQU zxdi@}tX_&_RF@DPqUb|@sE$Nnrq_%Jk;A)&$VeCcF@Sk5;U97zfcV5$_c zf+$XF|GXCRG#VaLRlmoa?!8+g}5RDTohtE?qnM73_3zF6V-u zCRq##HUmbe9IbHl5vm733pkMRngq9CM^T*9n_&MLs4lt!{4Sb?BYO-lFlm$lV$dK> zPzhzN2s-^JSMx%J8=GV>1<~+p@Sw+tWe}NpgPs?2d3EU;0QB>Kx2Jt8lRsA zb)dw>#Ly-UW*9nCIDB;H;^abJlqi1zu>&R|{16b*1odr;X zcC0JmH~d&3Uy}nL39Jrl6^7xGAxWZi&`5u&fw({fbzI76!%xC@8%CZb)GVS_9j0?KS(!WGiK_1a8Iu{f!&<;Osm3sYO_C_!{_2bZ>Pt1+c`#Qo@}Qm)NQtCxz-vpW-5Nel06u9`G31ju&rNmKR@L^5RK8=2k=^p$*xbXF4 zS7*5w)B)HsezM=TyB&fZ9=gFI#TxTV zNZM2fwRM@6ES6Z;%ma%$xe1SOz6fiFXtrc7Hg0aweK$Pwyil@xj63-raTr+OzmqZ;={tbByWMdU_`XRKU>R(DYA zJJ!Kj-hozFQ;E9K*&`cQ$ilEIJ&fTfo+8I-NE{+zd452fT;?_S;AzZ=^Z6e+)EAy6 zQRy?kisRbly#|z5k4t~X>fMu1opAJZKYRNF+od9-&SXX?7KcB3tM9*K;)p7N$7pH$ z={ye|0TapyEboMlI2>b_X3C)n=fB~K6srLN;StdL>pzpysFD@LC`&ezbv)UPiNa?F z6@4lVK4-)hf<>XJZiN1l>XM1W2*gJ7-N#lg-b{9F>G&ZJLlYBg$OEPw-B%mX6j<7R zbM$8Gp3$2LKC9QrE^OWF)p04NeL7JM&;%c1>S}zU}F*mwPZGv>*(aSiEPE8S)#;m~;vpO|}aE2o@ zL(mjrapg0PxPIuiv-`qH;&HCmdfdTrLsBta)BgRXTSS} zj80`D_nUY@g#Eli1T|K%HE98qE^^3HsJ1ZnOsJSX)zTswP9w?i-8goPkBan{#xjAf z)7VmZD>ksIYo3SRHXcut0)#Y*?WJL_hf=aZbPqA$d4j(2tjB|PPy^){Ahu+wXnY}( z#Z>&^>*_wj3y4;P>E`nFzwGT>Y_H)qXq)%#EJG4ZlnB&S*9V$TzTc+icQ-Z zf8|IrDQMGRuvTmIn60c$IOs)oyUUvDE!3%J?`Up4x`lh5+S5aUr-v!M&{JD>bpKN+6~OC<%` z3@*q-dqlLz!ApA!^Yil{SL(+rC9}CiI}$E1+K3Q9(lN(bJTG0|EfjF#XL0lBfLI#; z2&_?@_gKa|?Mn$v5FkGS<`v7Bb&*-7;!ry~Oj20Cpc|^!XJ=+QfYp#=CK&;oHv95p z=OgBLPM`!nwe)kJ4x9?SJn;6wUt3A5Zp~TytjnxxAPaA`K4?8^{jT+G>z_e3Jl{TL z|Cs#>`yKS#STffT^xg1T7tZL*{GOZqN5eB#j%h9Mx5>H5r#UJg4j=3ZW%3rY0CF+e zFofuvI+%Yjq5c&f_eT|>RS3esS*caD(CJ0^w_=ZmiO<#f$h6}kV&p&Vny!Oo^^{d5{Vue;2Mhn;LixyTEfzPM!P)`~JYBGdf%ez_9krMQv{zYbp>0YQlcmi=PGJwhVUQbC&Sd@z; zPg#=rRBau!^**tcqE&%XJ_%JL073Bl)k4*K=F#C0N&>oA6M@F?u5#RQz!R7UQb|1_ zhfMU>kgrnZac^xr_judf;*4JIc=II)ogJI^^wKDx1G+QC5w*?JoA)^6A*pz%SLJe< zTA`axHnj}K!}?Az4Vi+oCV&#|JeUHJE}coW0h`5*mGG(}GJMu3b;QJmL#RTqH2^Dv z$cwnhl*$zZ$qxtXuel$P%bGj-j^QVe0GWDlt0t(53jj~9-dUjSny@VEb`JDA81f#> ze+cj;IOn|dJ{Tk8IFw0fg`#0Vj#bK~I>E^mLTX^eZBUcF2xuHdgz9*{I#q4ua?JW* zF>kcD6JTL6NhnP+>&WJQ83MKk`7_Fqd3`nbja?Sn-&V_vN z3;3X$$=at}*fum8w1uc7@|vd5@1&#h3LrW^j`t$6grs^Km78?m9-0~xF&4DRX;oEa zzr#u(g^A4Wq`#(#1jAYjB%mdjpp@~vx8OHdu&U)!_zQ&_VQG*9uDV-xsm|&79uN97v;e^L6 znxkSA*@OkLuf?@D}B!89&>UvHwSe`1Eq`z~mqBKf~wAsWLBB*Cf zpjkebBjiqvVT6i{O|jHbbHL*;!O_$q4CN!)Wr!cvZ_2 zxGdp}SUA>}^ed&eF*0TdS(7M45(nX7CEEUpakHtv(mB9dJ=Rn$gkL|BSL z`*YcTg?Sma(x^pP`k6!$7wLH0<^)OS=>~DwB(nitCuvC$Y9wwW)UwOUR8d!;4l*x* z_P83X@z&B@(XHrNNDd34L?W4MRMHTjjagWvN5a7fD|!u@CDw)?>v{ea`wDY)--q zx=wkeEW`bZaQS5L43Qi=wzFpWn|}gv%Jn#4))Aka>RPrlOBvZn3d*Yo!`np}xezzE^+Uf5BFGbyI=7v?hL zcC8_Q+1B(m9vDbKl+@`un3#tW_%z$T%8IJD$xD_~;}OSHrLuI_TRWes-u@X*P?OTySwd zzcjsX-w_CdWesr*fX#;}pnVlxW|)8ik>(Yaqy?8<*Vr}<9$gsA<1^s2agA&f{L=P& z+*l?ML0CIv#Vx=;=$qjd1~`n;U#2g8Y!hCa(YuKW>;|mUqaDQz)hf`dPB>Sz=5F4f z?Zg|zIiOrANjykrYBTwEG=o4f6`evh$mKxfAMNN`{vK{)2PcgTDr~3z*0=6BGx;*+ zVN}I9kP;MO4CY_r`Cpy9^TUr^vXO&&>!6u&J3MFoamEZKxgt1v^z)PVP6db z%6~xTY90`VfvM*59*ri|6RX06F&acnw+AP%pxJP*f8L$&~Z*i#D4E0F!DU z|6yNUTI%_nj!t(5oQ9hs0G+!j+DoDU(dyh>*Hh;iCWatM^uIn2rfYWyFd2py2P7_+FIzX`zOX0<_Ed}|A99UfKM8(ztU_`0*{Hn)ZBGEnTPUhr zl|r(dAcNg$#9hSRSm?;wB}+2})jo^kdj7F+_+Yo|Miv(j>N7ku*gjx2V;2ILhBto& z@I7lFL%U;@QTicMIdjxWvk;weQYiqF>HW*f_VEo|?BoH&-9Y9^6%entPAv2bcf?Wz z3xrY&2NwFpRmx4tRwOe~WKqTlNzV4cqqxZzNsv81@WMKBryW^XJak~(uwkcTzpR_t z*vNF%9(+4+b20j{C&u`aN6*O3aw3>W4H+|O4g3Xjb^Ka+Z62?{C>X@=LJ6hC=IqXy z@YgeY1mfW1M3{LtSE=N}*>)8LGXs38oek?qR@l~05iIisU6d=UKp1+K$y8roRTN@vjjDZZ~X!2Drq_Aq&5uo7>Yi%hDQ&CL?!b)Zn9ywYbDDDGc)=Ez+^ z=LRu;Cor?!AZ_(2R$B3!*Pw9wxb*A4$&MAe(INkm`LS;DKYvFbH=Hu2-#m@ z@5GHd_B#(h{P6LIk0&1C$2x6qp|x{9HFJwtf-SSWh?(WSj=jdgp!Iy)e!fx5?y z?epk#ex5TJ3}$8q=d=4UHhxB5z47u@X#pR*o^O{8F4e)yW-hx2=k=Kz2DcG@d+Bp7 z*ETUWihcxc$WNxK^8@)o z@Tu}Tj)KkiJcp1?%A&emGi7}r{VnZNUMrv3AN&yaFvEqIA*#7%=vo17W2p$CGutK$ zGLb=G-LZW0i3TTl1C|QD1%u7$>1jUc*GeOKLu^F6|$j3Oa zPH69hy}5bWWt$sdoX;Om@!omeKxj-&H5-MQf5!hPXs@jVgX0hF1W!8Fu^m1b8Qh&O zIzoFC)0BV{)UjJeAG1#U;JtL$Hy@qDH*0?G=)T$6C^ks42EatXSZ0{k3#*2g2zb1& zmk^V-qYQ>Qocv8s8;Q8Txf$A2npdJR3=JAj=iwG)$3Lom~I$Veqy3KQyNc)+cw~`#x*uo8SCoi=QJm-gv~?c@okH0-6=L{(AF4V9M9z zb!!EtpJXXFAKX*A)6*<{rvrzGk-0YTAnW`VS{d_aloS4FG$T~XhIOs$zE)fd05psL ztnl=@R{LRTOD>NCEG6iq*S&MTjcbM%p#HN9w(9mByv+MLtML+FFw|L})!_XXG(TP{ zx`U90bwh#&5+>3vSY$aES0)PjOXAlem_8&Wq20u2*?d7d{YHMv>GU=Hb{P72hu|7w zO~B{ij`0J5NyqU4;nX2`jno!^sc&t;*^}ueo{-dsiS+Sc2w%};>GDHDT*e}LH>L5 z@qNa@n(E3TT`H+XY!uW-w&E=vhOhEZ^gVcXO(q$;WHRtSWu_{csV055oT~j#%Dvd$ z+`6jPII+FmZd;ZRl20^hS8Z+D*6hLE^OnPj)k`iuwwp*SCNs5c_Q2P)7_6Tyi|0 zI=pjq{_m+Ck$!%9c5bk+JzQROLo+XWntI1~-D^Xb#Nv;s5!8I$kR^5m^HzYgoIMiw zAN>6Jx&N#O&wLku5_l3W!MYEBKO-yoZ$SO0Za1WhH}bE)w*z*89~!-Kun<3R;KB`yE#RLgVQ+uOtWa`k`UWnIXSED6N` zrswb*f+4<UEO^ZLcbrN!$klqAjLmIv%`I<@3kqwk}YBmW}0OJN+(4keBOUIjHli}doa zTrwQ zgk{J1sO@~j(eE0_`BtdJim~ZMBH5K(?xXre-~7=?^j-PF{Hzo)Wc8?l$YX^F=(a=8 zy236L`wKd;Z(5<%!7^GuAd0WE4~BZIHE0fnxK*?5yR6{vJNENzex0uXb0SEq$E6~C ze4F($43y&U7h`utqj$xMUn#`z3O!yY4xJyI%ffVS4#~hdYFYb<_rw9mi!^9TE*Po+ z2V@;)ga-mU_Kwv8x1<6!8G>_eA~}r4M?4rX8zPhDuN{J0E*OSQk*Ul~=INOO=X^P* z6myOrt2KJ!z6b4{(J3NlcUr9n^|ABB>C>nA!dFG%o<7}boo?NC>ePJ?w(jGD9nc#C zfy2aa?;;h{i8Q$jJkMVZd@=9`L}2SG8&z^#soT26FeBpzt~@q7s-ZxNHhL7reWPX zu&q=#QGx*YS`{GKWniUQy{W2Iwc6bkYqis<{yZJuZrVhfpg4?Ctl4fitt!5>xG5BH zsI6M>FQBGxH)`9OIC8W&mny7y{O}6e?vF3P7w!%q><=$k_3sdmz?e; zpMjnoq_woWOe7e|in8ASje4YBJyNOuy1A-IC5!UgmoQ<0E}NLoH&Hu`5KPL_nri2Kx-F^*ASBE;`L zmI6vWQn3KAt5iU>3r7$GNbOkPh(^gTx1amq;YEb^>VSdq=~N!FdWfu*r#kelxg zD6io!1wMg?5u*zePR&|o#@n|0A2bahZs*=o24IB%BV%ot?U1%3x|DV2aSAY4x8rUHBPft zZx8}iEY3lga$R`FRK)`D1?1s;k8CmoU)Yr@FV5Pw+O36!6##`>ZCpC%XP~U zs&l4~CRhD`R&d5~s%7ciN(ejHBZ!It3k&|q=jBQ!qDj#)yCA7O4=v6Etm}QV1Z#9K zrrFjAa$-5zgn*;}EwSc6lhJaaVBTc)^$GFTU?{9*Uz;fe0j)@d@yc}O)AvmT3f8}B z)9BWGm72iDH_zZ=aYM~c&CG#OF3^y{Im~afG5Uuuz3W}4PRzb=pSbjV#7bL{drGf9 zHalm%5gi%!yF~K1keg5xNNIMQbm6FSk}=G6DdYUZLR_x`TFPifk~;2ln&HtKU-WMU z-_b(r)j0Cgys1cL%Lb4%YHe(0i7jzh&>U9s(EYe8a1nUWUT>4#?h$*v+Ay8G2-damX0dNPlLE z5)dNd=89TLL%*q``2t<3Ra5xL(!r2jo;PNYv-R#MJXu@)wUTdKruSjiOx~EjTd%g8 zjh16)>eZ_KX|ihPoZwU%B3`R4Amc=wZE}Lk#je$q_iY@LBPfo@O22{s=M>&(p4YZo z1T#3Lh7IJ2jy9cYooz-9KO{c(yt+WmtI7SkJHA2PFFSJV4I4K}!2K#v5Iqvx@=z1E= zuB*&_bw?v|{HuE+1D-qS)F{(HZ){u@rS1>)rv273H`%jZeDKO^_aCr{fy*W8Ft3!82~bzWcls`#KNPhD~{efsQ8*nc`HB7`b9eVu$j7RprOzWX;crIv zUO_NPOp^IZUcHkd1seoe%AQjqYAuE%2KzJ;Cj28}ec`5?ZaQ%B#RrJ+ffzwYGMQ)= zXPZb~M+-O+003IZWJVuaSXe%EXnAo_|38L)+P`-ML@V0ET?8kJycXwM4j*%L$L7`% zv|&zIW;mRC0L7DX%x^zesRe3}KEjC}Z5eI@-{gg3v1SHKQaXm?5x#xaaGR!t(Y6(^ zmuKFoHjLY2p>Xl-G=GX5@biINK)Zc^;B$e$g||CMrlOZ31;{N7M=WEsHd3SMb$Xt+ zBQP*`tlivmjx$@sj)1~^CQWm|$l(g=6T*rhMfC3Q&eQ*)qcoC1q!n?7Yw;x<4S*Q7%ike7;jt#mJB)o zZT;?G#rVW^x`uD`2b>DS8l7 zaDAoV6%m~BhL@8+JGzInHI;rJXDvLo06N4^#vx>|kV|E=rFx?wt3DtE2)!s^AzCD+WWYTrqqL9(U zIU$@R@jRZwAA_()oH9~r+>%gJTgJlVg-8uWY!0f^a;ed-R6`_mWA3x&WHK{6WeukiEW>mmP}fd$^nNRw zA!EIXltHPDR}UsRRy@)(;)Y|uS>#Y>lWhtws%Qn5qYTLzajBa}$B_5J$(P!w$`i)1 zjc!rjko5sCJ8p?TtZn0Gs4DRR#APs;fggKN?QtW7-ARe=T23}q{%h`w8xgt@BCx|D zG!1YlKSjAhMlmV)Ek{&W5L}age)50X$FT9X$U^XJqf^sZ_mHU}vu5^bpAqj5L2m#_ zH?kE z6i*gQCSupW=}m6}COYU$jUH)O?^EK)e6zW|ozE9u69o*7NV}D-u76!-HB}M)3X${l zo7RWHbg2{PzsU2SVEtmz@E<&+DPPLz0cpQEHXtdp$5WGLVcle!hvqoq#LQ&J7hT3+ zz7sq0?&m)Dxk;D!uF>D%N9f#%R37dAFJ4mS$HGqL*FG`&D<|?#H@)|6*SYdl3>dlJ zWj^=0&t3OC+@>#w1#9PU=pxfuG&OnzX!OL%?_xYXBF87ihLbyw~Qq71cLa-!R(z1`>i&mP!g=p$71?uAxQCvBY zr>S>6Sc=DpR(y{%a=?UVUwYSFcNt`4fRgvEwc(}jdPgZId_)ioOFgQnc`B#Be^g?P zm0B(jWJc+>LNYJzH=ov|2dteQhL@+CQ7qF5=_<09NN6`fHarPi?8fbhy$b$cE|Qir7Auv*B+tXB=pH*Ba)>mBT;fWH>t{LzHeMm>An%23d?Im{!*G*K zNi_zvRTxvGe4+89Bc&gv5ZD~AQOCuH=w;V)i2I1-%LiB!pVlPuzV!{zJc*o@ceMb< zDxeLM;I89ZQPNiCJk$hsEV|0gBKaKkhwwYfWEkUwDXM`2MU;QUWDKq2wenohC+>&D zppI3K`m@82(DS+5u@+MqZG1(dDZ)xFj)PahMRIg7E;o85dPx)Q)Nn8;GVn~Nmwbzc zNb*#=SICq@Lrrr$u}IfuEYtJnS*y(r zM}RcrdbPY;9g?Ta+3;2@Q3$E6u(w0PEQZl*NDffR!9G|xBv@PQErq*a@}^0?%sU!?omgd-=ad@>goT} zgzf36Dt`Wj6uy@cp$BA$vf9|)-DuQmOiyqz@v%)6++?ykH9fnuH2XL4d^#pTVDy;_ zGuu0JbGAJkVbXTvlYz@!-NMcj(NW0;VDW4h&nOmr|*%?lDtQ&{J;f0sp^uDE~rOvQ&6q8e?7cas4)RUcJxm=D^ zJ%Ve4CAZQ<-{%zVDg0~;)#Io13ex z=Vr+=v3YrC{k-$e+r4(d>TsjM!t8XdR_oTMy<)LgE7h;*cDvbb_A1JA5IlXEYIDD6a#{S3JdlUteZ(7+ob&nF8+vA9@Vyb*x; zXT>hNnre2dlU$UKS&zYA$3YjqF>nXtif)tVpm^fpfG_^+(~K(^sZR6Ha+!#Gw}ByR zhOmhsu%h@=R0Qpu&EurJ4z`BhICkvV*4DABm|rO}lpqw9dIyB*Hs~L)w#koFOp+*^ zC?dcCQiVu=!A^rfR;?~DF)($e$iYeiXiPz=WQ^SODQv@Vsrn%x!q6_nf4=>C|Mn}o0l!+x%z|xRqDw#yWa=cYRz0Wlpp$&IoVRwBH&8JdO z3Br@|xnwaE%_&o^xdU|3Oh}_k%7Upr@xPHiY#eVl7*0USeW2+6;F|fPNB3=KM=t|v zC>UC9t=RMUd(I?Jl};SL{PL|oBirxV`q5Co2N>(W-@Y`{>8`Eq{MeOOt*wR4{l@Ee zQT}0q_&V2#YKzf39JA5q5XjT-c*i?1h%GOlI9~wF%gg5l?2h0T+Of^An=4ja9vpxQYoZuB(d!i&%FA` z!C+`t^`g{bVRaqsNcsHQ?=e?Br2r}v1`$MiVx>HW9+6sDUNUoey?kWa>`WXO6?FA* z8-#Fi%!$)2c<_Dy$xm3ni9f<3Gbzv$k?|c5O3VUvl0G$^pgnzk@_mK%PO_Vnfjs>9 zsLFGJh_)%q+Nw{LG(2c`C^Ue;3{~`c*S#R*zAqG-b|-QjvdL-mt66dkT!myeiKpkm zWFjznApCU10{KKmuX})OR^qvMCI*3Mh1VY#y(o-=As-q$6jTtYiZGxiYEzZgA?s&| z^s3-np2=1#c$jaXR9^kDV5!`0;&rnBrc(WUyVY7*#i`&QC|Sh^*{SAu_qdbiUAbZO z<(U4MRV=hYqhbUUTW!!0t)yx@TlY$ zXwxLpW;&)nJ_h_XJwp7d{?pw8Q!_jk$JAGB*l74qpNXA zTFRV-4+Muv?yeaxor1Oz#vdV10#$Pg(nI*BV-?H7oxzi07EL;bBVH;U0gO}7JQO7q zPfb+Y=>|!JMkN`9lA(4@M@gcVHBp49+z_^C2W7*N0*>Z<5`Lp79y@>B&A_?vl0gJ)1nH$)@$Th~(MUr$1y)Ad$5HZAHh%`kjEn|=RE9SuS z_yVOA>$Z3E$BTU0hG&jT%f%{ZHt{Fo;07Ey_iyseKd&pq*XfV{))S1Q>R|iwOgKs} zGm2z0Iqx~!03><&YqwLcOnvBz58QLx_nWVHYj$<%)AP@d7lQqI949K|3}6zlKwf&R zSBWb#vXagYrbsP$VJNY*e!QIBioQJi{8#layt$vf>fdbN6v^~rl^|d!vbYA|umXYO z*dtCEAMa-co*#G>($vr6o%H#@_wXE`*g%)^CSznAq-{0?Q#_JFv+rHc1 z#AlPKXB1z?s!B26u4hOGhA24Wz0UEXnJCo!#Atp))qyZPWi8)lj^KS{jwIvztVlncvU7F>WU?dS zK{yGHD_}NGGQ1H!pecfCTa$ws`_a{Q3wJ!Ys>L>GD(hV_SxowNdkrmLy1h69HV%%x zurm(xjzpQlwzG>c9Lkj`dJ?;EI3$8(IBWnQI=s4pw#`mnFppgyKXhyU2flaUjhJqS z!%6#)zgtKMV|D%x4Gn{25C{%mV1hX%OHTAbyUf6LyDbGy#>Bd`jl&y0z=-UQ zYnCOs@A+s&QnmVS;Xd+>hNJjC>%F77CXksDjOGoKv`xL%AIOp9>>k5;oY-yrQSjX&#~onV(Z=^rb)flRwEOM_)^2|Lf$$-&(7q z|8A{D!=n$e9(bR?Dx&r7o@8#*FVX__-1-y%LBIz%!F|Brq`RO$#*b${8Je-r3!h3| z6|KbIN#thqqtWH~;qY;$n?1TUks;OLJ)s9uUjRfN1#M3VZ0X1qV)QWdp_>b%$9frh ztP@}sE2)l8X~l|8*ikX&hIJ8}ZT|d4h!>{E@$sxPV8O}(1Oc^%Aor&8ww;EV)Yi6*y6Z(#p`JIVElZ5w?_`721 zI$FkPv`ThGo$|z#Dj^f>$S=#(gpm>SBSjHAkS1$8d3eZ$(ooiF8<|atf+`xEG z!od(h29e{V49Ib|O#U>2XT%^0!GL0+(VOv^2YC~OIj$ssux%emLFj_%O`p28eXz2jh>Vk-EP+?E)h$7K0&lY`b*XutnQFB!!N50au=nP3Q&^OH% zk@`E^`@k0)@9*1Ye>B7;YJFq>{*Cn-OWof6SLZ+!fy47cycJ#ww(RWJc(FKDxZ#sP zow#|Agvl_`kua$j#s6ZzV5I;d0!A632ipaFr)#@u@F38yl%g2&7ytntP@#lwkhr@QO)fo~j@n~lHk z_pDE`9vs4E63F?w4%s1P50OT!$ZE*2D=D*(>uK^EeK@A5GbI>N8c?elGk(WY9TLG% zWauy?eG$#9q@_Q?v!Qh}8XH0J9=oN;8^O4Q-Jx*nF%DwgZ{FNOV8zoX1@KCW$B$$S zk@L=r6v*WrCd)Js90@C&wbo(r?P8qCneQDTX&Ul@QbwZtN60zS)A4u_yJc$hSu15% zD{UMI(2^vr{7YY&hs#JgooWO5*-lxkhVdsqY5f!H?go~l*FZr(82A&YXy0%L9Vnrm z!heoccm=cPKdI5~m`Q3TszDo?kX>k}E*$V@KIuF*!l@>R zFcnK%rU{an4I=`nz!9E`Re^9E&D@7d^LAX+k{tE7lCBTC=#c+m== zeb4%MWN!YMc6WMdxw{Tig%j=p7(Kba1DcskAD)|Y?O>_`22mKLVk?PWs*sO^-ZMSD ziNzEI+^EHJp_Oi-J~JTb{DOYZtKnGjCh>t*%eCA&Cy)O}pS=a_JvzK>&UHKMuDcJf zxmY-vOlKMmMAB5ch9DWovVlMs!Zsg693fp=w#_sTM#I@kA?8_ciDk0_;%;o;ie`Cc zCcA+dM6NVZbed@h-zgj|{jjNaqM~e9{mnFebh|9sa=y6&NNi!;6H-RF`W9*ZdToAQb7I-Zr=oqN-GT#op&j@{=`E%Pd*tqWxv`AfK+pP z;C*O^%`B0VAw$|XvKqx-i5A0y`HC-&^Grel&}X;pUnBRir@Rgb8a=OnmFJuKkrr9H z2nmx@qDHRo!Zc)18K5)pIjMLPSVOFa0ai|mcqJUqL3kAtVc$Mv0Yd|e-< zk-4ScyFTwE)WEtK}XK=da7+mf9rko=FB1?l2SUOi`rYW?jR$o?ydW&p2?@APt~rYd+#8p z_Yz0_Yt@z#?NdE!r{1>Sx)#QDbX`-piwM;BZ4m zskmG6VugIztH%m<{l|%K7vc>11^<(Lo6E!CAitH&3Z7 z0K6Wqxl{3iQ?EOPcuhViac>di8`?o@z?&hSB{`EQb^GbmMrp>?-HU6PRJUJD&ZhE% z>128%KX5me;55nNnnh{rCL*=kV6ol+J7(G|XF^Uq=oUmqiGXREWebK!SKU-|53KfBzH z$5sv;USDg7j)uWs`=0f2ViwLv2l85EGqc(-jLqf~P2?AKnZdfILpgZHt}!V%2{~XX zG)3`MG=&T!IGz-c*6~S-z)urKDVdBvU#>#hhDKA!dT|@K9Ip5eQWh(wI%47k9iE_Eu|{s#Xy&qLBtHPG@>L174a`;ZRul zZjK&kHX2xgo$Nxng1^`5;X{YprPs_hTPfiGq9hZt-8POAF*1rTO%+SLR`|1D!EuNn zM@$vb5)2Gkcw_xqy;_V%GMPeSef{u}gWV2FJ~v;po!RYe0Mu~oB9%oPx6>Rt#YbZC zh!ZKG2C$mJP%Y`e7l98F7#Y3SfHe%Wyj(iy1^8Z}*kp`mwVOkcM8}A0sG?Cgk`+}Y4-qM(BWU`rT{TU6k3)o|3 zyAL;#Rt>#!1*njzP`PIHkp~jRa0Q?54l0@30P&1$HoMkzbDcn1%v`S3PUaFRE0@f| zh$GMv3{z<|ptKlVG<=oEfP5s-jcBx(1G^M^Qt#8B{`4+J$~x&qAP=}uT=L6SxpY$@ zPM9G0+vS)Y?B`+tOvwWzUNRhgBWN%r{H-fz&~b`ULOFj$ZFzCC3Pt?Chl4WLv>{Lbh>>(uDMGtD?P z*?TFfa9(NRA_O@+74YqZmxH~N;SzMsLXverIy;9*!L58e{>Ei87ZFOSNEuW$wmpUZ zC!IdlJbChFH)Un)4z4_++f(SvZ^I{{N;bZeM8ZsbRfr40gv_g;hkaC@wNj3+Odhs9 zN{Ku|wro9nMR>=j+5WYep|3+#JyOFlk-gsrY0`4#B#yd)I3LtCudnoHryDR4pgCY# z4^^t&P80PZ4@lTWdy0^4GJCwOR4Bklx~X*iEvfD_vL(3(VzJt8sT9v6pdpVmH1<>R zBrp*&z}`76hKF1OR-x0`oSmQV4*>6@>#Dup%xt$#qQlYuoY~k|tf0&&2S*?Kj|upb?% z12tG-7K%_19|DYHo+gE~jT|?cVq*rwH0J6G<6tX&0%ui9rG+g)e;Wj9V=YtEnDFQY zy##7mXH(X(j@C<7J^I-9T}MsmkAGp5q24f)#h;*Cur`Dt6_izyWRhcJ+@NQ4n5M2t zBh~aRHB+C=KfhT;^H3Z&SXyeM+CC{}PNLH?g}pvJYKMtu@X-i1P>m~_o4%S{m+kEk z-Q@?Xq8qrzn_R!fYGyhUx5bsN=dt9NW~&v4Jsi>1QWjtqYk-VXYOK%W3nN> z5@%q3VQ5lG4D*>_gdBlZXus>~*A6aMS^J$V)@kuWunbAS+w&4;TsK!^rYfLCDJW2v zA&W+^jZ4M?$%#>_xu~zBzi|#r$!;H#&U8BHP@Q4Y9LRvpaB&U=gZ{4)G6j1ePRgak z|9zZujydgc#yLzpfPSse^d)HV+4OJZ7hnN6Oj*ae$O3YVpP&sB!mVjs+ur4$`DG^( zjPids3mA6L+x3EN$7%aJ_Abq%=@2*Sw(|I-P=$le-^L=CUo#KPL;KGQ1OlZ)81sz> z04gHutwDR5teST4MsAD-F}OfH6?e2l3qiDr^uvvJ{MxVm+N9L^?4TaDoEt(Q+y`IH zf=ASyd8`V~Q|2s{QLGEU={Woc8`OQT|~CE7Wcs z3gO;phw#8FmYU5*8FZDYSz>+J7ME)c3W@6%cxo<#KJQ zYzGhQ580LFXIyh|Ww}}j#||DMO#^;MPks#monL_7$?NlOJQ3az_&MyE9|?RR@KvxZ z{vIJ8&HxRsn6NW_=&9e#B0+DOr9!->zpqcf`-bM&xZ_NRvaPS*P+OEF)d*!4!6h>&2n*(~Ih8;Y>k zS)o!?r{)aaw(I5#%_egavBLw?f-JKbXV8``AbtTmIQNEHS%~QZZEtt-CD*+-9L8~t zh?_>Sj5`_ec~kJ1i4s2vq9e7B3vyBW{~4YIsV5vx;@anx3tr^*bP}m0b#J0lZD_)j z@|`xU4K7Dz&+XJx%(6lk_}f$}dT*tf&5*%@S>NvFOQ8@j#QI63Uu&o0rBaPqlk4j0 zAesN7sGP&zv>f9~rT)K@$0gI7m~HUc{4);#Mk4W;- z_uz)}@htiHz(a2}TkYo-6LfaDGEJz5U8@pnlUBW%MvhFuk#fkb)CDfzZr_F0zS$%s z9ke+V{25sGJsqJA@pX@n!Bad6cTozo46Y+fm2^?k3?WI$`&_$S`ST9g8TO37H9OYf zhaP(9(#p#!m;S;GZmIU{Ro3%x_x@o1y`!}ce(;0Q_vNfdM=k4#QH$ikPmF%)HT*2& za-QB7B@u4A8QE6MPhf-lUko>YJMr#c3w$pyf}c0}ddbG(^9NfPBxRCBCB=W34Hi}Z zOi`|ZCKHIUnhco};^$>hk>m+aZfvCf#8WaXd;5 zY|1&8)m-8nTm}Cz_P}WR7F#AY+{Z*9*n3Yi`OH0Kfd7GeGCQ&Js98*GYUsK|DJdnN zSS=5=gx9riW$m8JyI|u3CBqEPx%oLQ=N`ESP_I6ZES7dQ4Z7L%R64_3HQqvicH%~i ze4c8NdN`3tj~?)>i}qee=v>}q9fzXZIbu%AfV~IpKLfzt28P|#2AfKLV6>=s*ijov zDpD7n`wt{ME8?vH@s5K+V`i}P%1##RAKVRZEO98}pyb)qf zkUC-dGVGaU-bj#K4^PP|!GKapKj9iB@HNwYWK}l{3?y8u5Sxxd=EfFA`NW=O8FXGH z*^Epy`EKgi7^nrNHdYK%&ac}Tgncz+VHGbB+US=W*Mx1s=p6mp{A+Ux z)0et747|p;y^}?jcH^+Yu8iVr-)zpU)asGs_P*n@gPG=Z zG!_g`)#`ax7QCc^;|8=S-ZB~voC1JUQF0YL+`}H2x+X~>jy|4@nwFcBNRP8Fi<)wt zlD3yNL^G)QawwNAC5S=!hP#A|89fq@60lhs%wlxHIEoh^;RL`2Fp(EVSK{Oe+)OZ2 zB4w`Baj>b4*UNQ@r~ya@2~I);j}fHuLJ8}9<1owd)xii-0YXIhxMe+y^)-P^5s4F> zAjy=V!DzXhiTlT7s*$)#Iuoq9EM|qMZ~-hiLgX;=B9f5nhC%?-V9?c!XAPCSlS$)j zUL`Q4T4{70r(CSnOJ&lKdn}o>48I6ML34A6#PN8E*75XNWAM548+?~VD!2;?B^-10b?z-uMfH@g2;2( z5?8qy&npxoo5)=FY`QM~4!nt+m5<_K0s@G1qWqY6gJfWeJ);PcZ79dq4dLv@I;v%M z)v<29~cXM;|o)>R@@PpQU*Iqli&$_SmxzCNhWwo(CrSXY;)OwJW zGlTD+K?=lrBV}t&i}PyE;U2n!6i&I1U3~Gy{eB-Gr`Ds7wk~CoS6?u-@|q7n``Lea z;e{8D{_?rcweq9C-`$mCFCn;rYgmhC-~|fk(C3NfzbWt<>jLYU+=tcQuTut!?tuH@ zR3!OU%z+*OEO$BPvN8{G_mi~mOZ*&|03?r@p(F)TSwRNI>NjRQE4?}4 ztJ9hM9`z4-EJgI{a{~gU^0Gdw5q=b*&$=M=Lo+(i4zVoa8T2WWmPlTo)!ckDalTsH z_08ufq|q}T{w`QrAA!bvmwlDbzrwH*qfhod>)sI*@kpg6<;LZ6lXC zd^oen-XMSXVeKwv4xdb=zMP%CW%gHrpCFS$lAO&DF@A87k>eV!>~fI-l#3DUF;`;| z(&otE%C`utt-d+djo1F2WgR_A@*Efm?sFuY!+b{WB5P;Ivi|N`WMohlt?1>Xb&6Ty zhw-lJGm=sBA{8>J`sPr5TrhHZR0XZb7qD0m4rgZ{Axv=Y{`+qxv)%md_uqg2sZ;j{ z@8joQ{lw$zXB$3w48R$ng+Wi>V-ds$ztvGf*a=kjzY%gCy9v=hN{(z2zoL|ML)F>W zzIL`s!cZ(lsOo}AvR3Q4(A<$qgRlrlX2>ZcVI+x%hiAt>fV6maBv|r~sSL?0oDlkh z@rBo@*)uaJ&7K?uev+|&FDQM_uufSov3`b?zb_vh7ATZes2eqG<&DZX)_)w^_GXDkq=0Oq}hfyVYigz0)>cou`6%#Y1 zE$q);h?M4v$d4pg{Nhd>yz6Gnbo*PjJDAlA}BMF7xw5 zwnQVPDOgxZoIFt;Ewq9*SZ%-mN!+)TGmF?8e2`Rw_NA?+!cq)W2hc&8y(Hnf3R1xO zr&ffmPa&aW8C0dn>oUiX>E2F~yqcn=B8Y!1=Tym5N}vo977h-Ri8}OxX5q4z%_U)y zLI~(B;FLiha1q9Py><()Lx~4+_7hgBR#rGBmPYt)V6)KhCsTOaX0s60_Q`ITwO+^T1w1VJ+a}UTD=w4}t zC+sFI(LvVL)7FcyC7!`om(eD}(9WFMVYT*;XveG(yKDU1ilgni`FD%HzS25x^of5Q zU2J_=fB*Q8fhe@)5{B>gO_*J7XkGSco}va+&>qETYaL^d6|13#1oHG9X1 zkz<5i|HJc)e5;AAtt732nT|~C3BwGD!9P*t1&So*8k&H9e5zPNay`I{V#;58#0rbi8!uu1Q(P z*|%6kpM`dYK|i-Y8YyP-9dzGb+?r|t_FYM~YEubjxT)~m8;t&Uhpe*2x!)E!@hd*X z7zB}*NoQqacIqBAu~LD*w_f&w7kqkZRcMaPH$+g_aDGs7$stTGVW_>dqcay^r)L7q zO0(RYTw(|3$l8dUoq|uUlm{2qT`!Yr7V8enFOxX2nvLI(5|Joup|y$Raf0=$qlR;D z8DBke=6-9|(NNkHVj*LN?7n z6Z5p`n>{965&3Z$JQ`%;Q3=-%Z9wWd!uXyjXCweJ$c9>BH2e@6HwMzX3!S#ZJuSAUT@DgmSYrHotwwls!liH|}c@ySc7_M9U z{`Rx>a=YK_oPYi`8ykQifNI)qD#SRIDo@YN_AWYk-Ehk^tldU)j8A2ooTZu9qdA_N zyLh<{90WK9*!h`2@kIXBt^VMWjYcD#5!aU)kJl&g7kUV}V;?Ov`adZw_OwqtgY<2F zi-vs>x3Q3*Q}UMTd%un>zqPhjVhzL+QEMTN&(8EoK+$fMiq^|ZlH-BsOysiQInIFI z|6MBw%m^27T;V&idNn!@VU0yJB}~soTXLqK2H>fMHfXg=E08@3vlr zf7kN^uLHOJAIN}2oTzV>F}L`N(RzS z$PPmvvdX05{g{U|e52qIsYN;^y-E+Qi(VA;*WW;Z6z6LA!b$pYge}t=%?dX3Dt823r4cS!9+gFPjcw_d~*VLE?T=P_sHvFU1`Q|yy^|(^_Jz-`bi&Vk& zdqbS<=H_@*sosusuV?$n+^erjsmDCAu24DXg%TFa)+(pg{$|o4SSS`dwA*SegS&p! zWqjkv@@B73AfjxU2o06l!O5d=9PfqSD`Z5qMcK(08bW)+?o_9djM~w7OWL7ea2cgg zr9`$`{Dqq&;r=2;z}}FSMxq2sd|=58b`?8lZIGv!?l6fF!RgtVC`x+bLENsDDS-Y2 zjR~?wFv4Jau#B>#<|zhCx7cVHjl)g!qE0s5Z#XM8DxA{C_xm z6F|xCy3V)GIaTM>zE_>v_gi(>zH8mOx4UnzNjjbGgib>CgoG^uCa6hRWYI8!fbtX= zMU+KU22oU^C@4P1h=5OJbRIg-rz05Ar_K|7&YS0x5xhO0@BdWYz6k-tRNY&3>MZ~L z|J#?>DJmoP!{74K75C+t(!`@m`A(6d7C2>msC_il^)9ISf6*J|a1wOEx}y=G&X z?XhvNzmU@kP)@hboT4*v+%=#nXIM3PIhOsIAz`pHJn$Ur_$jMf`%bHy^^LU)L?ChZ z#|IEX=Y0`^W_udthqfmzIlMjl*dxrO$iPIsr`z2iLH&jcGx_&Sn@1&b&SAw7Y;@6q zSY!m-%}|cLkw6t04W4pBY=AX`B z>i6LevNCtz6~-7&>jz1rS58EnYDMc16E@fz+iJ1|6-NPW0tpnX?{qR5xDKrr2kwH6 zkLen#8|woisQ>~bkB!AL*(ke-XozVJ?C&R7EL+(L{^RB@%%5cNV&i;w zd&A)~=gOt|`Fd?<6ZQ*NFPgP|Ri{trX=(z7l>JV7c@%Nn*aj)J3GSLlf~pb< ziEvRHj{I8m;QxoY#rXk&CXozNNuV8MM4FnhqT?>WP5|kUbkjlSO<&8Rt71FSZ9}AD zOll&oa-`N5yy(djkjohA^Xu8-ZGBQ$5IiA#KinPBWH^lwhPK~5rh$#Qs4&|P(n58vDb|a#^cC!0^Tkp_2o$N zS5M+g2uIJ_dFSERuM)%l9xJl{rsD#&NJc2q7`dPIUHiXco!kGF8Y()HNY$)!z*Zeq_y6#| z`|dmOEjRwJKYr%Snfo5U{pHqsb;JIz%x7m;mdF1u4-~R{PpC9_J?}DQYUH%R0 zvi0wYb2MjSm7W5Mm5r@|>zmdbqz&_DXGAEQriO55-#vQn+TEkQ zo?P3H?p}NDs4T=EUs_s}bZ_>0JUAWPer{K{=y>3uKKxl|l(-{Dyc+=nw6q8tsw^bwE=DqjtKW?2m?8`Cp???;p zAxEfY$w|>90y{Y=vQ_DRp62Z1+uPd@Y(MdIekpINv|EmYg-jJ8gdRr5Q^9o4aa!%e z=cdZ4+;0Dfy}&wN zl-Hp|Kr9$QrvNr-jQRHsX9}SdOsdXER-rqI=@CrpREVejWj2V6M6IR49LCzExxv!; zl@$#{xM+2{lgU+A%Vpg%$5;3J5dGE-z#a6F5frEmxb0lCxlp%AKr|%9#2f)1oz2Z_ zVIAC+t;5e=Wy-kleHR>@E<<7ljX0d+fg?1H zkh}hV?6}{FB<+)-KLR5fr3w5;p!0Dhw>85EFTn7!LilCYjFAEB5@U}YhAtYA4V@k6 zs{-K6Ha43)fZAqZ@({99^CZvkZEj$~K(#7_;!T~UVNj&0WE4cP;1<@bxrx(8bwl`& z1I-T{KhJPo&_jioCCw9784(yVtJa{`EjHr#-Z_$B`Ezq8_BLBz%0M;^x55wc6!rS`F7yGQG2 zM&tQZy^&1xzv-qMN2BT!q+?rK8)wp;vfuP^s`|yflc!cPnZ>p3?a>HfaC&oT8Jjc! z6UI@6$@a-)?2U$7N5=^H>v@vNIvK(c!?kuY=}MzMTxhkkxy4!?>x5dX*?lY)&F5;h zK^YesJZ8wMK#tu^q1f90e{HKE9E2e0&5#f$Y^>{)0HO(B~J{PJ7CV@?=OHlv7b*p9QNEaE@>G5F*sLy)Qz#{`&v zrs~jpXpXm;F{WK&BX(U`(iA|y?$gX~ZNfGNR}GNjSc_!(mJV*SpyZ3_hT~CuCOyR+ zPn;W%cay1Qt6W&$+PWP|${9yud*f~Nc#|?}mwJ62_t7z`qEacL+zGI5#Zq_JBH_eO z_N&!Y*p8Q5x3>?#~Rl+G1$2unZy149=!6oot+L4x!>E_Idj#{POqyFC_6jX-noOH`R>tM zZ#;g?v3GZG+rR(*`(OD=J%_a7WS?hWZFNcUdd+n^6QT-PT^_pTECuwe73bKon{GL} z>sXWRdv4p^HKruuLuPq$&qD`>3SY13QvrL>51B%!cL6gZM^g#dP$`?f4q?wtKYgta z0>{V-0s)3#k68=qKi3R)`jT=fKV5epM)vRDc={f%SS&XedKmOzkP3&EPOU88 z_jqe{ZROr5g0n`i(dm`T7yuQK0>{hW=^i_F3nE}J+|Ie#a45xCFdV%fm)>mWa(hdDB0d7OiiCV07B(__t-+J`8;O~|7(Fom) zHUl5gX||}@96y<7${ARTIhss1q#r|S0{f&R1_W7!8B>93V+T_-BMcY>I})O28VoDY z-ZOqON!1ht+I;OnjcU;wed+wpL}7Ef>hGDIoj!b&8HZbUkJ^dTVc)OE`~BrbKki}d zSuPZ!cRlJ9iv%Htcf{`k;pVx96DhSD`Gh|@K8U(Eb_V@sBW7vgxNl-udo0bfQ>Wi{ zd$My~Fo*kl&hF7$`t4>5QaIJxAiPTY2mmJ$Z|+zg;X-`-*9)y=%th}ITZQXih$rTb z6am_->)qQL)#FbZ(+k8@ec3lUrat2tjH$*|OHT$lGs6g}Ux6g+{$#AUWfN|dJw%|x z3P$qljUpTBoJKMBosFaJsZ)EWZ&ZYu;c)kMbdAo$9iBY1IQyQwTiGQ1^&|JiZ`~a9+lXu#oKAh^scTMNi>LpUUHdcu z=YU0r5DK{WFFjL;^PFGgMUS2-lzFRI_DizrQQHs0n+y0`KBL`&=8pX`Rqh!EB!E1C z&atM7x7jDMDFfJ;Z6PC?!;>kik*^v1{oKYTu;p1{vI{pFl^lr-2Z-U)ja2Hw@>UUt zo%)d@M?dkz6HlPe%gz@|rR=%ph5GXH_}1MWq}^sT4ssU;n=aTH`zP$tXm9UKKa*b< z5#hPHWo!T~9Ac{7B5~Di3uTt|ju*V(1-MRR7jtgJS??~AZ^zl$y|rEypMC(J1B&^% z#PoPZqb4Y=u@QhMu;vYn2@sCwn>`?r>b6GDz?a!x;knUPU!Hc_IWk`V(zReCK@+z8 zRX~$oA82CsfdJ^v&YfE3&avY+UX7XIIFHwkQ>o?|O#E;oX(G4wAHt2lS076Vt;(9f@RBQ^Wq%lz}iWWiG}4e9-)__7WDnhdV|zxP(f$fytNn(@ z#NQSlGulKL1%;@pQ3C`f*5B@Ndj^$I~=6^oT;_?LYdDXE?@9vMTX zdk-9^A=tU6l1EQ@PVBiUue^-5v2zc$XtHBXPOgQaA+ldOb@JYXmAtK$YoT%AAzE_B zE}EC-eqle_wEw0j8qFFjAHgeTK?+y$qCf_tKabOQVhU|2wn?vNd$r*gcRvIy)`KV&nOfu@Qf$@ zo0b2Sq(IW4!Xv@R$`Tf)Du!!;&M;hXoav=a&oTGm(J;Ml_KdlkklDH~zj^Eiq)wQ% z5LV9O!?Q{{_y*?wKM>^mo_J#OYHW&Eo|8yC`)nd{X*V9fGsz4_>%MzFo>;mek+|l3 zB5~ujiNw)UiNwu5I-lsWj|P;=o>V=XTY8Qe-?K`b+dD(g|DTv;4X*Z{4BUcGMddI< z9vBJfr!JL5bQ%QvjA!A6DC1IZOj_IUeqA2$X|QH+3L`$l>x^VkQUc(xqyt|j4kZne z{OOtF#p95{Fz(0smVwZ50(^Pfm{>+z3jh$l5{SU}zJYN#?kq2FZ7nZ5v+r#yntnkc zQ)#!IBh|drEv}csROkjU;RARH|3E0D$YlYG01~4!CMpZlj}{5PD`N005ZUNR6m$ib0#qeXwZ<W)>OBe$N1oTD}J zi6Rl%YYd*h|A>#eIpvqpIj76NZEa#kWv`S9`!7HbS1$DzOOS3$q|b4?9<*@5krE71 za2XRe`$1mCI(mvKGVxv*pV|@mk7}2GDwmDLt62M1!Vv}Iv>Q+#=`-p0Bio;Njr1MH zv2OZJ@HM6|PEejml*g@NY0x2H52mzvtkM$AQZq&xtA^$xdHGMRUoiTv7h@Oon2F9J z>4_vK{K={hXvhE1la$b)MUUAqrV$L7UxXmj5KdD85I5<@GYrNOR-v!d`GrV7-T}DIOGgHQdv2DdauUR z@eG#Xi6ntf`jgpD&uV zrD@B)f&U*!mhs*XBfd<4ouknlVQ(c6z~2~Za!|s^*-B$YzrNIM;@{+g&*Rm`@e5tt zH9c&NxHX-gTfs;?Ia)im^?m#=6o&pO>+I)K%$x@6%LcLxm+Hts2|J-DG zNrAj-wWa0B`K@v4#9kzJ;h}neu#ny%Tx_Rv^@R?`H*5lgfW^h7LLNf%KjzwhJS4P@GCX4S0*k+Dw{? ztalwfpQ_b+rggLuJ*#(W)ybzy*Is+ibB^v}JZVRZ<9A%T_RJiiclx%o|8Oqt`QBfr1u+#we99-l%`?Qq zSA9alQN!1iFrMAsmOiJ`+1@^T_;_z)y+v;KW@~+8@9^=R=y#B)-8uXIxSPIiFI$=n z{AweD$UYga*ZjeDIeX%|w0r$cxDwoO<&Jt7wO=aIsFeqkQg-jUly}3;mUYwhhFE@j zIc4Rmn>KCcXTG{|K|}X19d4i+`V&<@s4(r`aPzcDCvpdkPNfMOWbT+X`ljn?^oeYF zyI-!=NiL;E3no|bEg%>yQoRy3ElaEvLw!riHr<~l<;etT9fX(1myx+KGo$s$=%DenRGG`kVp=< zCu5z{!W7^UGbwajrb8k?z#{wtEwB{TxfwsHMXM(a z#M~h|XHz5(cdUPHVfg8-EeOE&*4F7OM~x$M`Q_c6-R1mXHI+>sD<6x7Z@MWQxjybdce{#d}?&{$4gH_7hK?wA;%hLL@ zr?kVgs8q!-OXbA6Ds=OvX-kqBB9tC(S~7dkv=$Z49ob!0rTO=mesHk7`zp?xCYt8v zjVw7w|=Xde@;N& z7Qh9@&>j%bAvmJAGZC!O-r*+!|*g2;i)X%&i1>qnt0b4QQfRE26X;Wgwm zn)9nS9X*PLpW`;-*p=mT(B#E3`6w0&!(MM#SirynQY(=r<3u$QZ@9!TE)cf{)EFiU zdaaBvuNqP=m>#Uu~6L7B7hG=D| ziAimT@gKBE!wZV7#gJCQ6alY3Z~cb#0btZD|F$?Jkwz?6ri*tUJgMK)v+{s0!r%&f zifYoozzJ_i+7cj#Wo@1p-V`tr#>4AoY&a@bvH51Xs1Dv{3vkxZQ7+|(<<{E>O1N)( z#9b^P>-$$=A~SX|kth`GAvR6iW%u#Wz}CiUMTmDrFQF>@(*iq$`m5br)S5`z}TO^UV?!z zEVee-z!Wrp2C=5I9lp<#^V!si>+9V`e4wgqdsg52E-~| z$&ngbv``uR_V2Lb{j~MhxWM%76T&IRQ^fe{PjI@D^Q(OOIS%%#w&wOIm=n>enoTyQ z_B3z_2cSOCwWaPZ&8IIsrg~%G?5|1az|20JWl7ARMJiG%X0` zo3sEEtrE_vHa)GkS`nZ*wTL(8Xtmmm07m!n4nW3mBt@F);2trFv|laaDf%EZ1#_uq z;NH2;J*IrYPRvRqpr-+RdjK0ql{2 z(UMxP2(mSL7tVRX(X4M8WxZ7g<%!zR`j*T=E;L1ufO%5!O@lWb(J-ldT-LCgsUjT` zZ!@!Ie9hd#f52c;hiWPIx7Kl@2pAMo9Zrg7SSIjCPz*4eg7Yevku%JYJNg^Z+K8OKT*Gb(W*Gj%z;RZ&&X6Wc_nIe&6i4VyvCW*oNhK1) zYDxkoE+Yxl9~^{ALSbOrITzO#Rm>eG=1&5D7T9rak8xU_8&Qm_csydmXM_Rf^6|oT zMS>(64QGqDzg}utT&2;GApI$Y$i;@=E?XY!ABs`Ea(pqZ1whE3MUX-bBO(Coi;Ksc zI)JSmRS?60+o=k5)U=zrn`;#Al4^pc>W2g0+)_!pAZ`7$4*Q%=%wEI?2o7(_S0*UTe>4CdE% z5ov(O=p6TQ#moX+X7C6%DP)X36hev67r|pBy(RrT28-DBc`PXWtmTY34@4Ie? zK}z2GJOu4}hExMo^!3KoZq(D~0sNf?fisXtey#?i7_0)c7p?&o2GDQ{6Ag?+UWyyc z?4JnsRKPn3KocDE830HF<)%$F4W}c3TLEl|T@OUB2f+6LO_)XrB+^`HV2JC3qJgx6 zu?KJEsREGdja9h;sydcm^Oe2|6B;ZSz}RVp6T#D&PtUZ#8AuO$#efO*nb3^pJNRYJ zTxqqCqInAh&)Pb}5zN~(jPtDEo~nJisG5@XJtSpSR|VfWF4^xHBO5DH}hj(GxU>oT-jeE zwLPO#1QsH2iDsd2K~6TiRRK9npX34gMJDsD zr3CIA0{I5b0tyY~Y>cQX7m|-BG8$ZrR1&yS2W|N%Cm0nsns2w!IVrqVfk2qJAQ6FUw#JFQ zT-)fEA==bwJu!VDuE!}Fk$ZCabV`92DOFRS!NW{rqT5C7RN*yAQBod~aVH+ofK@J_ zZ&4O&G)ok^avWi1nuHKgA(2SGUC8-aGdzagqCysNHScRmO)h)34tAzg)~x%*W~qgz zG&ij)C?>r~C&-iId8K?dNjsPp!jFo=rVBJn?Sx|EVQonUjW$FRNai`g3+*H8u|j;w z5-~1Gg~`5vIo3KVS8;+Tp$9=s6s$~7Fprce%7;hkj@GQybM=EId2kGo#!0i4Wx?r;=U??9FalAnb1IpM68bVeRH&E2$-KT_VX5JWK&JkwLtWRRSn!SboF^|SiEj4>E zY5b2rg?#jvLodf~kH|mbNI`x>KpBLdFqM%-8Y~9ZH5d!z2SOKi8%@t}-rO<6ctWDO zS5(`WV{=}=rwDaM$w))WeZD>*cD?)hON%SZi-Wl{M?8RjquFXj@ai1*NT5Q%F29sh zHVWIx7254$zD%I{#nsVLl=xVs0-S~2%cG4WQRhax4RT{nHKuL+gxdIVE?hi*=FHCV zPT6s4)y2;vIArvY>Ag}U1izW%Q*YS&N zNg_ajP_Y!4Yj+7^@1~ZP#w^Wfi@->XM_K3qv8s#Amqbh$($F>BBDdoifEEe z1jmM;m-GeFYuFE6bImo!u8BnWct!HATJ5gnD-QjZzJ@bTYzzm3;YRS;uh(kze(-6% z?-j3jn#X3vV5WTRnim{Aspk(KrGQW<1;6xL@Jk;ve$BU%uR(szKOOotay9%T7-`88 z-y|V=@Gm+l5TH-Z6lR*hr&rVz#zES8g)W^}>1ufKO$OS4XDK5XNFEl++ z5IjxGzox?S%y>&C|LxA!_{`zscYWerb1z?e_Osu9{^t5?if{dyw>=ASJ@#gH5^u#V zP<1MbSl04V?`Cz7(nN=`M=7osmi6w&egQ8;zlaPSUykr>`d~Dk^bzB zh*gptrjwEQ9T3S%72y|Sxeu%Do2O20ZsMG8wc4ATCr@pvPahy|<0n70anok|hY|m_ zZaO``VC~T}v zt%}tJ@~>LQ5f~dir-X!>YQ4qX3@2LdN}VfBVDK+3Vek+01@D1a6_Dx&Vq12(o|W*J zZ|>3CEwArLL85EyTE8~O$KZj=l< zu{QQ(=*$CRk%nVR0w$EiY2rLW<`B>&33&ySS&&wPygv_sE z4;inc>mp;3WR|4haC6PS<(4D?YOEBxp=uE(d&ln?o#^+ot8;@mMpX@0p$x?#61NcI)^9~rYSc~lBaISOk=mda z?chbb(w_sOLzpG2SdzB9WTsTQm+hqxw9y2~P#M~!;tXqvLQ(}Ve}7JZVC{8AE;F#hSuS!p?QFBEV>amT#?in`MsfmM7c~H^8k)Q66#P# z@HXOmvj--@r}m->yXg4ULN1=F4KkTJDFkf0BYU+{wm(?Wg1PR<5&r>EX4vj}u!e~Q zc{6e>Hor2Dw;IvW2q@UAR2CO^taW6|$b^Zc57AOtS-D2k{&KI6Yg>u(bi02Dl`VuB|U zN!&Mer!mfG^fKvMtv^_@!u$VHSzbOXx^#u*$3TR`;3oZJe{pqnQX7g!=Nvo$i$nPtUnNgfK_$kV(Swyphfls6qKMjED&M zZl2I3+N-x7Qn9mR(gYZp)nr3BLDd6J5joBpVxC7Psz&OZo2(48Fdswui?r{-3V`r#mec{|AQrc&B+t+ zv{9|mbi`E=5>mz!3;jO&WmY-@E{x*j*~G&X?Yh}K;G1rXFC&2lu^MFWH|mpG+M;W* zWDC0*!d7<%1JHlO>Vju1`<-=@x-rIPBV;3bB5OPt#I4UD4oc*R$v{dd0&N3FVbowa z;G&UoF)C2NB#EX|ulXdWks~Wdd~7Ugx!hSS{>!JOmndSRouGqg;q34$)xZmpagt%vz$hz2aO0vRVouKTr6*x@h(DZ(Fr>Z-%6+8 zq=~d0rk$Wh+{f}oEZl{zGnl3)NLON&l|M|m-HkZlH`*Bngeja~4f;+G>lag8rUQt9(K2{0Azi6@P{~vX`-NU)B4mlex z#TK6r9WxQy1Rcm}A;qu`r*VKr7&2>9Ykz9)M-J8e?oYLm%d&5Zqn{@Shb(k z9L-l(?2V0!7dAF+dt>v$?%bSh&&}=b%pr^z&h7l*?AChlgjM^=YPGIAaimT4>&)Yz_1cRCPi#T#!8#-x8aQtRFaY)8VCa z?>P`(qxt;3lJ4erYxuCnXvj&0pN^b=lse z0tOy^9^=zY+W5;l?E<;Jz`OP~ODC{_|NoHbyd~5nL(2<7uVFnI)F)+&5fLyC$OMQ# zF^$)OuzE5CkGY5rgeal5nF-y)9is^JxsdC@b%YCgR%5cxwwlQpAd$G8DyG<&%Utx= zKb}tKbMMI%AuuvOqOVspo2~g#`#t~2X`=Z+_GB`gXuUU`-v8(Kyyrb%hkiGo|8)>Y_Sf_IUy)zWHzxqUg=PgIQ>^k9P*C2*up4`|=lS}KmaSioMjuEN|G1cVFdBW(9Nc|>3l1fhvtQWn z_ahl}7WVzU-m^*9V0S@TIeUmpShZ##3$TUIdAgYkU=GO;iFF;a9>qTZpA^fOE2`~= zX5iawk{O$*4Ptf`pVPM?WPI2_^;k}MjIcQh#8_oUURite)RiMa4C|*_emRyQie8o^ zqS3P78WL&&Q;1k0UCKA=#pAW=Ua?*;_(q6|q+wJ$efo5K(2vbqqj+x+KMhrqYkJGp zir49QE7r2t9Du&qVc(I@H5V1UKbc%?LJ*hAUAVhyZEJXJSz_by7;B2u^6B|a@>a&8 zb4WuTe(bTw`nJ`5*~=KT{)bCY+fl3WmN!dg@#eRX+qwsN6p@cg=q&z-Cs<=QFk(N& zn2Ey;=3Mlb!~vql*p?nE&1@vYuwz#Rw_~nO$1Z?J!6$qWyOMFaLM=iA5-L1+gay04 zKK8|J8)&8xgi4-~l+2S%NF_WlAS|c_co6_M<_&H2$a*t4yOiMrL3I3KmP;c>{Pc!a zP2miVD-eQc5Xe;$k#7ma4JkLUWg!rhb*4bJw1+Li)goz!23zWHX@7YP3t z$qS*(yhsK&s0^I9E)+7v!^*l!XpWYNq0V4`akF(C`hdXvp6!!{!Lj;pc*7eWTw8na z4MlQBd?}1~MYTMKGlx?yJ9&hvyyL6Y=%yN-n1tg;vDIGMK)Z zKxXP|itOH+9*wrPMx(TyOd+*sFD|x`PLM+M>)8GO#YPa{a)Y2*$$2&djNrU-x3T8z zPzBibH^8=Sa)Tf8y&DNTYc)*Y2Nnw~wW*N8yin-|)kJ(ZISO8Rj-C z4PJwXC;;RsV>qeb#fyVA#ju;-;!rk>+{ya9*J_Q1WL-^mJBSNgvi)(e(c$cFe1=!)+RplB}mR(7BV#B@MWEfmx^T{T{f@t-H;8E#vbrW{ zuF7Yfnb^Z)>SXOH_nUIMh~x@<)kH@lVHV1o$;3D9oBrib?ZLnNX+d7a1$$70!%r11 zlY4B>{O`Sqz{h(h_N+IEhuHt@LGIimI@iBb?MTjXPv)x-rC;(9c%mMOMmv3Yk8e|*WD+r zFSH)}wv+oC)`#{tt^csUIsWhapBY)7*!PbeJNCkdJ~y`hcK;gd9@m3lkVgEVO-tq;Lolod6ezPU ze-Z8rBngH_flgsiXX31(%*)J%XOGG_*F<*KdXc`tmC@PAn6hkcV=QARoALUG{OIEP ztDf876-l0d`PSAJZh_I;;oHQx2@hjFk?>N-$YjAWJRV@4&dt>C0VQ_*vnlE9y0 z_yJiC9t4ABqz80fAg1{oW`lGj>DkNYm3q#=-C2z1TZrg6+nrB}46eD-Z0K9E9fKWA zNTLG`7IPP9g0yo>97|p=0Bw9oMpjW&qc5alit?>j!LM!Ye+J(O%PQh2vDGB;N*@QQ z%5b>0MHGfesdQp;EgJb>xcj9q-F)!D+vD;4a5Na`?)_g%rI&!Xg{$W`;MlGAnUg_b z1gseZ^C57dAHwZ2~&>0T`*jRn_~SLz<|B@ucwvM3b|f99K55 z@n3+A-;3Aa7p!-ZAL7&Y@7iCm|IUd!O=r=$$9cH}RW!%$)`*Do)2ipKF_Nj{SVy9q z&Dp6&#B|;hL&-G^2{Cf#8OggOoRePA1^No&=~=yfekrK}$Ltv4qd;`0l5jfbQ+KPB z5j$KvWrNar-Y~D*l+4w!%+d&@yuQsIMm|3+pPJ!*ioODg80e2Yk7VtdrE)(A1UMW? z_pv>Zaz+2z;PCuBfMuKfT8SDV4WnreSJZrUV4F><=IbgI!kq#Fp$yBL3PvHOOF(@a zpa~CW7Ku>|(_KnJ1g5%qH$V{mb9gIfa1**6d z;`6V!v`Q)nDTMjm(=RkdWph@eAwp7j>O49jBOsMLUNfe1<{D@9TbiGZ31`J>13#H3 znijm*N|NZPz93Pij`TY)M`V^qJs_=0(eZGktHBVehCuMJ?IQw4&`Av-KCV(CS4=iFHyV}mi`$# z%ER@;>=rX(C2C;=b<7k8RgX*?DBox~T-8B0us@v8P|d7xi3>DR?}j`l;3BcQ*&%qk zi;fLas=|o<4T^{?@Ema@S~ra55(T9oEkilDZnq!BtfGQ;%qtoGF_ zL?+yALC-}ab~aJSV4Bk;luOzvlCL6uqhWGqfm6o`Bn+cbhG5p_6@y=4hQ^hg53{}kp(o^MCtkBewD zFtB1ss4TwHXcVzG^2BOHNKEcosOeHx%1&6=gfS>90A@@Vf$LkHMB6y18Js_DbP2phZyc`rlFBjXGxsHSVYR;apbU- zrkX2{ka~Tb%daZWCiX>%Xxfdt@D~fnc(N6%uJC{^&I~Cc5QNiz2Lf-4IPh?ClM6Yb z_Au`6a`eKdFhcNVgv&G>^Ckqw1Tpqj5GP|4s)(?R_dFlzB&0*?D*PZ^H|r4S8Cy7V zVPlsm7C{B0JJKok3xG4*ZtH+7-`y3_?f(K=<`(5R7Svd@qHU?IQ1)hY>^<=z9 zZ^&zzr5lP1Ku2Pv-HsdQ48b_F^-8B+r-e51N7!S^#Q+77 z>a*F*2{(gJ5)+sri;YM|mcus@%rT4W=pYtZjlffKnVMthFr(2bDP5rjpjflreB?obunR~bpMxYSAA*-hE05|XnCID?nuq{+-^qivuvlaOd%#boz z3paOI1*BI9JzbUOL75meB(;(22|UIXYLNiI_!EF_Jfu$jA=doDbZQfJ^Prm9+aw|Z zL86PK%@6~G!Gk(l?@^zg2;Sou{(2q@~DHvWQcA>hW z8pD$sdd{edK#D`IuJUNRtAN}gVBgcGb*Be%m#-j=k|Qp-EBXtI#aQGjJHEp36Pb)RZ+iT$J(+G0?v zTM8#rxCnYCUmB+)gxU!lKzKG1CSr~rgVqB-lNeA>0!x3ZoEJT)4r0QDRw9*Z;0qwE zAe2`smCFivS-yl)P{33gcS^~Fu?3!;wDHU&*qNAlqkk4vNr)y=7t%D`%nK2$YE0iK z5*Vv7Md^;$Nlg~UhAQBSE_(8Jfw0wmh#h1{4k1QpHqWImTv4lV6$l0a1fUy4WjJ&? z0%2rE#)Vu_AsQ)~OIaS4&Ww^t;;o7z$V1|pXd;~=%^BDzj30p}PyYAnx&DX~6peIv zJPhT)O#%Lg{t@QU57vuYt#pQ+4yiSwqv4%uin7^3RG5Z3A0xju30oK9cTsuUwUA{HQ%XtPHyQ6|VCI5?VWsz!0govwx7a4gznn=rRCiQ%4)ziLG{I2wj82=UojDBD zUdn(l7m`)$T5c-I64Jxm#Sn9ZJCuk^P8}6f$DikQ z8AHLQXtc5acNBt(xSY>(*~{ngco3hW4Jk(o`v{dGuP)>&?ynJJ5#ggcfhPyf0og1Z zp6%fc7sgWt%H1RT>ZipJF$C6&G@69NrLB16;CPT#LN4-Shwen?J4Y_xW1)vaKTIyJ zkA{BV8dwX~S?i_NYpw6Mehxb9KU#llm+g^#(SC!8+aXNgdcp?aGXvW7;hmYDsLhQFw$FMq#>>Xxj~c^g)l%Fpe89!^gR-$02c@qf=CcdOoS9&&=_(R zykdPc@Q?u8$OVw_A`1XV!u{iT$oKZ9OPovO5E7+}p%;=tdNeK>3`}x)6}L6v6Ny5A zgOFB(;gJ%E5(H0!+o7)d+lZFS6t_(~Hs~8-Z4fAx@V!lxUNXas>2aU(O`8MJk6LfW z#m8mKM?z9INR6&hi%YZ0^a9!psixbXT4-umGzt>nN%$GG9^@=s3}GU)iogu{h+_9J zaOm9WkRd5KgQ$!%6J&{!-2@_eX5pY9sh0b6fbNM@)1XkGhwvPFLGGa%Y1bPesZ-tD zhd@LH1?@ltLMK!)T_9XjnZfIM!JJbRF@lB|325dR8y}Kc4mPTXS)pA%?E>8!68un+ z$d+`Er17+x`($OHyHp4?2~(h<7iF@BkT4*hRifx3HG137wAN7q3II=W_kxEc?WQm# zdyCB^29Z4)-4f;qV{VlMKjHbLvx2~SnawBg5QgIrFaX#SJ`Ss{k#;IfA8?3>ceBDUv(HmUC721t+aNbNO}8{sKEYFYb#4qil5pG@p13Qs11 z5CgUzq`!b+6!BCAn&OzZT2&|fLf`k(b6e^2o_AyV_#Y|#dU80z!80{y5rGj5juO{( zi+2%VY|&*KtSozro-DV4Zhc9+cqib&v1h}776=H+M+=Kg1}j4PuJ{uFm&dD+4YxgS zL@2?cTlU_L(1;r?<#J{y9fg7bB`^_k)rz`R0VmuUelJXVTg@Us5UPzyGQPD$Ip8cb zivTE1DPeJmzh43z1Td3}K+-mJisr}=4-^R@7EW%_ zh#P1L>JEez>5JRj+isVBIX}W;;13xL#0;JD(zJmX7HVQZYA}z?6@8LjA*ao3ie{ur z^^ggb{~qlFfJ4H0+$qc@j++Nqb*3q>wpx6ozJg!DsBunKRyS=$*kO^`|X&q(z2C3d{<* z#|Sxj^^8y`bPBB#3u*-ug~b$ktzy?lqieBjA$d#eKHWj&dmdG1)E}}yLQ^AQ#C(p48fMjsaTcbG?w}K)$ZT-!z5!L1l>~plM#j20RW&;5Z zB9PD2LHZt|c$bQ>ga}^1VkVwOC-6$w&5>IR!m_ddPU}Vc?<8cc=;wm5NZ6F&9q0D1rQM*ddYG@E^i2V$QFLMjlHg3o3&>VoFHu{|oXT>)$CX z?z!8CtzpZ~zqVkv9!98Gc-un{y=^)MkE0rwo#U?YH+&P?FmD1nLdNWE0P@xhzy*2% z`P54`9Dta&j?B5>x6T7V84_LO%_9@@h!{k3MiGv5b{oZvuFUSxqps2$;Ev1N0jvwC zkF3z2nb!v~8$8;E`owCJImHsnsm9`w6fPUUCPZraJX*>qwp6iC)UlSus14EshZH6| z%aU$4vAZR<2qx0-5r(o%^z z$RgrkU4*raaZIH4TpkT8Lb7P=cpdpzER)82IRX_$?O4#4D{wW`&SFHP>Jb?z5zpsM z?Xg6$R4B%+7Y5ZoxdB?Ewab@74s_0I(QU7XPKDk^4%v@{{wul9Ujr@wWxHYDVBcnc zkNpw*59}{H^UmKo|L9x}55k+_Q(-jvQxwWrYX-c?8W_yg1ZX-KatMw9Gfn5wEujt5 z$`_rW_sC4BS?9rA8@)_0t>8J8MM(%cjN=f9l_Nwa>;)FRmH>niwL$x6%kXxBUBEh^ zN^`R}nN2rK&R-u%&=Ryy8%I&|%4lyyuDO(|(t|djZ3Roq>D6Fm?$kB~&udfiD3!@e zKquv0Xb>1*|6)G0!7Rp)BYTb5`Z57U>i5 zz(t6p$~9|xGjAew&}=d;$_@;5707&;WIARDQ^-3H^_Xctr>V;mA?F6gXxNZkOhk~G z!9_Bn`H-fI(PCQ7#^x6lPw0JM{Wk3TX4;@=AQIJH5pT$iN<%%tVk((@#KwkoGG;Vs zAmcz?NY)UYi4sq-w?Vo{0f(@^2~FTAg!R!pV~to{vpqB!T-LWD`jwVZP&-e5QjC$c|!eIOrD53(8s40(`ydR`4!;hn)!o z4m5yL)QE>g!6C8_pp5(i`fSBW2EfAH0!3tq9Gan$cz`=4iQ|4lFX^he)QLf}aD!t7 zK~E$l2nZx-V@X_8H`y^E_|Q8*xkaJUi(!v&?szz~4ML2)M`17jq40~D=m5oHmt!o15PfrN011_Zb`Jh(F8s46rY<`_B6cZ z#mJzMT=2UdgeNT|V=Cb|rHQI0bA|a@7{8kEy~%V=F`S)TJJu#m1R_XZmd`8 zv^#U#$Bx&@4E`dd8I0;%(bKr)M02^*jwa)l+ib1eb=BG7P#MS6uPPaFhW1%J2H}2XV%(2ERtp?G$b8Y;ZQcf$I&DzK};<=3FwW}~n=$ROv$Yf=i zu>1R;M-E7U8i;KdNm$}dco3d*oApTaWlqdZYxaZ9p;?CGVi+}dT6Zo=SWY^2$E;7% zKXA>^@myqzdA6*Xly=at1WbVR^n9@*fTg;FJ9$Qh1_EFBCfGxGJC%&rlUY=Hf>&^o z^E8>yu)VD2v38BO6w&h&PL{H8YYG!(2cHpfQnZA}!*;mDRz+YeB3+U#;;}Og8v5G- zFSH?Vb{>W3p*ZSYEjTq9cC_M0!VgEXNQr?Lz!_7l;i%LF_+1SI8=2f?cckMrWbPCm z@iQcvW@5PqtKnQW_bj+%Ep7NbsgUU_%MUS_0IPp}=bePQ{B_DRk9%cX$ z^2{^ju$X8<2{8d+%C%b6suNG-VuWd8j4*mF+4V?dX)YSc7K<{Jpn9IPLrSFM8OOgs$2~4N$y{05% zrPF(`OIEjgo#Q+t5khRF5zGx=!^ko`WR_xRyIm+dz>Sk#7T~vkI>8npVh?*fQeC3U z7=(~!fV|_(EN8Jz_AftfFTfk5v0@F)8DWdJ?(p{43l3>0CdMArvHthlZ@;~>^LtJKph*d#&f~zu2trqn;jm)7!miINg~coSsJp z8`MjgVq78qpzlTy!km_PRP>-}gc>;_aI>!p=q<-^wR#LTDR$lj;MkT z>1@DWn5L>Co_0OW#BeG>)dbK&EevyJwz5#)drvcP!6^};2V<$y%nF#8P5x)F%ODb?|+$n??RNwC3p{r%P|1ii`)Zzkc4MdY0Xqz0^YIUHUDN@QV$fvi9r#8?U72yo_E0C8#1$N>%_K{qMv08vFu(QxDv zfyinoA<)r%3EiKZdulhXdjtWHJzYn47^->k=>HXdpnJK1-@Bt87)1zI;O(xtM=tF4Ul2b=!ULQzR@t*GIvLC2>b0y#_JE!$Xo0x)4a_Wgi3OBGlp|jAJu;$L;NHJ>xihS#S@$raI`8 z=EuqOe44*4iN*%{C=zL4M#4QrR0NV3M#H3SVn-GWVXs&qpode-X55Du zp$(16h8Zeri_j|^-Ew6BJhPXH&W6Kx`|#+VGEcnVV5AiH%D(&ro9lhZ0&Af*7#BT= zd{sshW^@RGvw-U+aK~sQSdZzzQl@P+kNwIAKJbBT>vj^2!>T0z;^BuMe&pPR3m59v zH`T5F{^zVdlcsvZ1l0u1F6gIWgE0PzulSUFGCLak7 z6oo9h4A+is(A+8ciprx++nd&-4tYDOwxYHGcVv<4OX?}!R!S2>L!xe?ARsF~ftbre zHo|VkDB$v+BSn259z-ePpRI(p@Pm3bSxO%WJskQsp*M%#N-VSw zgno%7!A|hj#~xo}6qAs?icKJEbA*4w)k4L>);clKb?nf&8B#-@v+|HFtxrTj>rgi8 zP_bPQx{z{7&jbmt&8;IIhrm@r8M!N|CR_-{=59`@&`nX0T#~F*rKu1wyw1`-evVYC z)x#0_;>)kU{`!?T3bI6EWv5BVpGS9g9!)$8Kd|<5NwoKoy1u=4@#4jm$N6~hk4Wf~NGwmj<*vK# z%HG+%WIcx)uYaITjSs{hjmIC|d4l>@b|%Y-(u%3g+RD&t=?f++1TrnNp3@7nsZ#{B8xM7fropF;}IfDJnM`Orn9!h)I%%`{UNnRPT z33pPl)A+CIj?_FcB~uR(JBTbT+v(Ku^1O@vsC+{It^H`|?@Zi@6}&=E5?$kktjE`o zne+QXKN|WFy*8{D(>y}L9H`1A6IBF&K*qNXDJZWKb*ew(+cxFiXVx0fOHx7LkEDX? zI)f5CvEeDbpjfO@cY2@!1nlt3EG?E88g&kX?7M0OXZl*urcS zKOeclI%`T%4$IGT>zxtk&+zry453`@UZ*ADw^e=x7&;DdOgzMHc?pGM^*1Gf|m{vST^y+ZG1uQZ={QUEJG+)`>L&7BC1N5ScBv zYc+`$Azbhc?Y4ll=?vCUXjCZ*U3e^(CRmw$4;Ztqyt2S$;AJ+;xT5i53u6n2S6Kxa z2N9AbO3mdeUBytdbNO1Yi76QL1<8VCbXciE4U;bb{aCqFD=9QCYDl0qafTbUs%88& z??$K9CL{FoSlMq0y({#KSL6$Vd1C`51^Wym9Sj4XT7g%tX&IsR#1#=zC(`L~gkN6M2M1H756R*&b3R$+ZQ?4(r1ne!*xy~c8D9*z4lRm54{n_I0G zVIqO42YT=>**QbNgBisWti)g)G7+qD>B!dS%rK60UKX&tJ?x&)*U0RbHO*iPH5%7h zSmR)wYpSGi=u2ayy}*6jta`*V0>I<-5FsBoHcp=0*la4~V{>!k~LMfF*sp?k-q{k8s-q}V(C;=(t2>v*jedNM+9`_0tvjO=W&*B3uhW4Nt zUP3&QH)GQuj9st@10jP8Y$Sykup-#Y5*p}VOHVtV@!2HC7o#)A=8R<;kh!;jZW$R z$IqNO(+G&Ix^<>g$k*-Z&xT#k7oKO;&Ba2U{MNG@8)wcu@5*D1GuC~oL=|i`8e8VL za{GeRK+{t?eP6y%r@%)~)uHV;G@tiD5Z=>oh+b-1NHF(GE4^b&Rujur{m2 znHrNR@J7a3S&9LC8q%C0n2kUEBxjZ=26a+2GUBYq@l@?N{q^K)PyPkcVL$~SL`}15 zS(W;h4wmsp!3*&AOV`dS!yUIe}=hSj*-@B@Mo337Kx_hdpXL_5NWRjU|B!dt# zBmu%&%kA!(uCA)oGCiI6BnX5}ksSe1WDyZmo=-t>i$XNWA}E_nSQN#FPkgAXYR~(B z=T=QRB>3L%b#+zUd+XeD?>*-`-@d$b|NZJI`|p>Mu&l7GdP;w*CL~1OPkhYAx&9G# z{p{6Ooxb`o4o;ydp+*xS++00Zetw&D`GcLGk47JgL>{uD(J%1Nm+T#iM(^kUt0eso z1aqKU-zbc{f5Zolevb1S<0pB#zHE5hA+lHzEHC3GKou7osN>G!g9FYL#il_JCd;2N0dmB#OA3bN#V=x-^ybwY_g|yx`>#nz z`kRERJKtYJ40n^qU%6SwZzWI)LjWW@M1C~iaKSe`F(D+}@3wOOCn4&is7MV)QaS&P z{`A;rJV8cjF<|l3iTJd78y!FD0xdF7;5t66M!v?-rU#R-CZxvqjcw*;U3!M7tcm!@ z^pPQIfV)A&BezZ;p7BrwdLb5IspC~QX03rB_2us)6Mh?+a2h#b;1LYiXCVb%G7Jfp zeI8i`CoinJ5Fkr^ef9K>r+)P6t3sg}vVl{Nd~Ec@R{k)#Mm1D@DHQr93@?A5q}^5b zUVRk>zMXcXW9wUo^GZD5X%~sy<+PLgxjf+2FHkLVA=Tx6gikPhoEdTl7c-Ma0yU&= zR_@DzYH4X8TbN)uCU+~_J-F|;V$&lDT#06arapJdKVg6h1UV%CKlQJ3BKxOnIc_;W^~G@bJ*=EbWjrC#MeKtR36` z6x>RVC6$Pes9_d=ESkF)3)axk(&F44!HLm0{0fl`2{;qi+}z^Q&=71+AcLx3l3q^d zB@Q#5n3;0&9#73AFvzBo`B;1|6dVhWg271pH%Qls#4sC3fRW4JyZrm=XUS>$ChCs< zw#wmp^ak9eeoZ~7zJT8_IS2FFc79`bU~7uQGlmJ^`Od~*@B1?*uqFd7VVYz@H{3bZU)CRwQFw$pI9vd5bkF=tzT zG2X>cEqGHdFMS9kSth#}>}sF<3w;A>B)mojK;nBu7cbk+r}N7S<@}DLRawhO4tkM6 z37QK}~WcnO;Q4 zk#L7_8Hl(u0spADi+WQ@zZAYwlZVC!1IZL(6-&VH&!$ngrbtA1R2r-huZu`%94NemUK4tQj+akv0xwY1&^~dZ^offC4!;;{ zC9af4o(R5f>6=d-A;dH~nS@VrEf1lWiAB@*Vn5b|UW;EVUcB^=;|5k>yhiYjKp~24 z0Ivd!kXX_25e;FR6h%8YoZKB8mqH6tAb~-nirbM>HxF8wbXa1K{r=P5REjL<@O;x- z$y^wTCiu)?ioAk;XhoDj*1$07b|cYrI)$5PB!>UNhUC!%52TW$3rob)SE*QhXozGs zv7uoCJI*8iNapHDEK2rgt-=|p2pY;IKW|yqBwmFCfr!^GvC<(QE~cmwWYQ$?mfIEs ziA2CCe>eF<+p5XoxAt_HC zk_>JWfI)0(a*{+sF=H}LBxjyYRW*@u@OJQ~)9FlDO^DT8lzLL^1q(0n)Ql~lB2q2D zV=fH(#g`gQ9D04EU|>!_5pa{}BTVqvhBHGmiK%cV9chERv*eGJ@H0}1V$(NX1)L%- z%wi`(G^YwHX}9F@+XPI!Jh zMv(|TEaGX2F!`)x2`A7v!L#~zxs!C-i+4oEV6)(_;#(>CY0=z~^FE~hTLv)_BCg~c z6=r5($U_R-bXt-;kufZtyhSA6VKqn!SZE}?&puE7<9PQz6+AB46(zxhV4D6*aGPuk zC+-D1GR(Zz#h#ZQ6m<%RuL$_k$Y}r?Ff>8kIWjyV-Xc-fb2gnDk21~ZPJ^LLD2c|1 zy57qx*F6nAs2UlaKeH+Y%H7j&H2TDe^XG57D>tDB(}&;g_X7aY$aUcW`N_oxSk$sS z_~dFh6d4+VS{;h9c1Dq<$qqg`Ota7|%69~BJw85#teAk;^9}gn^}b{D_fhiLjTv5L z1^L9(_7+8vCBzKNtYp8M!iEnsNQQ|F>ir~YP4gQ9^9<51Z9V)7@;jD@^ z7hX$rvIlrAiO+?v7c0RUdQK)`b;1Z-GFyf;%;wd53FyC*B%(T>zgC5x7uMJ0^ZVb# z`(a|jCC@vdzjf!SlUkoV`7~-53~rz>32zKiy`X@SB33A%l8zSeRJc4aijJbfs18yK zLvmXi&HcKNJOL62(QMv;gK$oL8BTmad$1+6f~L?q(dIirycQ;V4A8W2Iw8fA=!3)= z!D#j67Z?SRse8S!CopPWa#=?zG3^Y@ntgLF^7Iv}!6R3YGmL^nOu`281)SIAs!o7P zI-_s%e@C3QbgkeukQqe(tTBr$;jz?qOKoZv) z@el$JMZy6B&SLS=vCJsh)W-qE>7)>pFbL{6d5k#`B;cm{mE`!xr#c$Ai~)zI@Oi0| zLDoXj3drY+EQ6IKmcwO5ps&y$^9O;$tqz1m-e=I8j*G^OrHWU5419uqA+d z7>R?w!6ONB;yli!{G94&VGj-;+^EXT+j~qL;@E7jj3<^oVe<+1yaII!+ z+~Bl()jL^*g@J1Zo-*(}^x$Ya=;0Od7?GyV5*6WCT!FmSCXpmm5FwX&CNNP}$B*41 z#PW8WVXwOJ#{zT@j3Wt9bb(G33W% zV?=A?+6tUtCd-luf?=G!b<0t8tvQ}9$ow*plO(-z z#vV8nq%36g3Rc41NP2Q!6UUP3<7CuHjS%rduD1|*Zo&~+K&(ht^TsrZ<|gJ=PzHX) z{e&kpXXjUzW}mmbGX0;|9p61B0Woe2d4xC3&7m8;`tV_`-hIO-524d`;WCIqK>moe z5~H6evB5{AGkvzi(SAFdT*_v{zZeM&g-F{%j5l#4EXY_qlg(sBUwy{tO&+2y(r=O- z?u7%NVLTkkz*u1|9+k0hAcv|-(=6ULA*1=;d~p=M5>T)XB5m9eH!J7 z9PJ4pB81QZFK0CQi5G`t>|_)L6#2(VW@(UVnmpvy-ALiH+gP(-q!*h|Kb?~7V|HGL0;#kC?Npl2vP^MpE ztK0#RXOy18D;5mCp(Z9yoVf8|x@~9sR(F=vfOy{qL*58JF8C{w!vF@8C_A#P5WEDU zmCAKgV+`U(V=1ECtc-7XC=&2kiFk?>Q~p7hfg0!leoLTu4tjiv zc+wB2iOmC_Tl^|%>cVZtWNYPeXd|N2xHEBDj`_zW+><~WV^Kciv3Kn}%@e`pUY^^n zCk9iV*i0M}Bb;#rF4(0G;T?=CZ8A*wGHUAFXeRBAleGZCAkL+DWQU|;fj4dRa-Pdy zRKKm>PA!dVu{YxZAuwd%q9?tY>6O*xOrrs@1C!?vdw$~uP;kBo|FUKUM$F66O)=v% z0Xn5agThw7JZt#~iy!v+W?r5d$kI$cP03~=?Gv#qUa_Dg_GO)n zO-z790wYJS9miEAgUUU!GDO5?d~Ec1Y-}`tWNa*Od~}RVOm6oRk4_(s?6fy=)S06t(Wq;+f;e>Cvt1Al|<6zsL$Q(Br; zBBS9fCy5YY5AMp0l&lZSiEd$x@@CXzK+%ejXL?%v$vj8 z{*zQLNovm!94Q_t3~`D&=G=RbVzSdmPL8T^mCmDM1lve>qF9-*D}{9M?I)@47=pMU z%19jm3m>bK$Y=rNvZonJYwR@;&^3W0z|sKOgaK2BOc)jifDrM=$s9}@Uc%p4#skDr z%?fccZP7@1jUTYsG=&tYC#(78h2!dj7ML16O?Ll-L(C#Rf8l%{Z*!s=qeJTE1IPZN z#2-tXXjG1-)A_*hum@{yW$SAJ3Nd+@;rE$czA_o&Z$iN(L~DBDL5?m55jZ}nR``_~tXMYo%O{Fkmb z|2VC_EFbh(^QnO8DWsDD)VQQu*aSYrIuAsHrcSmt2$*u*hO zk1X3lgyVuzrWAHPIRa9~tleW?4I`BoYo1^Ou^h_cR}bvpr|#RokFZf{GT!(4*UJWL zHL-uk8O&viXuTKo{QQ{*&FRA;~JCMC!i2u_7iy4e5+%_)bNUtW9s&F78qb3j9 z(gk^PtHLIVUX)uWppj35RArC1yx^aujl5Rz$p^oICV51umL!kLi=LdboY+Uf#)6OK zbZZaIDC$u3ogTHL)vYjZhgfjr__lER!j?pxfiRvT*pS0nih;sj`?+!WY_yW7r%;Si zgaINhF0&IzVxF_mZ0ZF_4kgI{$Z$5Jql2m7ZN!jMmKa1rf?;(v9JSI7!l?pdLNl>6ZV~WJNr-7MIC*+) zZE{kb!0JT`2VdqBR6qg|Y7d^hMlKXw@kRALaK#xS)88z9XkAKa-2a$<03(kB?_KPR_x2Z1UNz)SwUhB1~?|HRh9qM{lKgL}-u-eG*hY zI4Ir*KlGdE@6hm&3>;ZTrrEsB#504=ObYbKLR>Sz;W35Q@}dcqnI!!kLWH=CfwP!?0SZxmVLbtE zXajC0>6(DeDxwUV6otZu#0m6?^qu&ND(0R;S-$PrBO(3XWCbEq4mMB=Z{|!jR z7EiE(`WJm{>AL9D^wIRfk@X@JyqJO(c~e)Q_uiKX1|aCGU&kFAYS*fF9L?Htzp^{*HiFk$6 z^>e>s1sUYo*N{BJ)cu44kiOU4JDG~jy=&+J2|xpXg5deOVMaNe#}2Jy}UdzcQ`*nM8wi0ilJfL2d1Zw=bQp|iDHHX#8QNCkei0F zj9PJY3w+1fz|^DE38hBS;xb{}{+cC?=o!#4f<2>;w7~5}CG3`8^4y~<3Rz_o**$Rc zOcNtc=@0xR{vG|+0Q#+ycpVz7Y4{Pxp`Yc=`TBv!bH%`YuMJFPo$QfJ&z)f0|R_q_cE_FqKLY_MFf^cuXhau1jOfESF2nDVk_% z;$|k_Hc8DRq~o5)Hl>5LdENJEZ&6bP1lMJ{B=0eFH%>;un(CnQ(TjN=9&LoEOe zmzQU%3}s|O8S);h%@z}vvDU6AMhumb+2ZApd#aU+QHWXUdCdtkh>1$v>15L~?7ra& zW%|u@n$x*bUVS@oX#5(UX+$a)`$k8Rd1Hgal%YMj;K!Ps6}04zpT7Fstyf7JrlrtyRFyrb{F^aguwCi42ZW24jheybW zNM=C-Tm}mh*&*+@&z@M%jbJ*U?3{w5grOQvtVUooaVkt_pMapFjxPSlhaw}xQ`f94 zOUd$?nbYwkv#*ZPmpemryeIlmh@<&?0-C%qdP-3qg2Y2f;TGeGQJDwa^e_Jo;f^1n zZq8{W_y&^F8(CwF0_+c&M|g>7E_>nwE8MyXu61}aCV(O2&2Y;Y=HVDPNn~GQYy}6+ z;%m6VVWtnvbevTMOJW!(=1_t`r1z<$oJM=`Nfupz7r!O{wD$zjm#%nY@+EU&k|KB(F{ zll-a7?D=Fyw=Mte%P+d*$um!CLVPvQ+Pj{9gU`3A)8EVJP4aMEJv7X^27HUf``?AI z>~bxpaNJvT>1TltLpR+NWWs~*I{g%V==!wY|J#*?^Ez|gp`px5Wb)>59q`p#tz`=sAj(09-EY=W)>^fTq=Ne&iz`@drcx z!^^Px-s6OW#xsM1{-a4m!AK;)B8($pxR1ZY=QHg-?DKtwQ+&R;6-sgs9=9-9B_fg0 z#d}Dqj>}~P7sY!moQ{|8$8hhb;fLkB2P2N(Wo#gWJ@097@HTYEu|zpe?5xMZbzD(U z4J1Lh>(o~tTwaE%INk_?DrI#ETP?9Z#$l63F&rj@$I&au+#`HpuqXUNgaP6{z6B$K zlbzf1vHde|bR8Q*?l}Z58aAm+gMo3}rpbgh>Kc#7(@U-&i-bp3CMd@jRd_rc8((@U z;W1V&({KWQdR*gYPlClR}Z;KULo%SHNISvN;T{-p+o(c*GI z{bgc#T!kpIX4)$~Dck3x%h?&U?cx zYQ#U3MJg=;nuCL0FbLV5UpMNTn(~dPW!c3o5QFTX_qFPl>#gzGe0U^muFJIzocf?C zC!i^##2Veg>@**07pO|=fQdxMcpANe&=$}SS}VbMviKZF;EcGrud@bah8TJr zV#PanS^P@*a-thyJbI98fSI*`AyMU?eC-+R&fw`Y*FO2+_8qTy#Vek4|4~Ubiy$yT z04xvxg&s`4P@3{jAlk{XfPLB{GDYs${M~>PMa*#KuIn z8_F0+IVBTw@YukC{kI7FI+aRJV!a_UfKXxYDc1+?nwq+6=GCVG{d8_9ne?6i#Pmt2 zc4t}TCDvDn7;K4ku?C)tzIS3EOU3k4c&|SfdU3@c2WK1bw0!0nFv9j2Kog^tX1IF% zSuYc;jIZDVhnIp%^mU1*nU!A=2&aumn5)bXco2n$S>WA1h_uu%b3~AjZ zwY&b>r*v*SKTp|5c|Mr8o)7*xi4jo;e0@+%N-7S~t3K+5ZWVklIM8{)ma$g)YE!|L zB7dy1_(ZWFiai(&lm=pElC>r)&1}Qln_5YrQW;5e4CRF+DNg0p12|?zM#Au$V0pxT zyf}gZgj=#S5MTs%`>3C379PQc#dT8*uTmzDD4p4vx$E+YLA-hnEl_qe;GdeC8=M;* zJ#%ysZy;1$fxyry3@QZnd(FH0LaxI*kd^K{taCD^}vNGjQdT=-%ZZZ#MtSG zpU9?(e119<$sHOG9+{n0*G^1|_F^WVpPW8<63;GB2DR{H+%4$NcZ>|Qb47Rh_%e{B zk!5)?ie}`TP;MtkNmw;0@<{L+sv6wU1?bY&<;MrI^_yM| zOL=H~-Mv13$an#vb>QLLIplZ}>ju)JV*!#PFa?OV?wkpJHV=bS8qEAH}s9( zb_|=zt9sjU(?8Y+w{TA@>b+u#U|S8G((mqV>w$=>_O@LEH>of6w%rHXcm^s8Imw*s zrJvp2c3|M?`qtida9~k?rMFGyS3T3)j!XY{+O2lAQO~WfuP!bfJ83fX`jK zhr8NMrcHrK&4Dh?4@Iuk@8!{btidw2 z_`Oca^fnG)k3Q#muGAdZqeYdTwg}CY`zh0R?n-|@cvt=F{NQo9x7?$ymivLLNicT* z?*HF=xt;rxv5=7|5yIAHdx!gOo4akAC+Lqsj^_|@QbxQ@dwCw`*>h|+c-0X4t86d+ z(C7QVKZlG{hjDAejvVE+VXoNWN(X0e(cB4W)6g&Zy8Ks?1?;hZI>(|HeWx2=*)VHJ zk_L*-l{9>00SZy91alAQJ3cTuFh$Pjq)H(!;Ki-7*gS~LQln~29m0a1!<%kWO_9Za zM$M8F>@eB<=dpKE3S2F!qiTr=o#Sd*t*BMht?MWXPpVVuD(X(3R@aaa=8QV4u2a{m z8`O>JCalyqt6S7L^+fd}>Pc9@ZzUhwZR)&ws=8g>q3$HE^y%su>Mr$6^(^&l^&ItF z^*mKnB~?}x%872MO|?ZvvI}Zk)zl6(1sbZU?p7_;Rvpz<7s*w2i3(5m;GOuR)EoFQ z^?dB6FHk?OUZ`HAUaam{FHtY0GWW}Iqx=c=lj@aJBzTp2wR(+ut$H0<&fcKjsD4_# zNxfOUMg5F=D{)9a2MhZ1>g`x}-l^WDenGuk{i1r0`XxM}-=}_=Y6icm-mm^U_VWJ$ z6Y?AC1L}jQseVg+2rr`FQNOExPpVF-KTvOZI)y00$l0nsL)Q731- zkAJGN9sE=YNJEo88Wxb+T^_pJSC-g~uN?)a~)~EF~`dWQPpVimt>&YB< zqrOQ$LEo%z(dP)q{1N>m@+9A?pQ3Nm=k-(d?fMRVCwY^fuAiar($Cb-($Ch<(a+V- z(?wm-q4$ROIP&;y{&6{N7r>jH}&1RrQ5oryZWNu)tB_1zDM7ye^mcB{bTz1 z`ab;v{p0$D`bGN1`hNWq{Zjohax=d||AhWY{Yw2)`c?YX`ZfBs`gQvC`VIPx`lt1q z^qcit^v~$G>Yvp=r{AW3UcX(xL%&nMOaFp?xBf-_9{o%Dz50Fnm-VmcU)Ap?Bi^r( z>-pF9Z|D!`4^mg`xAcc79P~T-clGb--`5Z5KhS@uKde8ZAEbKgAM1zoNA;iRkLi!= zPv}qTKh>YopVogyrs&V;&+5@1OKH^grwWt-q=NMgOb*H~lUBZT%hnUHv`%ef{tHKlFdWA#qeCz>BYDcbHz#EPEi>bb(>rnSJpLzS!5(=UnrhmV5L!mrWM-N&HCf5dwnc1 zd!uowP--=H+jh%St=Pqyf2Ue*HA=O{X1vXHT6UpXwJUryY0<4$JA1)Ov0B^PX~^Bj zdTpxpHqX#1?s#^pm+Y3+-fA?f8++c0ZQoPH5X>9wt^>(wyPz1`gMz^xTP}tUHw_2;%757&4qU~EbUf66kx=o+CR;^KqG|C+q zfp(!{H*1YOiyJKMb!>mPUfwFUI(8+wTkMp#c8c}FPJzl4-^^&(;?X((~d@^J8M#XmT z*qx%cS*+CTPPD#JE>sxMvJ6YH7Lfh+-cG4e^S8?_+paf@wQ##xEZc=1+Npa4sgr-QfgeP^r!ieBi2r}-YHc(k=|6b%Ug^=%TsCBMXIP@W z&Nmp!QUegIRqNY!rCRUbB9pMyEm^%$^!3|$o#TG4#AWSvr$69V4)mX-59+mUJA7cf zuo>)Ms!**5obC$6TF1Lnyi~5#JzJff+NzreSay{G7 zDU7i8%G-qoGa|$9zp@y;8?|bAyX7iY>VD?4)Gcq@EV%AYsn+U0q_gKKHk&ou+GRC> z3oI5yt5L0ZxXtb*U!_$ol}a_+!xT2{z(%9na_++0Y1y?}!^gt!R9Vpa;pLejupQWH{Si0a7l$SKMkeSbl;o z=&(|$cKSE%>?K$iJc`|IHtL0PwN7gq)e5-6)3Qr;&1>&8K^KAENB{&b-oY(~0-RpAciZ8P%{_n{%#iB4 z@Ak66ya(FgC%X-fv%LbFR)fnDE5qs3f-%W8J9-t3mVazcAA)ZVJLIw0Xvx3(Q@SHZn| zC9r@HBvY(U#sI8Ew6}>EGP!fmXOt zsW-N{qjtTzT}}1o?NJ8e5p4k{2%Fo(349(Y@y$o|@%Sxacp*f+=*WwqIz6NWtxp zvn0SGRlDvMdg}x3sy1Nm-f2`Wg_wXVRL0e9mqN`Jl(5_>Y<24$A5_~wtQT5UEmgQe z*G8c3Yz41u6-t8mph|(=X35^HGS4k*w@JS{ZLeLwSZx(On*y1Z`7CUDnWT!{=tGaQ z=WExCO^`sRkA3_5fkzf(kP&Kk3g81+j=csj=R=4QvXJKg4RZ}Jabzeks%#c~-ORs}5;WMX{mciWAPj;~k|idn2hiW^X> zDy*A%D63e5!>AUSX*n8ZRkil|fanL-=@_sGU)d^D8*M??b}LYX!GH&8Rky8Tw<6cH zih_phORnN>8Z<;EuTndvs)g;K241x6d-Cs{5q zQ31g~U=4=S;mq3QVy(Zq1Az<~xRFN_ey`l*>NTH`E+J@vGNid?Z&ce`R;9q$7b;+7 z;npe*$QL{TP#6X~S3B?vjWW2wGKi@~J3&xT8rxfGl%d1&1!@deTE&gd@!mOoDC(0a zZ)LB@vjps73q(?FRRGPFa0!7v^)75Au54amPyzRAUEMjXaPgfK_T& z{M_+&tGI2~Ay723{lI0#aAN|Y&Q@VF)Pq)T@8SW_E$%@wt4%=!p3N5P&y7Z{+2bD;q$(ihtP9;9Aq zd$;X9c#GgR90A0bscnT1Y!|jISUgz;ZXww2+TKRT+JSu6I}Hmg3&6EKe78D|fFL04 z0&948s`nrjctMwTt6{OY1?yU}6bl#Hu6lFFRd1gN*1JHdaK_b39$^YrpjNdFyJ9tq z@DL3+1-m8l-L!+vtzxNFEek4-H{oT$2-&)m6(0RMKU2Fz8y2k*)Cx#3I(BtvhVO$~HJKY-GO^4Ok;F5y%!6dL&ZipcA z6GWjCWV~7+P&(eTn0$t|;_J5C-Fm&a<-J%eLXtcetJ2;eeAmVL#Xg+(37}_pYp2|f zUE!G!8zG&rh_Hj+JrDtTK?Z%! zSE23c>@^$90f(vyzafmtBYQra$`!Uf2(33+oFngK*ev zyP8`~|J_|6zg&cEk#)FZyDxA92l+haJ=w>seG*?N?LGEby_|kbyL!1`cOUogh34b* zPZD{m8 zTh*X zDGC;V72og*eQ&e_uqw#WB5=4WTQwi8ATe-sGOm}re43r==1vj)3#%LsnGHk>M%R4- z-jDGF>(uPMP>WLydx0#@QbfJd@wQ=!%UdEEwaPFow(S-zgtuD)|8-s6X4~Cu^RZWK z)xE`Pt5h!qWb(L4SYtoZIZx9nHoc|p#s-X!!$}LH<`X@HA$=kU!5al&vFtV^xeOkb zaRDh;Y{BGvJMe3J?%m=&HYgItsbzt&1Wx@1*F%c7!sSM%gER>nWEZUsE2mk;8F`ErQ{3oGEO8#9dL&3rPtNh;r!2?MJO$KWWl?VWodQ3#0 zVofGO!$cCpkx{G0JAb=Z?ekA30RSrAh3F`~7i_Kpzbh(Exyjpn7Eu8^WkzqOyuGi3 zc^@~e0dHrbpRbdBE5zuN9{RJqZvmpIxjv0q8*FJ~iwmrcRgxOy0VYCm@d+?V0lue< z5C)NJJ=ALrefN2lio@CrEb7y(6o)=z>M>M}$QtlsA1~S2xZ@BtW)7l;1quv(pSS$e zuGmf~Ylzl`E2bT`+d8TUYD4?{s{Mg1cK0cS1f z_7d0-v%x~{fpF+Yb-Z%>#&BZ#xa$m9U83D)%nIa71Tacp(S~z z^iGeZc2q|i!Ry3am;A^WfkH%(I^T9CRY4Q@-%l%MBr=T&G}Bxn%FK6_dx zT#PEF0aFP?<;fg$`yEI{`%yf4Q7KJ+d9GVV>yID2d#``%pZ;P*Ut+XBkz_<)CbnOV zRb7$!a-|6_I|Gb;ssf^_hD=V7l9Czwpg zX&I;C7lUbnYUGCu8-C+Ux8rnFWMq&$jZTWwT5g*yAd6@v>6|yQWbqud`A!c385&rB zA0x$sulrEFVQKnUjTbs$6^WwqdYNMMVy;F6c21#&80<4Z4Gz~$Q99X}$s&HmvA+HU z)V;j#bmMOIL}mS8h|a3A~qCIqOBG6IdT1{j~TF&Zk8~=PU`VtgwQpk9JlBko6X1}Ir59=E(M8o z-}h}}h{sls>&||x-ofe~@6(kPvpFn^gDvA$((mv%9$0KIGKzpm9Urhe+U`; zFz%6>8S_rT3!N5{jOUOdoaO?hnXNsor?vm;ku_&fbfX*XWpCmnQ5k#^DC%7NZDv~` zAC`9Qz?;!C{5m$o;5|3%b$OZ^TjSreULbla5Nz?=2o9_#^G6*oZDzp1lC5k6>77y= zUhi2IlU$1yR3fqQizfsn#FYonS;qf(er0IoB$wX}^MZjt#kKH|Xw)5#VI=vO8*j=f zs`+dohUEGJ#n?(!A`1JBs-7u}SDYF*sbV6VVqbp!o^xxyqrj&s*Z_Acf2i)4hGewj z{Ki`T4>&tWO-R41l9iOEim}?oY^!wXc9Jt5Slcec!J)Ocb7NF;9tZB38p`EJq(6YY z2+cS5>R=^QTN=%)A8*v{!B1y7?Al6qrb5j|BYyRw<99Es3O60BrYB~G$6I*Jv}?|c zB3*&9RnHXe!t)ywF*AD-$n=fk_?0!^^Bj)hL{DXWlsUDTcEOcb1pFl<*1FutXx9#L zaxl-9-;^k>fQ!g}=}nyP!ix1ZX+2;We$zTQp9!^P+pvn8onHj`o1PK$S9&hnUi?ct zla4c9o&3B%#7$Uq5X$mwj}dao_z00Q1=)|`s)ky^Evf7pIzW5fAIm$b%cAH z96FwY3qip7rZ(47U$dKX&O@+#JI4HP5R!GaVPv`K7;Tn?{twSZgl!V(yW6#}w;yRo zx%=&M+%?fUaDVnF8!Z|>Y`(-$)9@`R?XxW%P%R;}03pCK6lJY5x>|qb0ozY-EPzNj z06QSzLLio#>`;b!5|%w-d-GFt{aW7y5HSm}4M}Piex86UD`|TSol}717UnQV>@B8r z4AWhJb{FP9M+(~~h6f#D0*@SK!bT+3_Z<(W$Q5U1mC6#7J?+vm*8ayuhn{J0!g#TP zK##eKekrCcpa;&swzufhTnu^w+6GP&Ruhf~8VL>#_7SFb^6LWS?L=@xR}~d_g2g3) zh_P&p+NFD)=oI4=I}xTaQ9t&~372Hl)e|mnkM=E&=c5oWN=b%}8@rG~J&8ftz(y(OH`;w!5LYhEJd^HM zIV<|=;>D&|4-mSW1ui;Fkr?BIWq;D$g6?V_a@-yt# z4%}P#mTO?|&CieiDbeS=7bR* z(M|_nVtPtR&nyKLUnvhLQz*|Uz!a?%@f6O9@$+;5v+$|}I7D&&|8~b+=&T6O&DaJ9+N{s>Tcer4&fFrd5NWd`wA+B14?v<0LT4 zw&h=3S`n9bV1?+ zGnbe*WwtCRu1Wfw0CMsf?|_?0!}jg8@%sou8J1UehGUFg%#Qo^zM-sF=Ko{7UAVW% zEmtDBj~UVQ)x&^^a(#vjm&z)J&WVE4`K^0M*$Om|U_D0?hGOu^e84-5cl%~7+8HQ7 zZ__rQSi5+)S6{07`1Sbg`1V-sX@_7ID5w@LZ_QaU@kCuDYN|gXhtF#EJK5juCG@1H zlrXdAM~C{!$7A*t(Ie4=8E0`lSo;STM+G5u>=!9R%2x82r@x{O9sxh~{#yQ}1pp+X zFL#r#qPu@2^T6 zMBI73Q2EJw3wLK5exFTtP~a^+0}Y=PyZsO#C(etLgDVSJ2r3qq@kwY=&`WNS)hnG| zShHSja?@oHAtn8VHVn7-e!c1Wvx{*P-!Z;*SZ|N{y3|v$E7#MYi^mYVHYRO!a<}CA z%P!2d@9xQUlc$RieeQQ5k-uMlMuLZ`vovlgGf8=jpsi{a^c&i(T>B4+rdKo7GEK86 zGY1KJxz}Rz2=cf@Y}S|BO6oODZA@iNt==Ex-r{(dmIs9XDJcDJcq!l`AZBQxImvr|U;$vJ7i)8nMnMxl>Wb9*B&0Bb@V z$5n-cBXDUH=!CcvD7e+;cRtNlywO^RRr|hsJV@l-gFyS-;`-`v%SoAav3!N&cX}sk z@>n0gVOQ4e11)^_N6yg?nQP2g5}A9-i86+3!pby;d&Uz}o@?ApO`dz&jdO}CT4&nA z!!;eWqv+9M>xZ9d;)F*+69&gsP@l2c9P?{S2{}Ec9Btg)qQB}mw!Mx`2^ZH8Im?)= zWfK);kS8MC6l?}fBIqm_GxTsVM|bXI#pNNy1uIBQ5S@b-JIE3-V!AAeSqCoowemhk zb?$7%@gT$n<3pSo)$Ok9yNaqX+7n@6+$+gh|5>2p)K{S6yj`&BG*__dd{w~jG{%~d zeB#PFmvwT+!WMdRwzF2V)w82Dv3o+ubN=wwB1Wp~hnpU~v<-7u%54+mWfiMuY^ck~ z%0^o4PQxWyeQ#|a31db4{j4qha$X>DNk%)d_QMgWN`6!isY>EV6{$-0NE4|_>Sz?H zN>S?*W+~q`5oW2_HU(y>@N5@msq}0CW~tz;0-;LoQQvJg_WpP?nx+Y2qjla7j;Ht) zro(9HM5F>%12an{HlHAt`L~5VrJW?V;9_?AMLAB1E>V{7qN=)_DO(K>7Y~;v$aFjemoHApG>Cj(=bvp%_qxQg`mXoC zjYsc5-@G)5Dc#T@Wq;i?3BCe&N#D%yWpp9!c;6U|`)qUF818pF<9OwH1kTW0%59<@ zC7{ue2HlQHC&rIZ@9$YbrX?!Tnk8@t`V(IM!31fy zU}$d@mVABr<8ST22YecpnzD7VW9jw`7sdj`_SgsfOdy#4CpyIe%Y^Vx&Qp z%yXmLA6a5~fmu)vEXQh2x9|cqd1wyY$F5^wvUu?T@g8?QG2HzV$PRK+eKFd7AC`Rl zn@(IS#Qk{IIrXtToqX$r-Zn81d4Nxlh1ka?$hxqxM%F=^ zVx|+&x(NP0SM*lcPyfDB{;RaWUMyfpZ!XSQNUwDe;#DhgzGg@-=9@u2_ckfu6WxmV ziMOv8W)1#>IFk&%F97mG4L-9kKnW=r=jxLQUbp{KR9qQSl=w{^o(DoS>jB>m@tY`C zr-X9&kDqi8!TE4eqt@bVL{Ue$(3JU4UgB(DqIz+mi}KUk$?#BygL~!KVB1@JDZ*%U zjrY_uFKmYL1o&%P1{m zw500F?JbOFDQs4`#(Q@gZk^}++$>+NsaUjW?)katRi?Scrj$arw8B^MJ%w(QjWUj5 zjefGhE(AcTgBJRlvsgxj&Kph2nq!UihDq&D8g4tV%D5Zztzi&Pd$h%3b-)BU%QQJFEjU_& zmp@=5R7Dysc$<$eyxn4T_l`P(y{$0%{9Lc#OweWA1lHno# zffpznCY~R@Di$VNp&Ty%Ph&;siORSH{USQ=f+z||C*QYpR3$S;$_5=xy$aSQKj}_d z%TqALBvG1IW&wEA5_zdrG8UcqZ+dor(`lBB$rC>ZR<43=VxtW&U?4)^XWjR$F)Uhxt(}PnUUJ z8vRw!2jPLyrW8P4*AyTw2P6j~!yo!idZ4>#)~DXu;l682LA+ zqB}?11gh}j+~aTzni!z>uI%#smUCg%3<8{ItAB5$9Sa~IGXymcHVZzYYIPJBv{2Eq zm7C|-hj!UyhH(J<_1u$aPJYj2s0tw2FtPhzQz@v1{`5da`{{A@yyet0Zw25YAXE@z znm@l~SF_^cu~@f43EkECwH+}JD`A*KQ)NTG^;e5-nXts}!>7}guJfQgmfHe;<|plK zY#GQ)i6bb(GIMDNJsYfTdT~%DBpy%|K`&AF5{$-!jDABgf~C0j`fVrr!rOj$E%*aP zCbO6{rh@rToQ-1+e``;W$zF-k-SZ|RR{GSl0RovhG{{B}n`Ledx~ty*@6=MXhkoDf zM6X&b1${r75?>I%z}GP_D{!JwUgPK5p1Wp=o^^$jAO%o0j6==KWD&o<;+#{e^yJOb zxM87jhffA#!OT~yY?IDJ7XB!klWFO%&8tY@WovIL|6_NY^}tlei}(p~0?nRtQm~#O zWwxsn!cH*_=^@E{mqo~ExEFOD)9N#qJJF7&XBG{yv*EiQ< zo66!EBF44^@}tc0Xkm}CZ8JY20ubAsOI*D8_cBX4`}v8;qixY|3q>U&jv3K|p^XSc zPskZlgOx4%QO?U`GI5!r8)N48{gZH4ZKfM}@lb%ONJ1I%nZn6zfrg@&`|l)T`tC%> z_qQ^emqB~#rs*k@2T~=F%H>=%xN--INB(n6F)nF_qNMi>_aiyc?gaO;j$9$KCFGCx zJPg?BzPz*kFFK@mi}UoMLPkIGlTo6D;?u>6OW_vyoehCkD`>`)X#Qo{q3>5vymt15 zdm+E?Ma*1G^Z+B!%46|UCo>OWx+38TKW@vI0HFPWp4f<>6+Q*8>g>pqI6% z&)TRZ+9h!>=cmwdHu?nL(PS9X_CToX%r^ZDzt1852>(&&T>F97Qudc0om!^qQkYNt z>G=TrZ}w&B-~YriJ#L~n)Q4#A0LW%Kvdf0q`eh0aTE0QDRWyg{;CGj`4smE;l{Lj9 zt{tV(+5*v0?Vj5ydXQ;)MJ9($P1Ox^`T&Q=$Q>~8`0smS--3d)WwWDhF(_Qs)4z9u zCl91ge%pFv>e1H)6+Kuqs{cJRg9pbK%gkl?$n0~ULH({w7RQT~ZN#@W(5<+Nff-8` zW|ydhk*X7uK2`}0{8kmt0klG#@zs+hanOd#fD`20UCj^=B#%!hmSMomZO7P1KEgYC z7JhEuo`&0_gN!V^?wUTP8;$dqdB@G&-Xb--oE7`U<;ds|C2s9LV;)`DBv{{ z!5*+M8LDp#mpq6+xRSSvcJ?~B?twh?%BKBg%5ve`nY?At4A-zaFDqh-H8x#LSqj5+ zbYq+H4W|V<-lcX~DB?`}=EojS>?c>lM_je-a?OS>XV)o&=VUVdkv?r`6xb0Lh@Rsr z5;k)a5b#pAcM{ICCV7N@qf3K|)kzpxbgY4v=8O}6Jesgg5DRJi$#nVH=bmMIUkM6B z2#qKMo!D)Oq)V18q|aiC&UO2f)K<68lU+Unn}}lmgZq%s9bc_Zz^20zs8^S&?OCA$MscdBE`e6CP?D+^L-T6I#=p`HRDgBFH)UiOXypHzE}aG@TtlNqM_EhQ!j9UBDz>5bkas z-qO2jb)Wu8#5SAb^E)SZJE##S(AwF=J}-ja?^KLcL<2v5pYJ9pgx#Tqa3G96)EpxH zOj(PUBZQxT;t!gXI5o=LrVDS$x#oU`L0=K4=CL)(+>iR-te^ykL(2Apmxph?t2J{j zKBeV|D_*_Y?aXw4!0;7~09o6q{OT6g`2{oox-AbL49HkRmlWzd9?Guy)Ki-)$~kBG z#>0a#3Z~eVIL+M!cxXz|M2)zNyc_&BWyr1F5BYi<(&KJ$H2j+cBAxu??!ZgU21i`` z4u1#|cqH@sRPO3NsL*u!(cdp`>E`~YU5x+R?!Z!=iId6aujyb z=1IStQ)NiGZX-hZc5d}ncPMeiA{=R=Cb!gdG zwPDlTcz!M^-sz|3`bVmhPdoUgHSB2US^2dFh{-&lxtrmW-^e7A3mKt zyzLb2E$ff#uM}T`8H$+q^iF0jINi&!e-=5m~!$19h7W!d0;_Pc)|SwKGJvZ4w+ zKEJhtoJWSK1>xI`JEZLNw0j&?yyt>=Bf}kaErua1bW3h@D|ySq^*Qkd0YI?CG0+&r zt<-ez`MAuDf*MXX&et^fB(oG_-GPugG+J;p-Hgmd4eJXc1s(2my|nH`|GDfn(Sd?e z+qNDKn6!jJbV;a-9+M>msu;^BeILYB=ybVdmQl3`(iULrQV)$!gJq+mm!+f!Ke+ZICtUO% zdcb!FMh$)vmQCcT-#Emr4Wp9ujZBE-8_Nrns4)~?Df)xbhkBdU`!<^Hto>P;|AORn z%>Y_{&wvd>N*ek1c=pk^I6T5&SGmEFpASVcy`a9#;dZv%0Fs{Zg*p@X8PS(&c+nd@ z(TR38?$T2oAhMGy{>fALuoMj^rraXylIhSls>s1w_zOyb4k8E13H?kPB)4I2MCU zt`8t8g_W4J^$=H0kI#>!zwS$g&g^`s@fJ`CPF_=)9!3UX<@7{5n155dGqC{9=*Qf@ zAOM;@96>gIwT8S^F69l=F&2C0irod`?LhWPSg;2XW*@~@&KN4=z#uC!I~5NFNIZd! zLO$R9-LNm5@{q~ITh(>bs7-@&jzi?(WKk4#5T-E@eXv9m4dMtj7w1%dbD7gEn%8VA zI50UJgMG#rF?!6k4sboc*wb5nFDAK^51~dEf?#}|PJ>j42m|H+=;Um>r&GoW{gLD? zGQGpfEU-NWqetEEwmHr<@DY}`9XnQQ!(cFJjj6Crs46$|^fVL8`t>$tTN0`L5YM^VjfQ9|~f&VFvVFB@#3 zs$0elx*-P8Q2JFjH#fVUS3y+?j>ccweUA0_i_cp(7wXZMFzecTWHugrLK=OrUj0;{ z0i?(p3i-dk+@Hng2_rdq`yPl4vP~cpcve$Og011=pe9+nJd!05&cEoc`91AKu;!e3 z@b}_6Ui8KH&CJ-N$;m~{xf?w0M0|Si?DT7@^%EvOY^tH!K$(>wZ={-r>_(4 z)wAp9=+TU+@5lPJl*IU2g7Fm~m~eE@89+c@ri582&b9C;7#HTxur=6DAntN zVa|pN1;1khbuwagb(a6mTz^_~=exK<$ z(>!hFSWj}N)E0C-L|zw)p-2D=!j(k~g0AGz?~+ZrS8ce0y?^0rmh4Jmp>T7znH0ii z_SEY4LE;=kO61DZ=CN6ew9x(e&W`Kl7mr|o3Q(S)hCCObB7wE63V9p?RbruS`9Fy1YH6l?1_?JA|Svokb%;0cSoGrsFx)Pr>KnqIzE zc?InE3jX;RXjt%swM4q{9^Wb&jJ|-b`wT(I@H^Zk^aXNl=xO4eOXjua%p;}JS)5Sm z6h$$9Dxer~r6KGRp8QRWufu^=6ggT?st5zPOlZ<)p9N>qeGcz`n&wXarpy%T- zH0KW*{>1E3wdbP%PFv80$~tXva_$FH2u=hE<4$ zW%hpVlU=1X!8|`DN14Dr?bj*@N@bVT^qLZ32#GR4b~2k~rYw7nV5&E(Y8T)0O#~M+Ypn@Ny_Ks4 zT1?Opqa9(XM@YJHU&VNNmh*BS2!`z@k0%fLRFAPJM8YKoS%?B&^ab{fz&E$pEKgtVFU2LL zs2Ducgo@$*Hyxn3hSoQoE7 z4FmTSMSpdiNo$Q+H(@)C+Ef@loymo-nq{YE_Z8~ZMj8Wpc(=aLlSx}pviNfJo-r=H zA@If#-&l9Rf5>3Si?N7|amza`J6ozDt&vfSxdha#nUae;<Y6MHLLOudN+HI|8ZR0_}H6DkcC9<&ZOy+_o#h@KAj5rlo zE3Qwob>mcfI?5q*2>{ym;#Ymn*3rnSWcu=PdY7OC1QnfL`PA_)-36RUM?UiwZ#}Q9 zF8g+5Bfs}ucC<&M|1ACS`ac5h13T%#_xJMldgXln^BF z!trMLMD&lbD9(-7s0khHGF6_pLd}peu&vm)Qr2G{v{?;y{Lw3FL?m=HaxgnNS zZ4u(1YHLnPhztlHJXpOwik=3QSz?Fm1svuHYyRxK+uqJS@f-+jWHN9Y7_+}PH~d}J zX>B9_kX@r5J8}X;9vWHnDW|xH%_rG1UcHZT!*Jtq6B7C-1z)~%?`AM}(KlsL1HG~mT*$dwk=+wu8{(9=p75w8LKMXG2dhxhwKeRjd zWT}Q`$*qooR;8C_`C9Dio9RwN4bH8`23@6NYf9^ED$eaoiCl<_ekx_VX==18&KGeD z?pV4BFK#`S$}n|h=;49ej2TAqY1Zz_j*0~)BLmUeg{ms*3Ps_v+TWAkx-+#HRFqUK znyVToL$SPg^z|6Zs0*c05OD*eV?k8|FAWSSUfi+?8nj9gLTS?G&QSriXrGy-^k1<8 zx%(u=mY@M4kyT-IfvQVip`~=B5;>(XWx3g;pkxiqkPT#^Ch)8PL!lfai54*&Vs;#| z;$%Gh6a)Y(4(Pl5et;D;eaXpcfI`=^OK~rCBw))3lg$6UxphV8%Sg|biA_U~Cf&9? zGVq05w$)@J1|twym~==}Lfys^cs5|PGtrxefVwG+hYU@DU0q_rW4Qq1M*Id3$S#$F zqO;#bccMvw$+d^DG9{X{=xz3@=x;N=xZhzz$Vh?usxEu)?9>n8Wbo8s5yO4~+17i~ z!BPTYj?6`-KxdlbGplFR<2R8BXuT&4ySuk3G%`eyiT19JymI$&{7Q>9ps$RmN~o_g zhL6;a7_&eSW8E29gLJ%}A%nhQ^OdDe- zO;_CMkz8MDW0uUV_tc}*Ow0H7DVPE06re5Re$?MN^*K3zw8Nm^tTs|~71Hx z)zq{NmQ|i+Bw1+W4XHdjbFkD^D0^1El5(~6+5E0H>)y>|Z&u^OtDE(H9l#o3Qr|-Y z(_)a?Xk#fTH{7i{&gWnzLzSYc@+TCI$#yd~2%TzwY!mDv^Fw&iq&I@)nx5&_D_7mM z&D-;8bJq8eGw*pS?+qmS4ifGDxbJ=T)_aF{3DnvS+sE^2h|d=bbUUj)v#Hl-Dv;GX zHZ+mSnkQFAvtCofF&CZ~-7x-TsgoI*ExE;Lj%|6JEq7?K2V$ML3i&({eW(2jF#e>D zr8t14Rm$PF3YGa1rh47%fdrs?!-8UniOZG455^e@<%AaFQ7Zh-**B}Y%|^mnt1OF= zsN%L^77B23_~Y0z!)Gk0lKrEzn}*s{b64OB&sfx%I6rcX&eNd~BM`QqffR~d>}eju z7o#RYLBg1iXhbKoTdrpQmNKF6S4lJyshvip+v$V z(77}SI+RD_-TyyS+^A4g@{L!xiBz81Xe^!h8cv@M|3ke{t<0N-OcZ`V$Q zj&B30kk12C4*)O=*#!V>PX=7$20*Y?+CTt&VF25+9*2OBw^<0)eeWwmKph!T7J=D6 z&zXElL|vtV4kiO!#sqN~;qcE+Aak?-9GaQlb>B9gyC})92YaMGbc766Dk%|MO^qPs zZfrn!K3y>o5gER-NUxTO%8>{=0R%fOCz}jOgrPp+mCj(_sj`l4J9aVC=PlUQn8c1IyxfsD2g&NH3=DJ(m0j7V$cJt?7n5_m@h2-}$fbWGv9SxLh| zCVvFp&NQ*YRgk=^>3sc2wnRnmfA3lRI`h3#8C6hQ_JVF0VJq5*Abo26BE|d}DDorH z?+*Fx%jaH$1Lb2f?HJN{<+$G1V-hJ<9$E2W-H18&_MQ1Xw@i{v9aB|Iy-vzZV| zfuWcVsiG~lLzCQDUrP}oO;XEU1u?^-Il;Q6BANs2t+#3b{6?=P!Z)+i_@{x*nF&`(>| z@9O?RO>W@rrT=g?<|Ex3M>!NJ3y5T+=1nv_2`vx^{Fj_40?2a2>|-yV^a9faJ2-n2 zZSx&4!_=i1S#fNhJXAC4B0l+R%kdi`ISRkT$z5%}RXdPbAlS>>Cf8WxYHt26f4o?rA%*#+hSF-M|V(Vt0NUy=PX4g{aDa8LaAo_VL zDn}EF6}XhY+7}^8@lW;4rrvk_@t^e{S zR3z6Pvw{|^mpOHMssj-)XyIzWoQ+Jnz$Tt*#%8$ll##`Y*G$J}ve>J?2m= zsh6uQF%X4qi%}BrO7DM?jaPdt!7UfhEig*qzs@X{jX)vS8J#pkN^Zi`w?&rQkFVQc z*lKg?>sEbys>$Nw;_m1J4dq1*O_*D-L+1rgo9|h5>*h;`*4Bqluc+ts-we)9r`x>u z)jWfqH_HgotF`3;S9q1sgtKczp|qGWo>j`nB-{k8#5~#n>F>fxa%c!^-K(NZER0Ap zsgs5J1fhfyvLbGxa+78<1hlw>@7~r9K2)uU55Vo967=ed3a+e}iVB8QG#7m(lnb_* zNajJ=sKD5QzfK~7A|_41Z!9;#f)$fD$wkt&wH6v)1MU?JO_gIwE-f(Vf2_b*b}Qx{L-!Z+f~tw9b4KP4)4Qmbji z8Z}aU2sJC*Cta0GSjFk zNqTP}#dkCw$-$kxU9~S_ACUi20Z;j&MvC~nMOLzSwv8ic`yL^D$Dh0ZF%#=}0MjQP znro{+q*Tt?$S*}I+1s}SxtBh%Q;&Y4NdI*teW8mj7)YLS&-q=#UC0y214;Ij^csiR z8Y{Je3;3&V{^g%S)wQDUobGiqj>I{RMS z4AC7mn)hA0i|)+~WzS6$j3#A~pcwmv%F1DmOjNlfYiyjyo~{KlE1x>O^3ve8cSlN-`^ z1-^f+;n^e{hwbU=_acw|MT9{pnroc{M4vnA$s2$4aG_`fbN(68rRf>b-_Pdzd-ph4 zfKv|Zqj+~u&&MLyZ2`3@WHrZHNkAq!VNXsB;IT-%`?; zwZ47WiVQyO&;~)Wd7`8C!ua~N)-VE(m;&Et8_{ZOYoR8G)kyq&n8>9+1L3vClh(yZ zC~F_O3UFb}vskdV7QHkyw>diT9-7R(x+Y zuybp!&FpLL(~fp)llM&!_WD|b8y7b}8$`C34jof3Xqtd$bk(f-bGrOBHsZGgO19PA zwQW*RR(t;DYMq1fyn4P1p`^r#XV(`_zt-h)MTb|Cd~UNJL6QL!j@ z5kvw7Sz*EyN-~89(F8#Zd7$P9e7JL0xk6>TpN(ri`kM1H2Uxa6FDts4*;Lm*0s;=@ zH+n}t1Xc@#GI<3$zxru=pxW;h z_cr@8XyWc*%H>qEl`K!g`itE72qGXLU4_rs&v5oLt={4L>n3HafA9706Z2)-)OL}J zENQ}b|2>S_yv?ikUjf}0?GGr10{n@kv^3>ELoU3Q?)^FVa?MBKNatU|p-E&w(x9_i zjnnYEL?$1q?j7$-SSVwMt2o}5_Yvny*vXE~kiCD8ch3Gd$2QzwlHR#1Jr&BVB5}@| z;tnFUksfjf*{GJMREu2|A6LC3h6P}-d*kM2p=hHr>FI^Nx936cz#?PiHD2wmXV<{B zr+XWY;k9j$-*EDw&LwSS)oE3PkzqwI&5*NDEN8Odj3P@(c~+T64x5!li?Wh#sUMGe}gxDKV( z2}Jek3W#w==sx+DDz&E!AdcO{yMuR9yoHVd#*G;lAFefm@BQhQUdjhvDvvL7R#mmE zv|ffya3L-&J)2g2JEO0$7DZb&UL@OGG7B8=KA)C|3Gu0&YRil~yHsAFFc*}U_p{Vg z>TjJJBZ8d=~SSGRcJbzGDU+=VL@^Dxif{bNm~feK2{UBvo|7*M1)Vl zQ9iSb#SDci6y4v=^N!jVQ=b}!Uuq^fYwSH#OhdyOM?)h;y&)+jU+7?>fuWN6nX}qT z^X9WzlhLKAP=mj|YTryl%Ut2`1lL?=QHYU~;WTZEsglZWWtZ74nZVSD?-Eav_e3xB zy@t2>hVYYpD!qxDa|#J_~T|Kns2So+?ZJO~wkJd(vW&N$$uRN7_p)9{NWBkgv02Jy}op zj9;gjXfl^pt}zNxs55JrV@A(F`$-|>+C^?HvA&8gr-SPXvQMteynbJMz|F&q-Dp~? z1Q1r{4UC_lU`;JDS5d^MNz>v29_Z1hMl(Rd#0T!1Tr%a_im(=Hv@MQ-OGaf}!E*T6?m7Y(*d(I}c4AM_Qr53fWIi16ah1QR;i8Ms?wl z`O7+ie^qA^AzJ?K(kg9uEf3r7o{C}j>;XQ?Coqm-M)=In)ouAslt=Jk@}KV%rz))# zgA674i^NV&mYmj0ve^#2i*H+hvl5+xe1q=9O!aUxbdT8|ZQ@^eVl7 zU>eDC=E`kv+L^9YIc8W$XsQ+?_qnLkws@2zEM8rQ#}bvcZE|6n-~R+G*#~C5<dF`O=O3kgNdm=*kWAk$ocvlD3w>50I}5B1@2i>q(s)XySTBMHEsl;1dqyZI_%Gq<5{xj+Cmu;2bXF($msepB11RetwJONenaCc> z@jWA#0Il1O>-5pCbD1=jgO$Ss3p)F(YG=h8W0c!x*epk1&VjNx_vkkN#|-ps4DBS< z<4-2)+Q`zS>^K9|ILL3{?TfTJUr#nXeSBottGkqbW41Pd6`q5BW2gVheWcJo{)@!_ z<)kbK85RnU$Pgcy>|GKS6*V$PEz4Qtx1Sy4n9rK2j~tnz zw%*a)45M3dH-LzD&?Ev^oRIpgOkj}Y?8X-Ej`t( z<>xls%(~ZTzj#Fb(h%Q;2w$AzYY#Mfk0V%uH*3R?Kn_B9w3N(KvOI!b6}Imq5b|5G z)2B1?powwPA2?-A^lve%Er3A3ZK6Qel~$%`#L?3A)y6Qhd?G!l!2CbaBgxJ(|PxW%VxdLzeviPbK=yp%x+#}|T* zfh=(v42w9@13#M`TV|kbTM5P`dlXqG%;)U`vZ1d0$V2T_{%YS1E}(q@0IZOL&|y0} z0XjaWjrr>EChaO#a33Y6qtcXt&1js(F%%`W(i0f?CAL^}!$I~z=HS>V4<>NE4+(EL zgiASJm0D>1%D+64m|&xidP{`zMh>62c};s1%Ck99V`D{lk-$V_?0~2+tOoC+>%GyE zz2cy=Hh-d@S^uEnfhO9?&d<8uC5R_hQMPb$NckDj$aMA;q?&501K2FL4gmPnBEyDk zcp>uHi{3i>W}^Q{d^%=$6Y|Ai-M)W2Y8U8VeT8j-)-DQ5w`D1O1Nfx$yrMDHji~kRRK!3lYUd?4C)zwwT}Fcv>xIt7V#{^}#yKR&^|et!ustf3=CQj}>{l+$Wibrgvx>*}aj)w4vDQpiP#M@*~Ha#0I8P1;E!WPE4R zN~U!$qjS3aty7a{zOJe|%`(@^%B)IiAy;)hna+#dm7{7Zv#YaON+B1^sw(POPOA!D z$DJ}}h&0XGjZQb93^=+%aPCp9lwd+i3mFrBmMX@%q%x^eLTXY@8KsO#D!`_c11ceu zDpt=?C?scwg2y?Nj;jEq>AEjXs`ZUV11V7*8Bi3T^W_w@wm>s*!q5jPsG}5P%y3}F zfF(fMU?fPXY>vPzpr}CrG}BaP(R~pNb zG|2N-qji%?dR2g-qNspUP{44{GL&o1#r>QDWl|tTi41{L_#f1<7#zL?s7U!iZ|uwK)Q!VU!!ul&Tm|jsXA&Q=J*JJVtBxs~o`qgkwp; ze8*_%0)VE#K?%Oq0vb26byVPK#~4uBaw#S ztft8{@#CT;tyc;;N=ErM#LA+zMLJo{1ORpLQV~f7#Pg2GN2N!k&Z*pBT7}DqC!&Av zH(S+ZJfGI9dLc!UE%K2Z$x#x|=hbRiFA6h0$*O5JtETm8naNtFS%z6z=JVX|FOtP* z=6Nsv!P>fiXp|@J#(#D(%RWxUfy0}mTsk4)@=4yS;(@+ zI2-sIyc|u(-7W>swGl_k>1scH;7J$`%4RExH&6CEjM5ij8^HGzUNRX{mT^jfaR8$~ z-s|-!^kAte+t_-_wzAQr5ycU&TFs(3yBLonkG&j`NsS7Q9iWt|4yYFy0H6bAUGoek z{W6YWFge9Hiis-6hO3*(Wp#6#{gbula)8^+3S_HinnuZB!w&^T-n?^3w$lKqA%l8 zWEETw2)Gs6jOFwD;5l^#P}R?Y=k9f!b(3!0dFN&cP;TCNZP}nynN&or-EpT+q1oCV zbeQG!!SP%x?;VGS6?_EzAdbU;#|H zyi?`pm6Jm7`gKm?!)0C--_kUzB!4HVi~PBUMtJI6b^ko?KlUt5X*SxwI355DCf8h? zM5-;_?(t)tcDr+|YI_ug@R$?y8&QG~2E8OiX~huvSzN#YN4(@(Hg$Z?Ql$Yb%LRBE z!mxd){{M0I54~2@YBh7%S-*5?eRn4t$X1vGF3+O2Y=&$oci-0Bb69iDK17rp$^b2sf4KlzhC+4<=fxbYe4_E*00m7jR@(Kr0iz4!jhU;Wiz{S`sd zKKcjvPw;-yAVWf6p3h}flG)RFKBrY)Mex>(7cc(sFTd|aZ@BoQKl_0vo@%bGt^Mo9 z5xoDi|L}nieDQDJ`qsmD!HtK%K(MC?kaY2N@EG|R`APDtSz z8kawnh+#yxU?Pc871Kjn7XW~zc~wL;ll5rDzRRtav*jYUMGK|-F{f2r7G+wm>gm#- zCM%14D(wiyMr{-IT{C)KoM-Ib`K3uLEBIqwu1(8TeH{e-Ud$=w-0sXSBtptY97c8m z;5x2S7J}d$5GBg8D=1A*X@?g*pDHx@6-0e0R6yAYh6omj`9EKB5E2%tRE2(^DS+))LfKrqiLzz}vpxdoo z6Gv$jl$;%l8x79_!?PZ2 zo1zdDC@{eREt>&j;X0rXz;e&ymQ;+xb%~{ooutNCcG3aIaUHN-$L)fY08#=Wln`cYsLyMw<)W-0vmhn>XI=6#!E7_s z^Wi9Dz(--wYWV>`;J2E6{Ov)j?S~=w%~l`RxBqrhbNqhc07k?4Y&ZhXYqj&d15M8b z&uew^yp4^I&G&79(Qq~&j^Ozy$cA&Lqy``hAxtw_JPMw9EM$Ye^nO^dQ9 zquP|}0AY>+n-}M$V=IZYm2GS;mzx{eLqLE$ z^xVN|L~5|4qfi1JtGM{J&lRnvMpH@INh$SX8QUbyPM zX_Z#fD$SsSWL3}Dx~)|?<>(~kwDc27^Qu}Ih`ZHnKAR8ksfpVWwV@^B z3@nj>8z>O%X)?MpR=DXZ7{ZM(2!NU+%c`2r#dz2}N=J)eWH3C()#`d}6#_uOF~p`o&Dwd;vn;Nr$_FbdF_Q0}in@VkxMz^Ptf@RwlrMlZ|Bt}bW+m;2M z4cfSV9OL$lLIUt4=7Mn_k)mT+lvp8X0Gv&q3m6fB{+n-1A%jP}D@`pjK1{-M&rJ7Po z1!ul+wWZ+FvN#h0pkWzHQ7Jfu9iZW=1uBk%5I6$?033iL2w)t7FpgCq0B{F{kJ=ck zfkH5DSwaYz{bja?an2~E8DpiBoH0NOAhC27V~A8}ssO;}IrqD*2Mh=!>gp1H04~Y< z$=^W*{~ndJl~&t#4B@m9qO~nL31Km0X?ZRM+XRe{v$dx}2hslgX5mN;oaimu(>_9swgFl}v4*AaU}5<=!2 zH(!aaql%*ZRpF*BIK0Wnu5DB{oq(q<)PdG9#lko;Ep-7TIkl%)E3R3Jsh!xs30H+Y z3C65$9ip5UqSG$=Q-;ffH`{Je_;}u$zJ%-J(p_OJvYpoD!)3HiH(RtR?;c6DF^ra+30_qkKnNiKcvW#unGwnuO|hb^$Yclz&N~O7 z0l8IDqExEmb7_r`#vo)$QUEF?Y!#wGr80^#lSb=lW}QMRi9p)vqZvT1vqHit$1N6MH6pvoEnm;pHF9MBM?Dj2H( z;F4Vj1T@xG^o&4=;et{`#+Z=PeVyH7r)BB$suq9%oKi|Tns~`oo%^z!+IzEXe`+&^ zNasXl7R(Ra|S>;ldfP))g7>Mi144H4a;e*6@WAy!<4fEP!y`F$`Z;w4g?^F_v+wS z|A9Y(Jd@eLct3(~Y8L_8%XXmCzgYZij)b#DE?8(J;fQ; zbzS41!FYV_`eYA;FkhPkK>}C*jrYMFG9XVTgq7;Lp(-N(+Kp0!IKObPC!mWhGV;=m zh~k^MA=F*8R%Wh=e_S+;%!WxBwv#XTX7;H2*kgYb&UbHxPv5=uYae;-*nBl`=KbWGKlM{T2CAy0tXaGI`I9 zl-oY7gzRMM63#j7BW>qh?<WG@$;G+UpPRxx#{OK}DzR#(#Zov&iD=z3$Q%Hz__ zX`jNqbowrJr`&WcsX^X9i8al*N-e6YN>e`x4|mRep9UU-XJ^mpZ*cyC05}9ZJA2M^ z&dv}n>G4lfHcg|dQ0r?|RfUP4rpG$x_FB=+Uc}f1epKq}EB0H_&1~VlpEh-v+#5ou zb)%~Nf_$2kUL?h=&`r~1%=@_H$BJ{%j}$^Qqlp+bYWC(HI^Y}bW^S*2n)iO1sdyf9$$$0f=a0OpWo)lrxSl0&I8U^%=UvxwbcvnQjQ7pln zLn1PbPcgma#?et#9Ua|>qv4?P^3|X;UoLMxv8s-jlSy4$!=034xv_OUnJka1>WMd( z%N$zrc~&(Tjv{>IV6#~)Hk*SY%d%{t_ouU|IVlR|4-an~A=LF~m;(p_kPk<74S00p z@X)KGI5E@Nbeb(Pon$fI z@SffMxzXC>@Sf*y!Wo2m|L?v(^eeQ-w^+lMVRg;hf1SLUkZLxY z(K@kHnpmHMF=vkJ7G2v0Iec1Nq*cA+rZm3DYIU+cS)Z(Kt;|c8C!~;f!&7$O0Z(a) z93U^6-FFNf{O@t^s@ghd>);%_%gVi(&ZW`n{AA7zKuiY*F#!z9rVP*j zIiABMc@Sf}lUDr-=VjW{zp=>;cHd@_nSA#hD>bSeJb#V5 z%ZD_RzSDON2Jp8Bujk>MitF5Ax*}Rb@A=ctMgfz1VMj*fI(Z-=FmGoXy%jMfKAX+9 zDJcc416r0PxMc_(?V)8^*5T!SKKAf_&UXLx>9*3^h}*k=0=fHdkkP&V$-5uY@NoF; zmt~Z~;C2BZ9s_TEj1*kl9-w*MZvZ@U_je$6{{v$8BTsypl4<~U_itc#|Hj$vGCA}4 zgdi!dF5%nYl6aB`Ih4KJo!`0Ls$Z=;07xrXweW2h7Z(>_cJ}0pFZ;490_2K38J_%Q zzkP9WadGzKi@zH^9Z^JI{S^Ew{3zKc4<;`p??jBA@r$Bx59}aEY=Zq1X0WgaW~zX z8KuuIu}vo(w>@%BzX&*OfltOfXtu6GOI8J4H+H$MNx zFMhGTXBl5iSJnf&xBdR_|NeTY%`N#H}dyet;>sDlc>$JMh+1P^-@pJ0=g@HVd ze3*RKCdE*PF1j@q5KJf52!`)x+sHZ40D}gt#MgSYcMFyzmsn%OPjLMOpW?!PQ0|M@ zPiNl2dzuw5))4mKWG{pe_O2V4dPOPY%H~p98)|FzC@M#}G^JG5#%Nz@V4BN0f6d13 z|FzEf7_6Hyq(~K`xuk3+g)uH#_=?^Ao5kk;z{&2dwh5dW#RV18=t1qAvyGBGSDaI> zjIENh7H0M7@q$m^?;0U8MgfFU538A!oEJt5ZtBHf_BT=AVrkoNEoDx&R$-YWt})rH zPDC!jkH=WLBX$z)R$~+0yu01^6?QnBgp{u9F{p>5$;z71JO*oFWMi1MAZ}u@!Y)2f3#;&r+I9rHsh|W8hMhaym&V<67^@P}j9+ z5z9EAaTQMc>F24%SF2LCPcFJ!>s$TYLC!uoLL;D65y!;0(JhwpjTW*FCo8+dXB)5| z;_~>O2VPg|0rOat!sjv1UFnqqHEicgURBe{AXO^V17DqhslWcl@wM?7U_5rVM#=}} z5ENv&F9-SFU_kr+{WUkqp{l*MR3RSPPWN6FbRg21s0+KPQJhV}Y8_NSgW5vSnhK8X zGG4aXz=vE}XkG7n_l*3J_Z{^ayUU$_pFZnJ^ZO7H9}Uj$ji2;c=VeI0;&1hwY{+vQ zMCoaVZmt$Y7+WT!Xt`WXL5`$gX?UV-zg@=^Wq_~Pox^#wvk;=6T~~kku!lYD;q$^6 zV~SE60HaG7J?vo*1Hp$wCE?)@0Z|mgRZ$>(MW)^E-03XS4$hsrTQ5s`R zSs3%Luc-$mLQ%xm{qDqR1LMi{can^dt3QX!Yi{iwe3uq)ImXkn5sIsjVNj`3j<3C z5AW8%4$kuM8&pTlOrq`VG+k!f0cs7LgVq?>HglUhwu8cFp#=q;3D+7DK&iB36hVa> zn|s%6Zv$*^U$eKl5vrQv?trC9vL-;qIi!GSV1*q3)D?LfQM$oQKkFC&0}^=u(KM;5 zX))tcCvB3>XWd5@H1bt?T;|VJgWrXGbnfgU_g=J}>-NU2meIy@CRqkaYm0(g?$u`z zy1lL4-nj1!``xq;Yf@Z{OgOt8fGvpQK2X)^lxSoBShq3lcA0H&^?CpU8BP-B46;~? z`V|a9^8~S28kati7q4O|@<^+CRaZ!&qP|XCuI~8o29KORjaP%FejE3nJD2^`@AR|o zHP@s8G_4}!=nvr^;B!QgfV9XP$UDdf$PbfG5mJkMBrH@QJe?qtbiP^^Idu;HF+@es z5fo3HKs3Y}a8+C`dhx&k=v0s!ZYLOY*e2#_I3`ZwMAUu$rJ|&pZj|vpMA=xgSIK99 z`7mvtoKug(76;COpMBo>^9VaTH-v!x&1+048-)zOajY;&ZDwx`hbXv>h&pUEu{Rv_ z9ozS9jYw@N!4F!kt`87izq1W69PJ&u=0iv+B1LN5QB@R&NErpn&=KB6q;$^JQ3PdQ zM-+ikq!iwO=g&X)j)Q|1ILyj21TIo^9R*SVa2B>j!(bd;6FZJA!mveMhiVN<2}xUF zC~U`xr&+2LTKS~wa0glk2X|ak*MmMB{uola3syA_Qox+@nnqD{kx@X#Fvf^}Axk zugSl1zVeEPnT~C%&lxwHXY;GbbWz#gXJkNI^4BK$f4nrV*s|S3R+*gN(JU50# zSz)P5b4N%4H${GNp)6(d>bAlFAP8Gs$H8L{A~aiD4Md-J zAGS~>>eI9JG+Pcr5J~=VJ`G?}I}Kz6`FAk{l2+*>hR|fpIpt z)F^ZFtY*t(iA;;;p$RUsta5l0g=%(t{Ox0JoGnZgbufgNwbyLY7yR<)_v(6YZ|~3C z@b>uvV(VQRPG`nw7>yQ-(Fm~H$akJ z{nZ-fBl<0jH@w#%YSW(2vbODclUSxw*2>frDVBt8?tCM~7ZZ%S@bml&TE&r8N=LEM zP+%1206eoRBUuC zm1|jkGn*aEM~#Ns#YcfsU;vHAXfsWv0#GtdH){x^VExFXtCypO*OHNTE(M-_UIDbj z>bbB=e`iYxzxT)^k1VKCes%JZ6Stjw3@uc+cTeiv_&rO7-D(`})H3PJM9NhfAJ;r*j-_(TKVl z-8`Ds{pxD?{s7^bgM)*={BnG&dg^V_;V-U-EZn6{KV{>6*q%OyXH6fw_uh;1OG}s6 z$Lku@dkQ-@@k-nzw~M_@KckGY-@wy5VzRY5>EC}7GU$}0e)@n_|7KDajGODV+D5?h>n--o^ z?9F)w0S4W5CpcsN98IKL6eEqRM4hv2*y;mO&7Z({@TpSMTJza!X+$SbZdxYsP zT)&PZ^FBe?iRvL}Snot(PkVbxS}%+`^^hX0N1gB+H*VaxZ=KMc|KGWV*Z372$;u>= z(v*9e4b!~HLTRiID_-%U2$3P7agj>MbBy1hb-O962MysUuq2uXHNO14#~yp^tY{q6 zrSsH|&vW&VA^ZbdY!^D!UvfgH#$Av9|NsC0kLy(bN!H%|xK4FK2qR?2?()F<mh+T7gQ+}zxp{?*oqTb_mSx)m?({A}kIUXJb9O}5a-_q@Onba)Z+ zG0Jw$RYD}4FplFpTjR?3S(g6NFa47IOS?b#!4Eb*Ab#$1pR+#O?RL8_>^|^ozxHdt zmQVj0;q)Z98n45di_BJ6zBxJ{?mUl>x z49Qs)99q^4mJY}rzU<{mn-M(afRU&ph@>V2!$b-t6NX9(Ho0Lrse+0w-5QVbHao)M zMTs2}LGH}m7lrCv;JM*Wy(pLXt)d$PakqHxyS}PS*!?iqcd>ed%3RlEjuX9n;`L@{ zd+ube2TIY)E4Md0+w&%Q4;UC7FG*So=SnMy{f>e8JHm~QA5VE%;=xF9KaO(SZ%}k& zeC^Anb$uVd*r2qb$(+kttIB)8PWV}G%!fDt^zzD^ot^D@Pj2%J@Etr$;^D1c;}Y55 z2N-afo`Stprzl^&lknJd8<(crF4_nQFOAq~*$&{?t>*KyHa|AfV_W`s*z%8Z`Xn5? zIsd>1@s+Yqn3G6Kh9vG}J1wdx?$V$d)|KNuLEO;`2#fN+4jw%C>VyB)4;vW%;5_v1 zcfb4Ho#ZEy4(bm)@W6woXXE1IHh%cSAO3JOB9urwKg9p!#G@VWZI9%8zFVByKDU_U zNg6}Ldk$s614$H*2sVxx>Uv*+w&FSzwc`pl z6hPUuotR4^4FsX9s|rxBcjM+`>Jd$}lQ_1ZJQvEkg4fMxn$7^}pezyMhd=H0lAR*& zr>ge)Rv!+{p&uTI#HEhVXCq&)To)Y?yshbgvLuZpX{2esATXGea?1(~f(LYycG}G| z(jsS??|Ul5+aQiaY*?Jj6cFY_fpe+<^SHv!ExZidWQ80gq?c7%I6+s}d8LfG+;Chl z9Qi>J*=lK$7jBd1c^FjKkFvdL+qPlJnq6-!B`GzzWd%XQvYbZUw!FIU*J{$TqR=&0 zVAOFPqe=75r>oAK2vHOzfU6X7d^lflJMAz8xB|#Bs2?<2ZX@bQk2gG5fvTFF1*C)! zfsh@a2km9~ln}S#6-g+u!`zD3^uqyb$NgI=IQhcE%YW!k0a!wEMJlp?HphEHeQ-8*E+JF&jI&${zi)IGc1Ht&cN~%c z_WPWddX(yxY#2HWRRI$$D_gW}&%*e?v~5*kdWdsMg$A&c+~Qa4N(fh(H0n1)rHvg} zjvJ!eYGq!cqz&MIO}UO%4jMq9lnTKZN`ZV`2?3k~rCfkOWmD?9lu85{SsoW$x{QT_ zn?NwZ8Fvr`V_Bn_rcKENrIc}ls3c>Q3ClLIu#A)_l+CGSIS#~}F{YH{j^f+{hcaUf zQpy<8IHgoDPfE)eE+ykaTb7Z`7{fVpj72E`Z~Ml=fH45x?De~VG)clVO>Hg^IRIq_ zAT*XG0BkK0qz6X?C^KQ;Y9Sc{AfVuO;A>6+kTSRc00=G`z#XOqgv0+LZE!RKz{Vtt zA{V?MNRc+X-6XfA30v*dmcv2NY<1f$E;;20)MhLsmP(NGc~m}UJ~&)n0y5e}Z25{Y zXkRsDIt*(>o|PH)~~%cRRF!t@d6! z%fx&(EB_ z*@?|fFBNj4t@ZWeQVO~?88?Y0V=^F*sDM#L+E{z(osDPpc}|K_dalvkF{d93u{;hU zWEhgea*-De3{Ls2!%r|ge*CU9?UvL203aRpvfaTSTfaKXMJ2?1__NNQpg$ziK5JBUZoPw9sUmp4*y5TvOoyVjZvpN z9U*~IxUH!b!qh+R+qO-e=S2X~eTOj}V}Rae!-c@WKaSx2sR!`u;Q8+1jUNB#4@q@- zFq8@yfaBQkzYpNrlP6DF2$2&Z7gDE*G!&_#Nqh|e+~!jBF~>=tER}Gjzm-g@g=2nr zughd<22MXS(`hA1t#V$RN`;WOGfChbho6O;;lGy;p5OQ?HgB_(1dz(Q&6euRO4_%K z?A&5Yg&fXN&%bo>M_2JO-^)B74u7Wi`-F#`@Ywc{#g2~t621(dARFZN{cUE6G-g=a#^Y599%&V25tz3jv!s;> zBjK4B501?=6A+cQTNY(M6_I=or`hJ_b>VfJo7u?E0=MV$Ii^Wtn#Hl2iXdoq;#e(Z zl61rk>l+AfT;6P9s^=W^di;&o(j@72n+?xxHu~)_Wapr&?#>MNasU+ot)iyokm=0>;gQW}^{g6_dyJI*0Ugp-NkyZSl0iXQ0z~=;N;YYl zrIJmK#c_J$x){8fm+%AJw!?r@zswp&x-PxCs;Yh;@Y?zIc9uEFIfYYs9y0qJ=liFg z^?tFlbN0;II_0}NXU?pzp%pO}O}ahDwW#kaFA6u-7dN^6{;+RZd}x^McGNWu{4<3k5GKWrU7eBu0I zLI?=i`AuBIXURE2dJ-=RDKCmFFN&!DAhHYdY)M`4+a6~e2+OU=Lr#rvvU(ahnplI5t$>q2&v*Y_6v_oDNxeH zl4j%a*nYYk7yf|jRc5rPPBhB1+`)&Z58=bE({k_sM9XnU72oI2PX7Wk)4!PfvEn+d z=LK!oJ9EZ!+d;Us^^C2pUxn+ogP`rY(0o4aV-|D4f4M;$gpu)dG(DQ!#c{@=D_d|X zf7bA-L(45!5)D-~1iz*#K;XJYPcaRn>491`tA1$6=zgQhGxUwk(sxj{ny9&o40yE~ zgzA##E_bauqx^1${VVIZ9Uj*c*(4`x(qLhosw{l%;O$jriOb`0 z1pt((%c(zfF$Ib?Nm+(#FwLr?JT1nlw^iy>VAPe<+?`Lg?B?U592b;9jf)1@`b7{r?JRL#=_s%_vUOXo zP5nkgFleSH^X~@tJ^b*)lWq(+SZ6iBrmAWI*uAy7(r?R>29hvBzX6a2>~S zTquy4eI9^>ndUUl7^1?NAqsjQtq46Z@V%UZb zY8vZ0G*+t!Du!gmUC3q(46{u&mzs;upWD=oFuRv8qSQ zUug{ndsbH-=|^q0eGHrSclV!g6OYwAagVDo;%8W#!gY306?R2V)v;pmwHm@Ya^%SA z)ip}T?kXO=P3 zN>kW&{m}XI=dYYcdHwqJ>;HWQ8*iiu9`a7h@ry7 z$w}di!j(g*|F@AQ@SpME%nN#}AB`u@oZCHqd~1{9=GK|2*YjNZ-v7$J@cgr9@tUZ{ z(`PmqUEjFo+}0NQq#qpJ88)<=Mvlls58&YNYMnd;VEy^(|MHDx z8NaJC&x6_64O7p9E?wU^eR^Y^cER(~(4EYT<*V)wSW?ogiJ+AA8E7`Bl$Na|Y z53JelG#J3s5Qc51$~E;i%lN*rutWWzftdmD+-&IX_IrrE{;oUBTo1rx7}z##<1NN` zZG^U`HH_MT9oHD6y(&k{8E7XWZQnP~=SYWKBv0C)mJ=Z>ds}wE4yW0wuCRTUc-a@1 zRYgIZ^m10!v%d-FRh-02t5efQzw2cj2R{Hv@DM~%;3EmC^%EZ1H)WW>wy>+`+4Ct_ zk9IxRZSTs81z1l{iS$H23RTs&@KVR_n5eI*eG9M#F_&qXJc1DXC$5nexiibV!Z8;P z1*9g;X{*fCk$L7eC63H7XRnwM-7|v!M7P@?bh}7Kw61gcpZF zqc*A^7Y2A%+>*c8Qktb0kHDZ+BzC~`K?pgTeZD9|<0q7|+-sey*$#bkNSQj zijom@Mn-udg>XdBH0!W%M1ZDRwyJ#`WblrB0znujVF2ZK)KYB3VF0%l(hsYp zh#*XeO!&?h=^AblPU_@NvQGY*{1f?4D1_(|$6=U9Q#&kz63DWIas&Y_EzfvT$!k+C zb8%dR>r|e4%6o+NL&he zA^Bpf(RkdQb82?%yBFWmKrSPx)w)jC`Cl3gcR@5V2QzCI5Ggp+{m$P z86~mB74>ZdXf#|8L4p)+tdwg3=)`j+S32;6$q+FP0`F@!y|K|~q=Soyh};cBfQF~7 z-=PS=uL_~IO^nP90sxD;TKF^ILJ0uK9*hzyMJEUwqd2t%7ozD3-v;{g?A+||&D(h% zH+5E?baf;Jux=taw}CO+PZD%&&lSw3S_7pNEXln}V9fMU8<0`~3Z|uYCvaWI@f6se z5!!VG7bs=3sWW3N9??MoPR6^VUe}Y-jS#{hZ0xk#ZQA(${r!D+{&Cy30V!4dsG@*` zk>1f&_+_p5l09*Fq+dMJn5<{IT@8jzzSC+uuCGSX85{QSyh>bH%vnn z0)0m{0WQhz-EvVb<%J<9K5Y_9n0C@ssWk0uU| z(8YsBQb_l=<7p4eqmiafg&dW^TEe=S1fq4L%*r33{2jL}>ar3E?fO}bk_#TcdVwHl zW`4kCJ6pcz8Dk#bDjbJXDZE$+89UA!x3;!qlBTJ!JkK)VZfysd>jgox;rp!BYQ;{o zktqpAN*N&_=W(>X{kUZr&-1pDcBjRCKW+H|cy4z4*49?(*qlk>TAphg@V2(x*l{56 zTdD8yX0sV3+4yeHZNZZ89R+;rsNMco6QIjIgjG)t;Y{2pGv6`$LTgaZWj1-xxKwzI<}xv zIxFq$F1U9P;~XauLPlC}E_{ESm)D-e!UK2(3CWP`l09-qG-12+79gWGygX~=JfE*_ zm!-T~W|N3=yOB@ExTH2M+?;V<)dA_eS}oBsUlQ{FJcYq<_s4#EHlE;_AHIC~a_aex zliYOMZMWTa#|pvsoA9jnzyJO3-y00}PmFWO^Zolfr-UB_r{MGO1+iSPm;KvhxdsgdS=AjYE#u6wmL-J8V4p(UsC)39yui`SRF|Vx7 zW9wD@kuJsV&Ng3LTia|fbKageo<4n=cDnRAoT5VK>2v4k#v5M@Fr|`VDZN7%;D_1E_|yG0Y;%nQYvG#fxK2!78;{lOrn2GtNzy;r zZmqAiVy~aL26uu}KYDOrF`3mB+qOfgl}h3`)=D|Tb3IQ8@uo0nx56+CTkRn9wqUm8 z9Vbtg0j~IwJIJHtMY(E%hIVFIov&>ZY1F4jZqA1i-+TZD<_kLjN;4Lsw;(K2v zMYFlriy{Em%O;Q91d}{I3_UL#4g=p0hE2z|o#wOR_1W%_d2iu#MQ^+jjasp7kr!OR zPMQdL0Y>>`kYw2h#SB;ux-l{dSLxPVzW;jR6N2w9mn#6lJg`sgpIjMq+L8fGPam8{ zWGqBKZe;z(Z?G`vOL6Sxo6Z1mkpg>iNU(V{OiCW#5^j%XptTE}W&% z(K-Nt(C32DZRvz?JsU_BA|?s-ZMz|YG(Q{Ww|C?Ku97XBKYM}_TN`mgwT@eXbvaxZxqc?bCf`4#d9Wl5lm1KW}zgDs`m3LWQ@NmI||VOKP18$?-*oz=1^ zrE*GH^wZc$XcIXGTEydxFh}lr^rVAWFg@De3Lf~7#X0|Brx}G9}<8059asc_g2NeL{ z<~KW==iG4Yk%tumUnoJf^+l68P6!AC#(QKddA?2lUVqe^{LS|7E=BQJZ|%jTz_^{i(->-79(ADv7llWYIucl%y@ z&bIeXrq){}A$S09Aye`I`E+hXB0<1JqxhWa)x5uT&S#O^4PLTXl!0GBf#D=Ne0f)5 zQLLaWv3zFj0YAQ|OlcM@v^(Ttp&$9rX-GJdfFfF3uV&Nr1_H&MvJ|{$S(er9O!ARs zjYjw1zt-z&?fIhs!9YI0q_cH$zuBPWTDeBgbzGynE|a5Cfyf!-$=YnOn2ae{o5t$i z&7-i{jQqs+J-gp+DA{bZDKaLx;BJy+sp9~S@OXk_JNIE+7*0|3Cu!C(+ee=W;mK&sZ#meyr? z+T!WPMsah)^8f-b4Lnb$t*q6u?1WNA8KpXwO2{Z|0OyDiV=JZhz>kTD{ooO8Y% z=p=0sAokHW;D5vC$cqW#MOjrvSye^7s#o=*nk7OCDezI@6p7R>i#(e_pG>g@wg$*c z-_lOU>`JCk8@q%Qn8Dd|&)fMz z-9R28-$On^exCf79KMavrZ39$?5b%k>!MuLWwokHni*t#IR~Sh_ARSXS<|dcW;kBW z6FbPVYE?r|x|3BRhj;n1;-URL;da(iL|7%AKhCPHAY&xWb}w1gg=ZCe4!Q#bg<*Tl zL=tB*J}Xx8&dgSI34ugI@9{duSlC;&as z;oNUJj_W#3(_4i4fYJjUF1+#YICvM0Xs0vPuH)}Gjl=&VrR?bKwseDiG zo;Y6p0uQ(1R%Y3@ownkwke{RU-1r5lZQE9sApoAsXC|<%-x}x7k{6TrlP_71ld2kJ z2PH1+w47G8l<#*mTP+u5Ke&HXuI95$)keJse{o5>5vE6At(KIEkMG>fQ{WFl+Mx_KwOQPzObR#DcmcVN4dV!}$934>Vj zQnWdYsopJC!VH?aS(TK<6%orUb zUvwP$2fpB(dA0#SO7+_?2!a402!a3~9}ETni2RitkpUh4grbB01LHg&!{2)7d--#L z0*tBe4Kq7o6xJUBVJyxJA%sxk>q-;}bBMod5Cp?2sD@eeWzF(4(53FeKoLE5UP%I1 z4-b+*>EAr*Std=?lc=$}`7Q8tTCTOezIx(`C!X~~ds$|LGD@du{So}k=-}u#;8}2$ zw8%w5Qh7jw%NV{BA%%=cp*u~*r*ds>P?>{Rm|a0PucEx?q79B#$&`r6{+?k*A_>gYG%b8wYhPsn6c zRuvx~v9)as4U(<`pW(=pvRJlD7xNKQOk4nBMfk#($~cE#kj7~3*ex#zndlG3<0u-B z2Ytc9z-!r#*2YKC;aR$TIlo$#M;Gtvq>h zZ4E&|cbav&!-fz_3V}h0Kad+m9*;f`hj5kGzw|8fPE~4iDv%r2_W5YqgfGCddJM8G70GB=XN?8+z~C59!SJub4SSJ|*y$>fXLN5{8mLr9R*ay zj5W(*SE~l>Z&4@$ztK#Z>UA_5elVuzUdGsOCMi++pAu~0MPUu z0O+*a8e#0%p1ZMmaXhxAkWrISY`RPZA>Q!irey$kf5YaPZya5P{|r}k9(sCYn-I`( zaOKmMtfg|1)=@N$1X9)#v^=k%8p7L)q9~qQmSy?rM;>|PsYh=3+46=PZn)w6U9g0E zUiiWne&@dX?mPUI`|kTuApiaH<;w>L5ayJ#_rD(f2D}lzOd?W{>nBmgfuVm1-EWh#u6`l@WBTaqU@AL8#-c^?Y(uaD-ra4 zo^7)pHQM|E*GB!a%UJj=BPH-A{^hQJ4sU`_ku`FMwhH3!Um(w`Vi{GddS<0VKikVu zBO|JruW>oDj`>>rCn{QtYTCoa>QXkF@5V34FG9vRLwcQkg87@h{YEp{QaT96%7a*Xf3s%k#}*S(G2EyLM!3C*e4K;DHA$eyaOyJBo%}O_yaU zUuuft*bDxJS@$T2#pTcz5_)jvp3C#;+GLVX$}qf))~(N3Osg$<_bm@R`1rFQc;LqK z7J$Cy`ZvF4XR%nm=t&|7IeG>U;As+&O>&l8N1h_@C1jFjRh4FWHT^p}tygts8n8uU9zgPSjAdo=F?o%-dxqwY7Tz{ zl);b+!TLs@i;nSigIk~Z*Q@S1efsof$z1LpKqDM)KG>$vJhu3VFLuHMhSBqsapUF6xSH-fJuO9hj4Z_n`v=wZZknZa$<<=9F1Cc1 zOItfan3b5B%_hkLurGA}W9TwAo7vR>5pKR&74vMdoR-sSw2VyHQ%&yC z&iI<2`nr>7t_0S~6YF^mt9<=LxdzWHm&@h*z?Fh(!Ih%6g$k%+P;D!vmhf_Spc@B znUvzJQc9X7kCAGGoKvMZW4Jc${WOS{C6of>DBw;RSSs`*6ERpTk8k8-+p+CQzHz)< zgJOp*fwA@-SOS<4XKle9qFrvC+?`3>?rVw#)+@H{N2*cU_2Daf<%l z_V#wS)9G$sNYgY8$0{!)$8nq}vK_~cD&GrdT8MG% z8DT$}Wmy*6Hdt16-uHbUeiYop7d?E>-KS26ha1vk%#&LGi`{fS4UQWhK7As?l=Mlz z8z>7SmJf%wx}lr8x7KxC-+nvYp66iXI3kK7SIQ_B(v6H|HygHX&MGaXA8_ti3Q!8J zf{d}q80S{o3O(C_TMz%qg=jSF_w9$}N@&|wgb+@Sle^aBN%8{n{p4d=a&Yf9mlZ96 za7n-)>R`<(=f$Q_B7+GmoX&a8uvS4om;&@`Vb~{?gfCrIvc&3PiEBzvEguJnRxC@k zM4j7}lXCBcoEr4MdG^*DJC6oIx%kh;=QcMtH|FQh&o|cR=g!@B%PqIP=BFMh%d(tI zCX@2yV6cBMKecI}wQrq_{v?j$sI-S#Z^g-J`uGntgPI2Tfcw% z@i^#)@%7sl78W+<&pq_eLl0d)efs+K>#f#95A9u9Sy>_4c~?&+buvc|k@MuGH^ka+q)qVB~xt3WPApHL9s?S^si`fFK zGaiNIQq;cY(V9nV1KOmP${1*qdNQSWbv<*wZ>UKe!XpBNCZ||dsH6dg;dUrA#sr85 z7#=ux?i|3t@{9othGE(QL`?&oagQ$L?5zE(1x9a^#0;QUz#u+6f^UL)HJ;!s|5a)o z)H*>PCNCwgCT}9!rrb#Ijnpi zS39ouoDgQbC=%`$0Ss5~id*9Xlq5Uai)cu`IweXBvj_r>NIKA&n)_C}LlShrl)c z-#MTp8WcqkWZBLkB?@GP39{_24r{b6sH*iGIf^Odt(R*WKwtiHhjZSNe-83I|1m|O zmL0{GRfbe?Y_W5lens_P??k6o2BnuJ5Ih>%tFO3$9}_QBTr4syGIXy16LLGR!RqyVbJ`oruz7 z3UAvsuxBXRyHy7J&z;%}j+m~=sUS@ybs=f#?KAj^lMiU4`6ZG!+QhvR2Yac>IwtjMKXX0CWBOOggTnKI0gsuDgM5K&#cFyD8QS$I(E+ z4YSn)G}QqFVF~cunKh|Ln++gfLfzZyJCO8!Uk3TB^+ic!wCgx9&1A-^K~>PL2_N*< zX@;;qFNl)Kgzzj8f~Iv^nhwWl>L2=ljb6hS$UM21iNsP`rly-6 ziF@Hyf_cEvXQVaCOFb~{>sSXkW>RH&Ttx9mf-rt+78ilvOOT79`bJGEdgbup!<{{Q z?^b<2YH=J;8jQSzOLT2@Yi(s^24O&HF#U$~@spaI_?8;X=` zUB@;}S)`y+t>!vzUDIIJbVgOxHEW>Km|}VPj??83P_;B=nrb++{@*HTnusL+DN$54 zE1}F&A!({2gVt)6szK2m$E(46Nz+5pAa|9!?dU>+qNYx z)e!THxhySM1^T@h7UiwQ#l@40x2{YdS_dy)ym;;6*=N{&AXG8U%a zz{2z!XU`HsLSpXx9v$KnWP_X`50jUXH<8E4hsejtPm|A)Un0LvzD@p&{3H1f00x@K zu#5_KqByTj##x?wh-r$CscDV~eO|~5i4S}}s35A@l>DJ&Se1a4TKf7SrvdpnI?Kg8 z%*(s z91}b$a1$75K&1id^tnrS6JWV4OMtFoB(QR2Wra?julhQ?Ck99!otG3 z{U~P)51z%V1W6JupUciY^+kdpP@H+LlX~Gk)70}k!N#Ggswnl-75wh~_utP1gI=P{ zBy&*LWc0G20_T{n2^T5T*=fd1`1rjPFeyF5bjmI=U1xuA;>3v)n-qg`|70=&E>TM9 z89F-mNWb3~1X#D-TdURX+>-f7hadBkzBR^{@EOE!a%}^ASw{Qy0X8z|{m~H39GW_(F>90ajjqCF^ zUpn?Z$i9!8_y~T5&M}7Ol^k)?R=LD`mo_@oNLEU%{C+$0I@&am9qsGmQ2 zG{u|z=5y}5FL7s*_4Vi0>e8M;KVHel6VvMm`jrzW(q<<;c;MulXJ+;d%T628?9pQv zzS?xt_4}UF@}Il0k^En_92dnN-tf%T$vZmD^zOT!stG3#9ZCrygb_{%UBj!1Px|C` zLJ;O*T4X#+6E1PLm{h}XQn^W<0AF78Wp-et$KKq7?W2_kaI4+AWzIpbi!nFnz+RV}2fW3+EHiD56NFH;8LS7$kH zPP8S^{^0oTrR7>ZnhonvUO-+>-bg+~{)l{+{0aGM z@-O87A;Ex$CKAkJfC~F?6en;$E^zh}XJR1<>#Kqr!4OB|!UUOZ2d2H|m{V4RL#E#u zHccu8T8AOkO_16H;4$izmgDoeG{ToFL;u*ELY;A{29`%V&&I1I!ETq*t*>CVZHGlw z*bK+;7`uoI+s6K~;-+o)w{Uxy`O5Zu!kzsgPbzxV)qg08A|XnnC=xn9AqYYw-sp5X zV&`RJZ~fhx$3#)=2&V)=h=f0i<2ddoNsQ|{^ei(<)6pvr!V>5c&GNqU;g=V9LG;;>pm67ar~(fv(sJ^$8kJJ zk|f#CG%XHhlO#zp(==7HWf+EP2&$@@>hjp?1;a2DbD*lKp+?i*o=i~`L&d%7&y%L# zN&ZLElHaE1&6k^N;F%8RRBWz8i!;WUB2hpTd{^Rt;V6tTs>+l?5S^{$XOqPk_f4o`%T)9=A`+AW$?iQ8%i z(-|@jvXkQldJQilSG*a~;wrZ4#03ap^o4(M$YHxE0Yf{FCo5gUf>W2$1qo%<3Ozo2 z_31Ul@o?Y5!fd)Qzo%+7(Q2>7aonVWA}f$2sXITnaA0YP(uKuCw-OmStHh zHA9n4o3Sr8-FVn`Tul~KK=PW+_TD@L9H-yy;)P|@1dr4jUFe!inM$Eb zToPNB4b0^S56#bm&d-mQx?ReWI7ui(5vHOj>aZIDimGrxlchk@Xx7`SY9iX5J|Q4v z=a+E}UnHA^xCu9tDwSzH1mP*LH$)^QCNsQl!G|BQT&cw|aSlPP=xU_Db?=_NjQYOE z1woQT2{h05j^Zw$$ex$DhDkLY2*V(xs>n4(QTIKMgs!HkOjJGB8z+fv(edbZd~wj< z9Jksq4KB)xVY>Tz8PIBtTj}gf6T0rTTCH|0bK9DqsRuLj3yZ1ma~X^+H1%+M+YLjl zq1)Zw-o1Wnix5I6AxHA3tV5RMbzkOn!Tv6s^MtYs_W!nIo-8MVc()oj%&_oB5o<)d zdUQfr$Wb-Q3+6qD<`~Ukld%T+Ma&0YfA+ppvsteT-To`8W2a{GUJt@x@Ui)(ye48D zz~$n`>sK|>ns_*>XKw+cuL7 z5%+lL0HE8O%}$-1zpUSW_{Z(-wY9Em=tLtxEF7RDc3gnVYNd>oD zw=D#7IR~wb;x+{dz$`0@1D^rtb~~~tB1&meP7z34veph++KM@;iFBFju`o=d8vv!r}Y~uwD1Rm(T(`!8|HJw`TU0KheuowgR!{T(WGI}QzSwb*>{%haatQ;bQWc~3h*9D=^HX`f(VTx;SRhun@=mA+7is4 z!>phq2~T9%lO$CQlyg|fdbT*hc?{=yDQg*Sy_1z`vV2PRR;p??PfJXAOmCQ1Rhp!- zY)xKca|zHnz9%zcp>}4eeH3mSljQ0HE6QlpusTFPWF+Y_}+e4o{e6xn2;M zMiyCGbI<^cSqwP^V7RfjH={1x`jL+;PX_MfFLCy3vpjKZmoiYuEXDvle69%s&vR_x zT3b;g`!&{VcDwF1dxwAI1_6RLjUw}#+VTPYz-FG`_)8E{Spq3aWemX2 zTS72yS;jURFbLdKB1P^fwF-!2dSczg~MU28RNY_>xLA-fZ>)m47H9GaO2^F6VmoJEla9VcuK;P}4MT=~A& z2LPj7DPju%!Q%*^0j2OQ(*gjbl#V+c&u@2fA%DhE3M}I_f`D?*4>>!V#K@@Rh!kOa z5cE2Y10ev0ffNA3#6!Cm_O}rLn2^XZiQ7%#84HXKBhP0n2paI(vFl0M8J{@(C3GEE zb4ICB%2?*J;J9(eakTJ5#=KVG!~f=#p|H4=fJ(`8#xhDNN*UL#hJ<87E)g<`WmSoMR2ItxF40m_j;_t&JhPYxJVBUM4I_s|GP|+~$|8p! zbDSu49LI?x$2l|v;<%3u`o|~ZAn?g!4Dk1UNLJ(;ayNMqc@O!CI)}tPA~>{* zB{#efG9=pTD#~Rh(b3X1KFO<5&I;MQO0(=4NU+u|eL7ZVS(@*1fde?b4cKK@tvU0|9q&EUP@&-xEh zV2tM(lY2$pz`1*9LiD!&49<-N!3MAybEMe-%3NhT(q$AJ0Ov{D(trKv6~~Sp0~EZ| z?KF}U_8ptTFAj^M(+22vin3RXMu?+f`KvVVVUC=&nx|eH+V(dGg8_A1OdzMOOFwUp z{UUjB;7#HL+>QW*R}rC*|@ zQXGdR2B)-mmvVF;URt_zV>|(vjBiZ3UEk-O!7`<{inh=_=xKRYMkxao9a65M^Be6% zb{@^M)8dyzOe&NQcN!M>$A4x!%Bj!>Q@CR^@i^;+-Dbo=zJPK&>{Np4?rYVVF*DU7yV`x3YTquM35O#&JE9 zQE+rc(*Wyw)-9M2|M&9+!@#rqMQAjp)14F3X}t!uYCb)4Vw%_MaJ0tFmLGFvWrf4D z+4a4pJYVw>h+zcJKpx5%T~lF56`#rTGS2fjw3|$x>*0JppC2Cf1MA>meBOWWd_JH1 z=f?*JR?t5@{GIuH{>b5B-?t79M(2a~Jo3mR^Wfb0;K1_xhljDNGx_dM!GFiO`Yo8C z3kY90Jsx6s2f{o*8qM z)tRlQL?zw@++o%=FJUbw*vr7m1dCGH$3wr2^~KIx}?27AT{-RbJF7Rf#AFlrd@;OechJvdj#)O1N}*iI+Id{13{)+A zRH0Oki!C`TynQiAQ7UG+WY!c}W|E9$rRhd+KxyGsPvau0UuCNF=wBr%a#BT|`LZOj zVwS=}O_Z=KFuU=)%kV*4myIxvtJ)RQs#QQF5XDKP6kX?| zM!^t7s_LHWsv@JzQe~S_N~D6Jzfo5d!c>(BhM}@CR2z<=lf+r!G)ca{21jqU!?32^<4iHncFTPnRa1=DI;twEN{SV3g-UV?YQi zyM9Tj*Mc&~^BlvK7s%CW-O};kGH3-tfD42W5)cgcjFBO!b1%8n7m_RFgXG7_7s)rt zpOXIp017&=6NP-o=wkTwS4mdOur!eEz^62;s-iBZkX!5i1rst9Sz=b7cm+;mipvs8jZJu$7&80>1` zY0bJ?xml2wwlinc*+f@A0mg#^+xVt}s3?ky_g-kyk9wX*AhbRJ^(3Y8Q7I*r0tJ;6 z0gg+qxHABG9i}Nmw)MxYO%d(cF@2~G449K4;isA)u>kH#mHT^ju1QBqvhNXKv zZ*v|7l+w|*tG5f3S!Av4jP%YO zvh3qu@YGXJefFt8-`A^>%5(dqMDm5m`(!}ooMsmc?>fO_#-Tx}4^Va#=0%#j>cr=c;K{EEk-i z5D|I8d{Iu9)2dib%jt4jF3Rb0v|Ml;&8niBmP56wVp%N9YEe$hMLu0l%d#5TArmu& zg+?;13O=Af0|+a&*{dTtm7Ms)DffD?Mo6dgSAJS% zYz!7O6LY1;tT7Z#(_Y@@Fo$o=mZ9F5PLGSCE-L>^@ZWF;r3?dtR*^u{!4E!cwjKGk zltvbs4wXStk$nmx5n*|EG!}$WDNXu$@7Vo>Y%fi!)k^gN!~HwG{E=ECs&>OL47;^P zRGSn`)11JExYgCmSB^IvyRwG)Mm^7WcI4CHRx3x(umFmM#f7b{g~ft{!5VFEZ*328 zW;cEpbMP~0jJD7Zny{2Z8{7ec3&7< z3V$jSGR+^jy1nDL^;+ZV#LyT(5VqSrFYv=NE6c(2%Kbr_U^p#^#5%f%1wk~3V_A-$ zi7S;(yHdfw_$|Y-EKk=!;E7!-M^Ljo&zUmT*d>KB*G~0720CoYmLrlqVW z0>V*+sp~*AirCMDY4`%sTAY6=&$FU9qIY#w`T(+~RW50YqA1$3V^lGx1AOJyty?wc zwTf-k6Dk_IN>w|pQwp!)R>$+t=}kPBbvq43(cp!eqFDZLny>O9V-O4$-PCo3Y1*Ck z<;$(63Z+cqX772&jP^cY0Jn% z8fUQzr?iApbux1XN)+uZcMk-!1)HugEBPNT%A$;7YqGv13O>p=0}Z$wZE;x`rLRw` zbiPPt8wX`wT$a2rOELllGmOoN>{%QD{wTo|MUO9$JAjkPQc|YZ8V!IrX}1#>DL}ck zH7ts1bY}Pse#^iE+t<$z8G9~$RwOT9bUmv@8 z&GBOqIu3Ye4sO5gBGX#_B2eHADRnuMNP!E^gOEzeL%{?hG9g$fn2paioKuRZoc04{ zs}0a;uUFl!%N!fPan^can7VPin+-EA2IXp176m9RKq1w?ra^E<1&6n;05-R-J-4=I zOqQJh#J5vezs&#$>~pR3nwZ736x3D>o9Qn)FA<2bhGazy0N zRl3=n)k&iDSbLt@1J6spFX?tE4*I3cl|tWZ32|3x+s3qV%U=JK)oN3S!bau`LZgV58Qun@VSFCcw{$t_-psvbI(1WyYtS^$vTb~e*w3uZU$%KS8I=HB;5HS-P zJha={3-Y?_!hEIA6-R= zL8#HX=p@@dDy%6hBq?98P2ogZz(l!0vZ)3E+vNTEluiUeD5yc2)n?1*1;(>HJ(FAM?fHP*7l$37JyPUF$=EJfyfwo$|b ze@B;S)h0#PF$yd$W3$J%r$Sc=frNE5t(n-mV5Hu6KW9Y7)pZ^C>o5#?h=C7Vyvv881wKCR8>?}3qiUm!N6W&)iSA~sO({4nL(ukWa?A`(;_0VRcZx} zQxOPDNO)ZlU3U{!(NtAY8RWdc-{j$rz)b+K5IeqSnh-Ag#R5_YVNmr916*Bq>`KLU zblv4-rMF5M*TA6bZc#UI-84Pli3ASgB`n0MJjOtMw2ku1qjx@H>G3MD>4_f~T`8k& z8eF;wXU6YKa6(m#6DJHs{i-nR2blx#z2v#W6N%@;pBsvLMpcaDxaO%UNqi6f>kRl_ zVt<)`7#~20;vA#Ecg#(&MU4F?;e&%5QCpdl;0hp&rU744ac0|eQGmpIieInS>qJf0 zQkB%VV>#Z2v%9;yr%&%H1DE{tZ+zn$-+1`l#V>xb`0j6f;S1l`SYKaH$K&*Oo7U@g zsTcTFcsYC?#ppcpo3f)FMz2C@p8`9Rw3#*q2Xre^)}iyc(aX8wnNOqMn{da2#f6h6 zdOe53!!(@kw4w%w!^p7!Ot;bSVBJqEwhfjOg&2qTT-vNhYkDioCe2#CQc@Hm6n?Zk zI+r%Vb!`l%yk>0MiLZ!`9fVd98Ok%~Tq0*so1Dw#&zljNM2NtG$ora4Hu z-7a__&Z-Naa*LhzY}W4wJ_LTRKieG+;e!`1UVPD+aBnX>gI|0V97om>zt`<{ySp!c zB+p4DUC}&$=O~j$#?j1>9%{EAL zEDGmFS9ro7+uPfF>u&XlPps~8Z-1aYyqo5G^ZEP(zpz_-;uCATKk<(Fd^j9FG<^SX zI2=CIA1m2UV-dcYS$^Df38M<;GLP6WZM6a&MM?3b4uLXtQz_7;{7^Nol8#!+mzwZj z0B{1sJN0uIFZ^HuV-D_VIsu%$MbJ~GtcuM ze`a~%8@SbJ2XL|F@c_Knx)iiKEyN@B?jOOw!-r7|WoQGPLMSP|n=tDHJvYHRK!!}F zKxm4Ich5R^;!H@>IHj34oqn!Q_{C5VDwV7fh6a&kVuWF3v04#?Ff|Knt2b}1t`*Gm z=<}UUr}Nu`Y}jdy$K7{+@{^zZ*zi-M^Ckc-a?|tJzSwsNSo+~L~V++~u{-R89GIZR3Hk4_tR8^YDFKxmunC2e5_gRtn zWK`+?@cqH_Sy_C}k9_QwTf1G5^p@5&+8)j4$EQgg*wM`mt*{?QK4LZ=S2;yjTWPBq z0w(?533$5Z`y$-i8;9!Fi+~F0W;vfVVmwJwL` zBqlpO{!|i5Pcck8-4r{CP$1%0#|ATnci`WJ#o@Y#I&E1%g+Lh$z|(QF`d@)6O%-4u zg=TYiulQB-oQeZ5hH>7_XlhIUdJw?5Rl7}ZN8o7Ego4%*!F8ptmFqSqjizRZtlhU9 zt|-8!<7{jQK-cxNM#E+hTtKs&^4EmtQ3Ui6!S~ypGf2yF^EL!}LYv44x`q%Og1~Ef z9(KCJSUW!LJos0{gQGk<*KQ@xA;jU==yQU2;Mg5zM@jXdy!`j}Om-MQdALO7+jLtE z;m}I~2|plJGmaz9fk_KHo#nBzh@;8)EJcMTNy7-h^9;i*wVSS!WoyURN>?ETWLcWF zf<)T_Kq+I`&$%vl5IdFyt~azSmoni0jRGibBZXFTYkSqmV9?****ur$z)!c^fN|!z zoPyRG+wE+vkpbP>UJhNGQM8rhfSh}->(JZJowF!rS#wg9u~6Dd6GDhR%cw8F7vU<= z

=%H%%ItN*i-SU9HMRnMykh)0%3|GF?q1WXAVfl|sABT{|F>r!&ca0f)G~H4Fnf zw4f;V*$W{;0Ii#?>8#%aoJ>wO8`Sg$w@#;&uJYaK?lfPQGK#VnxKR`}5-qqr9u9rv zL8sHs25V{Bg7up&H8!`_Uft=QTq^-Cz4cffhP%g(PpiZfljZUCbu?LG0WKGpFYQkp z+jb_qt9sk!z`C}@MW9{RNdw(zj4a(wQZGZy$J1#^X!-nr?tSZlO99epeaLPNpCNvgoMJ+N&{`;Oa;-9N9r!@nuE zcLqb0jw_(moD8#uaQeORxNBLnZLi&K!f1T!PO~|Q0xCPBQ8&*&rCrw-BJn(KIiYJP zP${Ekua{;-mDUxJJOi>?r z?VU}?Da|a!e0G_nWVK$+XFOx%zPYUYO}rG*b>(0;Vk*Rh*tXcjW;r7$BOztc6x+RA zyo6vg)+a*7Ra{dLjOLtq+Szozxm^kWQ&>!l(@`i`Rv}Yz$y}kO)fEB|sMfX{jW#w$ zk!x#BrQTItOKRa#j=)lK7)wPsr06T*aq0RDvnboZy)cNiv7J%pY#SZ>5PE_k07dG1 zQn+Fi*jh@)-JosTw(Di7=UKMX4qVQp)OMf|SsesvKU4;i`HUM%EiLK?iq3BrU1nOCy z^6k8+>fC05R;COStbkYGC^I;sTSKtfhJ5OVRun~13l4@e#<;e4$JRw=*~S%8Id&A; zj*`MPwncMP8;zFcOfzl)rcS0P${c=bY9^S97y|$vXeaA*GDim~PxP}$F~KzDIU#j{ zQYTZw*H)D2U~F4}OjsOkN+qHajNWD?Fo$|xyX|?@8TBFu%7j9cl-kHG!4NEaOaY~( z1ZR|LJJizcc3q`HTT{xoP_{sz@N^WlUUG8yW$v6h77;0<0vK}6h2UwRs>oci1_Gc! zW?2>mutP3r`YuxgqEMC-fMpk+B^^gvUSZh~IF=Gfan4lm(0;Y!wPnIMi5X{HQj}WE zQ-g!o?Au%$0He9xZ+Ka8)S)P}L@GJsEKXuTO8c3ik8?y$xt$cqNRG$^rGSD`PL@@J zqi5hd@RMYV>}z>=Ei}ev%;ug#XdDCPzEu{Ia-=8%Kuzn&H#RTru2MQcq6g3PaU-_? zXS3^e*BfaX4Vq0KTdhliQhE5xJ>SRK?7FqdYJlk(_$^&7N{LWE{I(&_f*_DpnNB*HLqgV@RLe2~ z6-igvT3K1#*Vjo=I{(%(G)L)(Ba^ki%;rDg!Wp>@pUd`{)<69#SAbl(VqX68m%se)U-62+f8vEN zeBqzG@P&W!!a43vFJ7GP;xOuGHU1F33_nf!ltxc?%QB0TL=POTfnpH8&&C)h0!V@DwhY5YBTXBv$)wvwPe}xdk{f#fDw6q# zLZ!}_XOzO$fl5iD6@T2L;Zp6nmStJ)b9$ZijSYy?OR=mJEytc6MTpTLq8JYzy;d3x z#*hEhcBcz;zPQ+IE>7-jZ1gc_3*X0ioub@)e52n794*(^`%B|dOyW+vM|i2|WlOJ6 z$Z0qA9btg1f@hylKnNuS3M5@(@#$)j7{}9o`~l9Zgah3ZUL1BiK@bF;?r@q9ldf;; zhh{5|*)=am81(D^G|uyJ&PQd2hwlmeZg)8BcKu*5j37;i!!!lgZEhNCH5|fo^E}VT zc|NxF%-cs-;UC~?fA`Qdn#lWl6@EF+n1h64*JPC@X`(Cza|4yq-hrXC zD2pV$P@hjF!MaRVn|?*_mNmTa#EBEoD-qxk@A+%jC2zd{_3e#8(o2G~3h_o85n#B} z#-=rjxZO<^taDCP}`V+S+RQzU754r1XU^rop~325{6W%j(|c5@5Ny z=Ug?7W3Ls208x~t=6LG4fJuWv7-bwj`Z0iyot_ZF2_*#g;R@-HKADi`lD88Qt(J?j z$VU>F)i?oPuw2wpTFsZqGOq04;;JHmVrRKVqQ+fl6rhQT6T!{u(!Ph>muC7 z^IR|In2M$V*SJiiYQdy-Mw8WqKCUY5f#V@x@x zpS=In;TKzo&()8E?=~C#ejWt*xLy=Rno@M^PJ37Ba1sXNfo%c0LEt!ujcj9mj|wd% z{&b5{CcRVlKY7|wjIr^sEa$VL7!iVm9L3zfC-=qMFKQPf!3eO}@^Ury1K9#HCV$ZG zx{q-}s7|p1YU&Bg_ZSOo+w&+IO2PP1%wPToOZJ3kOUu%fCJ?+}JPRYvIR)xF)BHp{ z8jeO;3v5a)t+XYTq7;=Eg&hskf(r(EJ#VDk^%9XygXOZALb-cS@=uMxJx_C9aK1^W zzx>O;e8(@Bit!gd8q3xAuc#M+NLL=8`rouUg-+^OS!G$7i?FRjDmTgkdnho?bm=i2 zM0qT}ZG0d38u>YXRk%4xLzOb26U(Vfhixg1QkD=#Y13nj3&sR*@w-nclz=t`fF?)RZHzc>QUzIXa z8m){FR?Io)oO3QXXN+^sT`P*BkfIBqEXxmtu(qU$_9Z*vGQEWuBk&iom7&>VjOX2gowpVz$mnTP85Ej<2mO&GRsJ>rT*_9Xp zIJk50NIWL5Mp;s2Qg+h35{Zy;!doyc%30ZCC+y(|ZP#X+D>h9E7|c&9_}f=CDfwB`IT>lOl&B8E7cZQrx*`#$IC}464PXlV*Ri^1RY%B2Bl*}v}0Nz~&;ij>9 z!)3n#pCF2b`pLJE*O2#1gp8dlS)NR(}F zV^~d-X;pEzdYHgZRSxeRkH_P)TI=1un>hU)1YqY|O{ID6VJ9;#q`jFdbO9N`j*l1@ zQgWWY+(;pn6rAB;8z5QMn+#A&_iU|{vf=P`&}6IyZ#jHjNI?h%Z;4O{efYZ9z3W|< z&zw2)t_L2t@4j~_Eo6TAUGI7qMZuJar=b*-0lxH}d+tH%E;Xh2(s#Yx7zIBSosm1}Oy(v~~`!IGW{JZPtRfv^Z!Q9==Wq0W5+mS_+WW|5lu% zZ^8eD&ywepHxn``MvM2kQNE}~mF}HH7L4$cKUt#*Zs{zW&EvB)=PO0!;P-T~oYv_T z+hrivB1$8OKh7|N{{;X{m_(bT)$aL$l$3$*15gb8B#J|$d^dI-rkDrCxUD_Qi?UWP zj)kNY27pK#Su68gDG-DR9Z$YJQ+)!o*0GeAFI)3J;@ntaIA~c`;`xd@{p}OEu#79E z>&1;E3&Jo+;&v+ueJ5~yBfGDuwWlpE0fdOsM%(wfKng^m-!>W(Jop=f0_DRG{2KCV z-p`@1RH4acTo(Gbp0X&5Y}zd@oYKxx*}a3Tx3r2Zt)*bsFQxNzyf~)Q0(2uha(D=M zc(~T#gV`G3dMk&=e~#8?X;~JL=PTa|ZHji1rH(B`VgOJE+Qb&3H8EC_aw-tP_%_lx zF91qmpiOMkU++g*7Toaz4NpV6y|&VWSZlZ8@M{xe#cj)q+P;#2(iS2~)65Y7%n8Q7 zuyn1Qd`oi+DOmEyBIlnsT&_(f#!7UcO>9fB+$GaiCGKf_ZH~cG8AROdA~0-t5?4>1 zK7Hz%-5r6R*SqV~=~Jgid@|h3H@EipixT;S|zK8*Q*(TO)+0I<(X7YOS-^u?cq)ypUfS>r$Rar<{k2It=qsdtFAmmR7 z>-mC&Fd8y#1DsDtQO3D2Igya#0?rK-gC$wyZ;(tDy`{#98{(-f7nxh48N(xTfF=?c znVM<0ts3){^J*wGpV9J_>SMTyU=lzY-vXeVb1J2DTvuw_k_f`GW6z+JN(zC@DCAsN z2%cxqShkHqNZ?#3A&^Sx+F679mJ|8LjYfuoHWc(FWgDq%BjFFIWq=tAf7ke-W4y@u zDLeF)9r^mWacpThw)!Y@Y+#NJdm7Map!! z=c|x%*1h~NbVR`2kYU#89PgQcYDyYMUx1&0tK4lirO+w^0wIY<089hZw7tr8S&1Be+;JT0d9G{LeOO=XQf#-j%T77k zy?%4rc3wVdDb^yu*Df8bmCn6mXK`8aA~JZ+?utljB!daU8A9NO!zt@V3UNEOIdv(=K|N}>61w6!}K zvmc_KrLoiLbeN^JJf@m0DHI>&`IrML3T$ip+4mO+TZK0GZ%aQK>S zomB{L35EEgCuP&&NTuUC4)3?DR%_jMY_~rUj3bpkx0fW^mNm_y$T$=!mA?HK8k&G= zY+t5FP;mR_&#OHMGJ))dGMce=+5RXfUMCUxVhkd$^=IQ z1=tLHLh$GxkC!9wBq7<1XK!j3Fe7r4(Wbx?%g>7~%BR=XH?qXC%HeOTg!P18gE3vW^8KrS9TmXB~WJbwJr z*<+kFlqt9GK7Jh7@e_A_>lIS;R^w)qV!N|hw%QDMUs4LZnCzY2+GOi%`?KPQxe%cL zA6$ju=-9DqE*(Ff=h$Z=kt_gu^29xN9zTwU-}`JXN}$c=c&pn3Xf_JT+e`(~-ekgY zZSC~_#s=%WgHx37Uo{Xy2omq;8Tfg4np{KfA|x7}oi-y5%_5IUy0KuStxUnajOuBg zg4t}oDuWB0M&im+P4YeW54+Q9P4jI0BCf60#`@N}(YQUEt*-?cXP|Vuy_#%p3d(Rl=5Q8jYhBU(FVCKMdpw4X9MvHr8LK!<~X7U_U@q3cLoo9r_<>;9p~`> zM^VH&RC{jJ@_oQC=r=8k0xdn;rt}OQ;}|D6!8#l0lwL<0<~UnZ-?PD!f3UiOoWu{AX~*65pdA-YVsZntgQ2((OHHgK~3Chu||N3BW3 zIuw9APJ7K`%|aZ5#1j&L@sPeiIZ|jbqNkxRxRAE75cKaf8V%)tyVL2=5IY!Si@oG! z_zJxFHt{w@d=`VW;}r0-g6>6@Y`vI1Xu4gV*W%VmTZbz|uTRx1u{n{gA3k%C{H z{O@po|Ni?W*4j4^`AKIJmm{19_@C!vGjZ^4HDPp%rF)W z79nB?Np{TP89QDS1xTs<#3<@%#X0xK8RNFY*wV3weaF5Y(+CO>dR$sI zjG1j+mL-Bp0x5H_3`Hpa4W&Bs!3~825Nq%HC`BwMFopNOzK0Jb4r5waR-D?lv;fj; zequkCrpf;>28obDg!{8yc{VndZ4WGp8GwhLaRD5&Zczvje6|xOpjC@X3Mm>i=U?dy z+W&v?06s(x$c;St-J)I=uFyDujuugQ7QJR9rBYwZkoj&EIzL|3KTJtch11rXuaGE? zZ*JZC*bAP2-%a=L9ot*Htkb#VM?dhTnGl#;v?4VJ?l zzuD~Wk6wN5h8r(knnSgI=Il*3ojJ4NN8eqoR^Rx>>Kos<)a`aRo6Tl(gVH@?U5p~! z>1K|DyKh=(-5*?l-l@qLU_3q@`i#!w(Z3u$gRI?Hy0-iS9k0?`piy;_fzh0(oY0kS zysGE4w%f$Z+mKV&s!vM7*AKq|dxziXWestR2YwIsW)JZAU@&-D7Nz0(!awdt$%RNi zi}$JPyB6vOdq}|35XHU2Z}!|tzr%a5=*1Bn{;2D^FZApKXMgJV{jm3Vm%oJdPzRxd zB9yOGL>wI+9pPKxP2?E4k^CU}dqC(D-&HnAkCPl{sE7uqg_sq+fhr{vyUMA;#Y&dS zB&iN$%0c6eG)wD@1-4{a)DGx!^EAn-8kjHLJq<2tC)0#02PWw6m(z+ITtv0XoVRu1 zcT$|If})(o`AU4EBUK$!i;a^ixj%6d6=vyoi{(eF993aRm_`;paeOq?W;jk()u<{y zh>56IdJ6mfC6JUkNP!F8D7++vH0hWL+I9+})J7L$qbTb)BfPU=TS&oc)YcYr7}Rya5$l;BA|%WvRYt=isEpHRD}@mAP6OQ4!vl+mg~@v3@*L%GDTn{wm~Xnl5ztABxp)DXD9$DN;VE#NU3qk1B~Kx!N3nV z92@|TlSXhZj_?4aZ0;l^31&M@DS;!&!2=xB;Zc#MV5~6z&(~#2LzYhRPMW5H(x7A- zB~pRXzRwb)!}*5x)thQxYR@>5gB0($g&~YmHEav2u7{8 zZ7i#8=go$#qzXIYlxnp?N@|H~^Zc$9QNT%H#>(!F&8?os3aHiz;YZ&+`gd>$-ykX3 zB&W#rk~xII_x#%h26)c#Csi*$7rWAN=uMX{U2*}POAev~4$?FIey?{@2p_zQi#P^| zKX5Bpt+EVpzIK}byw!b> z?BdX4ycjq5_id%$s=wR^zxLdS97&G&%o#*X8_Otkua+q;&_ zPTNTPENhTCc|IRxel@pI2>f`tQLr$ViL-5@2mGH4qkNhPQRYmLulXU@!Kd|;M7bAUTgP+L=m z8k%8-TE%_G)f+YdP!)!W==FL%)lGbX0RLiJ=8e)LO0^OXS!|6_iUEM-QUG|isq3It z{Y~Xis;+vTcf%}>(59fN@1H*KJgNb$zjC}4_MyyX>pcr*r|VqiaeU%(t7#X_rUXDS zZca=-8V<#Q*x_QHs}O)Yj`;=&IjL|QV~Kkg5ZbaO37)r2^bhnN-Hk#9sSOgLF)H8@ zzo+%md&;-_d$Hd0?ITyNyz0d-e({UfroX8UFRdg=)357QFMjc>etEU6twWA`c|7_$ z{3CoFL0)(eSHrw@&<+*<7hz?Z%Fi^U49$AAI#98_2wbLd+;00mPCt`(UR&>VI!aF_ zd$-+u^K!)@&rhDb^h?&}=E?o_O|4qXYcAgKi*4VhyL}3?IO_a8Un@_Yx^!kXYfqy1 z)T#TfJ#k_cRColoA=%KN~_yFT?S?ovO})p!~$_?@Bu<*qHwoc(6u)l7CMp9 zYpJXzv1(La$@n%4Qj>>MTI;-u!tsf!-7Y7smSdFCmaPn4&lu;o8>5slS{scU!?&!N z{>%b}Qfh!WDQaUj+iieG3|d>ZR?2ej7L2hMD`gp_jP-X4Je)t{@XBF@>fGG~eY4w5 zZ1wamq{|CwE90}~8|~|f?S$PXAD%gqzuo)WzdiOhM`Y3;L}3^W`jfc{{_NPXV}J9v zdw=`4pA3S*U_2fSpbeTY_P35D1YZPiCQI^C@)q(T@)`ES;2$}x4IhFYa3?LE8!`<` zrX$a5fa;!P^UNu*IFM%W%yRK=6_10w*{B&SsVw@VY)=7>BT{C|K3s$S`cJ#uLX0 z8=NtuUJx+w{B~=7qiMC4WK(3 zKzDuwRH^_}s^G<7S_Z(h47`8Q@6%xcozCWTYb)AH62`RCZg0{AgCqoB+G`f5QIc4m z@An7&u+t3@bQlhL&8BNBJsyW4%^aKaEFBIyw;-v6pA4Ops7XaG7yYv*?KFAprxqq)7PzJ^U&-XlpVBr}HM(VBFc#lcQAC;gEKuWzP zK@D3`1lI!Z362zu6WXq2L1&FPAT>VVsQal`a>9HiHL56DrD?g7%m@=Cv53eFbj}rW z!~6&x@)1e^0nfB{aNGY-QC^U2fN*C3)kO=on5+X+jlZK`Ud=n)jF8^(aj!QF1F)$5*qVZH8FuhnwnbEDnex_{=QQ19-J&c*L* zcpmh+TU*^8cwY0SvPjZq?G;IrqP&p^k{*2#H{dJeB>6b`J9q>e*d-(?>Ns1~>7t3` zS4y`yUo;NIZTa{(5!o!6R-*rt$(5v=lq zRW?^h8bq^lwX6$Sdyph`rMgSq6;^&B8isq#c(I%}NM(wWJP62p<0Q^z^I4ABQG%5b z>34%0CppW}Nl~t{`-6;;k&grXgr|#YRj1NexD`flxQ&T^A*V&AKP#ye(kDlfkMf7o zl0xF%V9)o6)m$WEp4O|mdob~g1)(G>7l4us0i~a1&!TMMr`1uf)p}KCX z0st>*4>&`l*lBF_!L_)Au-lwSPAO1kyJ-gS_YInb@brGiiv~fUq-809c4Un^NP$fv z%aNQZ5z_sLtljHHoyq!orxOAGbYMF|1KL4CQcy-EMaw15?3HvZWpo^Ci!+J}0jSM5 zV#I_?DWehqn4^^+SO_qLh`O^v1uARwnjs=UHw73pJkm@B*3WSx|AX~8UU5=df4F(gc&QM)H4dfSez>50-`GvV+>G6LBJg=IX9)jPJos& z2S8oVi4?pa$%K-=YwL_5N7QLUWLc;cr8(s|v!cFj1A2jFw0NTkWdIMfQp>D2v<7e# zc%5C&*&rWGCt#JJ&EHds*;F-`&eajTOJUK?l~Z>3T)h6p@hOdHASGziey0f5l< z88ElA3Bqs=xIXH<_SZ8Y3d$M4XJbkc1?@&wyEn{yPXWjz3H*)-L*#T^Y3Vnb<4%K7 z1j_=X*sy)6+O2}ZE=MkH+tD@!Kt^59wC#m{6GR|$`EV>j6$0twFI5c*HSr- zu`QRgi3gtNO8|;P&*jXgFJs~WfF@25hF$a1jshMgfssOK{+}uUeT_7Xlq935uCQ&_ zbtnb2Y(R`W*Wto<`4XzfeA@{qbwbw%pcXTJ5K2h39aKWnSe2tx3eK1j$_c713YpMV zTY$ioZ&`>kYqLIm>HwuQ1O%%|k#i|L1nMXug>E+?kagR=2wWizvPsU9yU0t(yLqso zdM~v!-J*J`ONLUyG^Q}zr@y+&?a4_G&8LRAq&&SP{;qw%_be8Rg_k73I<>6CPmo1qtkjQ_@XSj7oWgm>uwP)We8q4@tR3hT7v}2j{X-HW%6O4Q zk&%GGvp?x-W4LF3GXZGhd~zfG9S)l1WRFE0qX!U%?IUs;%y~lc1fJk3JOf`LU9wJ| zATJ^$t7QshlB;%OURkjr4N_Y-aDYfsOQ)QnbmiQr3sY|)s7{hbY0ax?_&z_MVV1)6 z1~`9M)L#R?-|zRMuq^~28li7u3{|69DA#kp(G3FY=fYQRUON;m+hGh)YY@V@&uz7m z1O#Wd0#DpH&ISD2SM840Z#_6T5VjQt_CZk;(oa){lv%=>1OboIM8c12<@TTXiJ$n1 znhTXHNezIpecu7gG+UeBv5}$_Lu1+jBuS@}?DcxRhU)^veF7wl_S&5tco@3f z-QBvEW>)BVWx2TR)ah2c`ClJ;XmsuV{{H^{PwuU6gw1yA^r_nxW$AgLm8HGa?ryIO z55vyRwb$PHpB{SXp@#^eBtCiuUj|Q;OXNQCLPDUZRGqa5HmjloRfQZ9_^{*U!jtE% z^9}P^JxkJTD*L>kjOS?<&sX(gxq=g7u!G!(Bu?LSdUW9UDF7wUos$aS)N$C0BL(Mf z1_&HzqyQ^w^2^s) z!1FE3_rPkw9k<_hD?rtRtOcMQA6kAmWPS-3tchD0G%J8#|G?q@fgor$10Nvpn@t44 zgUh6?Pr0Iw>fD9CA3}*;iIZvdDvNj{rXy!Z+m=tkhQB^FpZ9z4*T67{(&8BGHg8Ei zQjhlmEXIl2n($L?x# zJQgP{t4t=#B<0H5W=`laKf~p+%He(Qd*A!s_aMCVp@%{*2!H+8|Lwytc+YzVZ+g?4 z9*0}-c6vy@@;$_7kNyik69e+Wjkl8r$dlwn>3x*bMwO+ zgk^R1Uiiw}Z(k4F?TB)44q@lQ#LWNj#EEb2?|o;>-uLZo@exM{cB&{%G5 zo)wraZ=Pu z^&1&yaopr=Z(}n+fSX6VySuyp6$w$R6XQJD+T3Ufp&fe^MHZ+!LakOi%gpT7TW>wn zSzBM9uCHgzy~rGF6h$Mq6~_R+-$;C)38koQTUoEyZ*hKlXFEhVctN|}Zi70@M+M_Q z%cj+A*zIH;MQz)5y=H4T%=1>;%F`@yNf#^i@z;`j$jiw4K63_n1jSq~bKellsH~B8 zrX&$*ON77N&So34XBPXLUABm^Z@3elKmqLY(EKyqIF@3Z&qB|mE#|r5I0&#c7!2$LfzK!)m#{CUF$>dj%JlrWR{7hK>+0%G(`|T@0g%5U)7A3I`E(5yZE^`*mUN zAmN15Yz}~;-A_|yc$)TI-(#s#^6+0xr&D;1M%G}={jh7K{TUcmMX%YiZ0nuF6UZ1V zT5b7CMk!Wf<_Cdm|B3h2Q(oZ{TiX1|Gw?LW@j+hzujR#XV+JtHJGRWp!Sn9i-G%L~ z`+w@EZdujs4(wle=}*DauYBbzYq~o9%5MK3n|LcQofo9mKVexGjwW(Ij@=xF5Vx>v=Y<=+gY(}^im#_#d77e zv{8;CGE?8VBl1ycvIQ)?Ys*EQ&fh+TmU^-*${1O+`F3;DNjXPzmf(~Y4){u?G~}FA zPIL~prww{BNur}xQ$P}!jOOHfxhiTwK?v{?xL%cT3@zJ6V`$_VA$~gvEFr+LU20kE z4_rjo1MoiX0eCK=3#U{RM(MMGv0yp{2PjA>lre~)B{Ig1?P%xx6aZ|SgY6)o?SM1} zw_FOok6zGyD2}683)kyP1>gWS001Qg(P|GmON&xOV>pu%5Y&F&NmGs}5dazpz!@mn za9nZtKeKEwvN=+zlnBEpRDy9>08-6`rbt~*5h=Ca!EMKfewG5GQif3&3Z)dK0^V;B z80VaF3Pw;t0W5>a1?SHNFRVxK{dAuS7&Fg~0kq}V2o#k;3TRmta*;Gn=78-|7F+WH zcU{A1@(