From 389c0d172a57bbae45261d0ad784d2ff8a18070f Mon Sep 17 00:00:00 2001 From: Rogee Date: Tue, 28 Jul 2026 10:13:31 +0800 Subject: [PATCH] update --- cmd/server.go | 14 +- frontend/dist/assets/index-2qQf5Bht.css | 1 - frontend/dist/assets/index-BkTyHILH.css | 1 + frontend/dist/assets/index-CPGYuQco.js | 37 ++++ frontend/dist/assets/index-CtUpN0Ye.js | 37 ---- frontend/dist/index.html | 4 +- frontend/src/api/index.js | 1 + frontend/src/layouts/AdminLayout.vue | 19 +- frontend/src/pages/Collections.vue | 189 +++++++++++++++-- frontend/src/pages/Settings.vue | 28 --- frontend/src/pages/Sources.vue | 61 +++++- internal/handler/download_tools.go | 8 +- internal/handler/egress_info.go | 257 ++++++++++++++++++++++++ internal/handler/handler_test.go | 75 +++++++ internal/handler/routes.go | 1 + internal/proxy/parser_test.go | 14 ++ internal/proxy/uri_parser.go | 88 ++++---- 17 files changed, 678 insertions(+), 157 deletions(-) delete mode 100644 frontend/dist/assets/index-2qQf5Bht.css create mode 100644 frontend/dist/assets/index-BkTyHILH.css create mode 100644 frontend/dist/assets/index-CPGYuQco.js delete mode 100644 frontend/dist/assets/index-CtUpN0Ye.js create mode 100644 internal/handler/egress_info.go diff --git a/cmd/server.go b/cmd/server.go index 63a4990..ac8f6d2 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -2,6 +2,7 @@ package cmd import ( "context" + "errors" "fmt" "os" "os/signal" @@ -9,8 +10,8 @@ import ( "time" "github.com/gofiber/fiber/v3" - "github.com/sirupsen/logrus" "github.com/jmoiron/sqlx" + "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/peterqiu0516/sub-store/internal/config" @@ -76,13 +77,20 @@ func startFiber(cfg *config.Config, db *sqlx.DB) error { WriteTimeout: cfg.Server.WriteTimeout, BodyLimit: cfg.Server.BodyLimit, ErrorHandler: func(c fiber.Ctx, err error) error { + code := fiber.StatusInternalServerError + message := "Internal server error" + var fiberErr *fiber.Error + if errors.As(err, &fiberErr) { + code = fiberErr.Code + message = fiberErr.Message + } logrus.WithError(err).WithFields(logrus.Fields{ "method": c.Method(), "path": c.Path(), }).Error("request error") - return c.Status(500).JSON(fiber.Map{ + return c.Status(code).JSON(fiber.Map{ "status": "failed", - "error": fiber.Map{"code": 500, "message": "Internal server error"}, + "error": fiber.Map{"code": code, "message": message}, }) }, }) diff --git a/frontend/dist/assets/index-2qQf5Bht.css b/frontend/dist/assets/index-2qQf5Bht.css deleted file mode 100644 index 0be30be..0000000 --- a/frontend/dist/assets/index-2qQf5Bht.css +++ /dev/null @@ -1 +0,0 @@ -*,: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}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.right-4{right:1rem}.top-0{top:0}.z-30{z-index:30}.z-50{z-index:50}.z-\[60\]{z-index:60}.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}.ml-3{margin-left:.75rem}.ml-60{margin-left:15rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-2{height:.5rem}.max-h-32{max-height:8rem}.max-h-96{max-height:24rem}.max-h-\[85vh\]{max-height:85vh}.min-h-screen{min-height:100vh}.w-2{width:.5rem}.w-24{width:6rem}.w-28{width:7rem}.w-60{width:15rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.border-collapse{border-collapse:collapse}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.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))}.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-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(243 244 246 / var(--tw-divide-opacity, 1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-primary-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.bg-black\/40{background-color:#0006}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / 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-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / 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-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-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / 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-primary-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-primary-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-primary-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / 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-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.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-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-8{padding-top:2rem;padding-bottom:2rem}.text-left{text-align:left}.text-center{text-align:center}.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-7xl{font-size:4.5rem;line-height:1}.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-medium{font-weight:500}.font-semibold{font-weight:600}.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-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-900{--tw-text-opacity: 1;color:rgb(17 24 39 / 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-primary-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-primary-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.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-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-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.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-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)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;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-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / 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-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800\/50:hover{background-color:#1f293780}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-primary-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / 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-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.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)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.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-primary-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-100:disabled{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}} diff --git a/frontend/dist/assets/index-BkTyHILH.css b/frontend/dist/assets/index-BkTyHILH.css new file mode 100644 index 0000000..17a40f1 --- /dev/null +++ b/frontend/dist/assets/index-BkTyHILH.css @@ -0,0 +1 @@ +*,: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}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.right-4{right:1rem}.top-0{top:0}.z-30{z-index:30}.z-50{z-index:50}.z-\[60\]{z-index:60}.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}.ml-3{margin-left:.75rem}.ml-60{margin-left:15rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-2{height:.5rem}.max-h-32{max-height:8rem}.max-h-96{max-height:24rem}.max-h-\[85vh\]{max-height:85vh}.min-h-screen{min-height:100vh}.w-2{width:.5rem}.w-24{width:6rem}.w-28{width:7rem}.w-60{width:15rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.border-collapse{border-collapse:collapse}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.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))}.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-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(243 244 246 / var(--tw-divide-opacity, 1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.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}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-primary-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.bg-black\/40{background-color:#0006}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / 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-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / 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-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-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / 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-primary-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-primary-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-primary-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / 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-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.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-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-8{padding-top:2rem;padding-bottom:2rem}.text-left{text-align:left}.text-center{text-align:center}.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-7xl{font-size:4.5rem;line-height:1}.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-medium{font-weight:500}.font-semibold{font-weight:600}.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-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-900{--tw-text-opacity: 1;color:rgb(17 24 39 / 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-primary-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-primary-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.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-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-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.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-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)}.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)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;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-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / 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-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800\/50:hover{background-color:#1f293780}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-primary-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / 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-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.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)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.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-primary-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-100:disabled{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.disabled\:opacity-60:disabled{opacity:.6}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}} diff --git a/frontend/dist/assets/index-CPGYuQco.js b/frontend/dist/assets/index-CPGYuQco.js new file mode 100644 index 0000000..d1b09db --- /dev/null +++ b/frontend/dist/assets/index-CPGYuQco.js @@ -0,0 +1,37 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** +* @vue/shared v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Gr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ce={},yn=[],Ct=()=>{},sl=()=>!1,Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ms=e=>e.startsWith("onUpdate:"),Ue=Object.assign,Jr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},pc=Object.prototype.hasOwnProperty,we=(e,t)=>pc.call(e,t),ne=Array.isArray,bn=e=>ls(e)==="[object Map]",Pn=e=>ls(e)==="[object Set]",ko=e=>ls(e)==="[object Date]",le=e=>typeof e=="function",Te=e=>typeof e=="string",ht=e=>typeof e=="symbol",Ee=e=>e!==null&&typeof e=="object",rl=e=>(Ee(e)||le(e))&&le(e.then)&&le(e.catch),ol=Object.prototype.toString,ls=e=>ol.call(e),hc=e=>ls(e).slice(8,-1),il=e=>ls(e)==="[object Object]",Xr=e=>Te(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,jn=Gr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Vs=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},mc=/-\w/g,et=Vs(e=>e.replace(mc,t=>t.slice(1).toUpperCase())),gc=/\B([A-Z])/g,Jt=Vs(e=>e.replace(gc,"-$1").toLowerCase()),Bs=Vs(e=>e.charAt(0).toUpperCase()+e.slice(1)),sr=Vs(e=>e?`on${Bs(e)}`:""),Rt=(e,t)=>!Object.is(e,t),xs=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},js=e=>{const t=parseFloat(e);return isNaN(t)?e:t},yc=e=>{const t=Te(e)?Number(e):NaN;return isNaN(t)?e:t};let $o;const Hs=()=>$o||($o=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Yr(e){if(ne(e)){const t={};for(let n=0;n{if(n){const s=n.split(xc);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function je(e){let t="";if(Te(e))t=e;else if(ne(e))for(let n=0;nWt(n,t))}const cl=e=>!!(e&&e.__v_isRef===!0),H=e=>Te(e)?e:e==null?"":ne(e)||Ee(e)&&(e.toString===ol||!le(e.toString))?cl(e)?H(e.value):JSON.stringify(e,ul,2):String(e),ul=(e,t)=>cl(t)?ul(e,t.value):bn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[rr(s,o)+" =>"]=r,n),{})}:Pn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>rr(n))}:ht(t)?rr(t):Ee(t)&&!ne(t)&&!il(t)?String(t):t,rr=(e,t="")=>{var n;return ht(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ve;class fl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ve&&(Ve.active?(this.parent=Ve,this.index=(Ve.scopes||(Ve.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Ve===this)Ve=this.prevScope;else{let t=Ve;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.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(qn){let t=qn;for(qn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Hn;){let t=Hn;for(Hn=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 ml(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function gl(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),to(s),Ac(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Rr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(yl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function yl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Jn)||(e.globalVersion=Jn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Rr(e))))return;e.flags|=2;const t=e.dep,n=Ae,s=ft;Ae=e,ft=!0;try{ml(e);const r=e.fn(e._value);(t.version===0||Rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Ae=n,ft=s,gl(e),e.flags&=-3}}function to(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)to(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ac(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ft=!0;const bl=[];function Ut(){bl.push(ft),ft=!1}function Ft(){const e=bl.pop();ft=e===void 0?!0:e}function Do(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ae;Ae=void 0;try{t()}finally{Ae=n}}}let Jn=0;class Oc{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 no{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||!ft||Ae===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ae)n=this.activeLink=new Oc(Ae,this),Ae.deps?(n.prevDep=Ae.depsTail,Ae.depsTail.nextDep=n,Ae.depsTail=n):Ae.deps=Ae.depsTail=n,xl(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++,Jn++,this.notify(t)}notify(t){Zr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{eo()}}}function xl(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)xl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Cr=new WeakMap,ln=Symbol(""),Ar=Symbol(""),Xn=Symbol("");function Ke(e,t,n){if(ft&&Ae){let s=Cr.get(e);s||Cr.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new no),r.map=s,r.key=n),r.track()}}function kt(e,t,n,s,r,o){const i=Cr.get(e);if(!i){Jn++;return}const l=a=>{a&&a.trigger()};if(Zr(),t==="clear")i.forEach(l);else{const a=ne(e),u=a&&Xr(n);if(a&&n==="length"){const c=Number(s);i.forEach((f,h)=>{(h==="length"||h===Xn||!ht(h)&&h>=c)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(Xn)),t){case"add":a?u&&l(i.get("length")):(l(i.get(ln)),bn(e)&&l(i.get(Ar)));break;case"delete":a||(l(i.get(ln)),bn(e)&&l(i.get(Ar)));break;case"set":bn(e)&&l(i.get(ln));break}}eo()}function pn(e){const t=xe(e);return t===e?t:(Ke(t,"iterate",Xn),lt(e)?t:t.map(mt))}function qs(e){return Ke(e=xe(e),"iterate",Xn),e}function Et(e,t){return Mt(e)?En(an(e)?mt(t):t):mt(t)}const Tc={__proto__:null,[Symbol.iterator](){return ir(this,Symbol.iterator,e=>Et(this,e))},concat(...e){return pn(this).concat(...e.map(t=>ne(t)?pn(t):t))},entries(){return ir(this,"entries",e=>(e[1]=Et(this,e[1]),e))},every(e,t){return Ot(this,"every",e,t,void 0,arguments)},filter(e,t){return Ot(this,"filter",e,t,n=>n.map(s=>Et(this,s)),arguments)},find(e,t){return Ot(this,"find",e,t,n=>Et(this,n),arguments)},findIndex(e,t){return Ot(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ot(this,"findLast",e,t,n=>Et(this,n),arguments)},findLastIndex(e,t){return Ot(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ot(this,"forEach",e,t,void 0,arguments)},includes(...e){return lr(this,"includes",e)},indexOf(...e){return lr(this,"indexOf",e)},join(e){return pn(this).join(e)},lastIndexOf(...e){return lr(this,"lastIndexOf",e)},map(e,t){return Ot(this,"map",e,t,void 0,arguments)},pop(){return $n(this,"pop")},push(...e){return $n(this,"push",e)},reduce(e,...t){return Lo(this,"reduce",e,t)},reduceRight(e,...t){return Lo(this,"reduceRight",e,t)},shift(){return $n(this,"shift")},some(e,t){return Ot(this,"some",e,t,void 0,arguments)},splice(...e){return $n(this,"splice",e)},toReversed(){return pn(this).toReversed()},toSorted(e){return pn(this).toSorted(e)},toSpliced(...e){return pn(this).toSpliced(...e)},unshift(...e){return $n(this,"unshift",e)},values(){return ir(this,"values",e=>Et(this,e))}};function ir(e,t,n){const s=qs(e),r=s[t]();return s!==e&&!lt(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const Pc=Array.prototype;function Ot(e,t,n,s,r,o){const i=qs(e),l=i!==e&&!lt(e),a=i[t];if(a!==Pc[t]){const f=a.apply(e,o);return l?mt(f):f}let u=n;i!==e&&(l?u=function(f,h){return n.call(this,Et(e,f),h,e)}:n.length>2&&(u=function(f,h){return n.call(this,f,h,e)}));const c=a.call(i,u,s);return l&&r?r(c):c}function Lo(e,t,n,s){const r=qs(e),o=r!==e&&!lt(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(u,c,f){return l&&(l=!1,u=Et(e,u)),n.call(this,u,Et(e,c),f,e)}):n.length>3&&(i=function(u,c,f){return n.call(this,u,c,f,e)}));const a=r[t](i,...s);return l?Et(e,a):a}function lr(e,t,n){const s=xe(e);Ke(s,"iterate",Xn);const r=s[t](...n);return(r===-1||r===!1)&&oo(n[0])?(n[0]=xe(n[0]),s[t](...n)):r}function $n(e,t,n=[]){Ut(),Zr();const s=xe(e)[t].apply(e,n);return eo(),Ft(),s}const Nc=Gr("__proto__,__v_isRef,__isVue"),vl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ht));function Ic(e){ht(e)||(e=String(e));const t=xe(this);return Ke(t,"has",e),t.hasOwnProperty(e)}class _l{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?jc:Rl:o?Sl:El).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=ne(t);if(!r){let a;if(i&&(a=Tc[n]))return a;if(n==="hasOwnProperty")return Ic}const l=Reflect.get(t,n,Ge(t)?t:s);if((ht(n)?vl.has(n):Nc(n))||(r||Ke(t,"get",n),o))return l;if(Ge(l)){const a=i&&Xr(n)?l:l.value;return r&&Ee(a)?Tr(a):a}return Ee(l)?r?Tr(l):At(l):l}}class wl extends _l{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=ne(t)&&Xr(n);if(!this._isShallow){const u=Mt(o);if(!lt(s)&&!Mt(s)&&(o=xe(o),s=xe(s)),!i&&Ge(o)&&!Ge(s))return u||(o.value=s),!0}const l=i?Number(n)e,hs=e=>Reflect.getPrototypeOf(e);function Uc(e,t,n){return function(...s){const r=this.__v_raw,o=xe(r),i=bn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,u=r[e](...s),c=n?Or:t?En:mt;return!t&&Ke(o,"iterate",a?Ar:ln),Ue(Object.create(u),{next(){const{value:f,done:h}=u.next();return h?{value:f,done:h}:{value:l?[c(f[0]),c(f[1])]:c(f),done:h}}})}}function ms(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fc(e,t){const n={get(r){const o=this.__v_raw,i=xe(o),l=xe(r);e||(Rt(r,l)&&Ke(i,"get",r),Ke(i,"get",l));const{has:a}=hs(i),u=t?Or:e?En:mt;if(a.call(i,r))return u(o.get(r));if(a.call(i,l))return u(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&Ke(xe(r),"iterate",ln),r.size},has(r){const o=this.__v_raw,i=xe(o),l=xe(r);return e||(Rt(r,l)&&Ke(i,"has",r),Ke(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=xe(l),u=t?Or:e?En:mt;return!e&&Ke(a,"iterate",ln),l.forEach((c,f)=>r.call(o,u(c),u(f),i))}};return Ue(n,e?{add:ms("add"),set:ms("set"),delete:ms("delete"),clear:ms("clear")}:{add(r){const o=xe(this),i=hs(o),l=xe(r),a=!t&&!lt(r)&&!Mt(r)?l:r;return i.has.call(o,a)||Rt(r,a)&&i.has.call(o,r)||Rt(l,a)&&i.has.call(o,l)||(o.add(a),kt(o,"add",a,a)),this},set(r,o){!t&&!lt(o)&&!Mt(o)&&(o=xe(o));const i=xe(this),{has:l,get:a}=hs(i);let u=l.call(i,r);u||(r=xe(r),u=l.call(i,r));const c=a.call(i,r);return i.set(r,o),u?Rt(o,c)&&kt(i,"set",r,o):kt(i,"add",r,o),this},delete(r){const o=xe(this),{has:i,get:l}=hs(o);let a=i.call(o,r);a||(r=xe(r),a=i.call(o,r)),l&&l.call(o,r);const u=o.delete(r);return a&&kt(o,"delete",r,void 0),u},clear(){const r=xe(this),o=r.size!==0,i=r.clear();return o&&kt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Uc(r,e,t)}),n}function so(e,t){const n=Fc(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(we(n,r)&&r in s?n:s,r,o)}const Mc={get:so(!1,!1)},Vc={get:so(!1,!0)},Bc={get:so(!0,!1)};const El=new WeakMap,Sl=new WeakMap,Rl=new WeakMap,jc=new WeakMap;function Hc(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function At(e){return Mt(e)?e:ro(e,!1,$c,Mc,El)}function Cl(e){return ro(e,!1,Lc,Vc,Sl)}function Tr(e){return ro(e,!0,Dc,Bc,Rl)}function ro(e,t,n,s,r){if(!Ee(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=r.get(e);if(o)return o;const i=Hc(hc(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function an(e){return Mt(e)?an(e.__v_raw):!!(e&&e.__v_isReactive)}function Mt(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function oo(e){return e?!!e.__v_raw:!1}function xe(e){const t=e&&e.__v_raw;return t?xe(t):e}function Al(e){return!we(e,"__v_skip")&&Object.isExtensible(e)&&ll(e,"__v_skip",!0),e}const mt=e=>Ee(e)?At(e):e,En=e=>Ee(e)?Tr(e):e;function Ge(e){return e?e.__v_isRef===!0:!1}function Z(e){return Ol(e,!1)}function qc(e){return Ol(e,!0)}function Ol(e,t){return Ge(e)?e:new Kc(e,t)}class Kc{constructor(t,n){this.dep=new no,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:xe(t),this._value=n?t:mt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||lt(t)||Mt(t);t=s?t:xe(t),Rt(t,n)&&(this._rawValue=t,this._value=s?t:mt(t),this.dep.trigger())}}function xn(e){return Ge(e)?e.value:e}const Wc={get:(e,t,n)=>t==="__v_raw"?e:xn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Ge(r)&&!Ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Tl(e){return an(e)?e:new Proxy(e,Wc)}class zc{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new no(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Jn-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 hl(this,!0),!0}get value(){const t=this.dep.track();return yl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Gc(e,t,n=!1){let s,r;return le(e)?s=e:(s=e.get,r=e.set),new zc(s,r,n)}const gs={},Cs=new WeakMap;let tn;function Jc(e,t=!1,n=tn){if(n){let s=Cs.get(n);s||Cs.set(n,s=[]),s.push(e)}}function Xc(e,t,n=Ce){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,u=R=>r?R:lt(R)||r===!1||r===0?$t(R,1):$t(R);let c,f,h,m,S=!1,C=!1;if(Ge(e)?(f=()=>e.value,S=lt(e)):an(e)?(f=()=>u(e),S=!0):ne(e)?(C=!0,S=e.some(R=>an(R)||lt(R)),f=()=>e.map(R=>{if(Ge(R))return R.value;if(an(R))return u(R);if(le(R))return a?a(R,2):R()})):le(e)?t?f=a?()=>a(e,2):e:f=()=>{if(h){Ut();try{h()}finally{Ft()}}const R=tn;tn=c;try{return a?a(e,3,[m]):e(m)}finally{tn=R}}:f=Ct,t&&r){const R=f,O=r===!0?1/0:r;f=()=>$t(R(),O)}const P=Cc(),v=()=>{c.stop(),P&&P.active&&Jr(P.effects,c)};if(o&&t){const R=t;t=(...O)=>{const $=R(...O);return v(),$}}let x=C?new Array(e.length).fill(gs):gs;const A=R=>{if(!(!(c.flags&1)||!c.dirty&&!R))if(t){const O=c.run();if(R||r||S||(C?O.some(($,U)=>Rt($,x[U])):Rt(O,x))){h&&h();const $=tn;tn=c;try{const U=[O,x===gs?void 0:C&&x[0]===gs?[]:x,m];x=O,a?a(t,3,U):t(...U)}finally{tn=$}}}else c.run()};return l&&l(A),c=new dl(f),c.scheduler=i?()=>i(A,!1):A,m=R=>Jc(R,!1,c),h=c.onStop=()=>{const R=Cs.get(c);if(R){if(a)a(R,4);else for(const O of R)O();Cs.delete(c)}},t?s?A(!0):x=c.run():i?i(A.bind(null,!0),!0):c.run(),v.pause=c.pause.bind(c),v.resume=c.resume.bind(c),v.stop=v,v}function $t(e,t=1/0,n){if(t<=0||!Ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ge(e))$t(e.value,t,n);else if(ne(e))for(let s=0;s{$t(s,t,n)});else if(il(e)){for(const s in e)$t(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&$t(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function as(e,t,n,s){try{return s?e(...s):e()}catch(r){Ks(r,t,n)}}function ct(e,t,n,s){if(le(e)){const r=as(e,t,n,s);return r&&rl(r)&&r.catch(o=>{Ks(o,t,n)}),r}if(ne(e)){const r=[];for(let o=0;o>>1,r=Ze[s],o=Yn(r);o=Yn(n)?Ze.push(e):Ze.splice(Qc(t),0,e),e.flags|=1,Nl()}}function Nl(){As||(As=Pl.then(kl))}function Zc(e){ne(e)?vn.push(...e):qt&&e.id===-1?qt.splice(mn+1,0,e):e.flags&1||(vn.push(e),e.flags|=1),Nl()}function Uo(e,t,n=wt+1){for(;nYn(n)-Yn(s));if(vn.length=0,qt){qt.push(...t);return}for(qt=t,mn=0;mne.id==null?e.flags&2?-1:1/0:e.id;function kl(e){try{for(wt=0;wt{s._d&&Ns(-1);const o=Os(t),i=Lt.length;let l;try{l=e(...r)}finally{for(let a=Lt.length;a>i;a--)fo();Os(o),s._d&&Ns(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function me(e,t){if(He===null)return e;const n=Xs(He),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&le(t)?t.call(s&&s.proxy):t}}const eu=Symbol.for("v-scx"),tu=()=>pt(eu);function _s(e,t,n){return Dl(e,t,n)}function Dl(e,t,n=Ce){const{immediate:s,deep:r,flush:o,once:i}=n,l=Ue({},n),a=t&&s||!t&&o!=="post";let u;if(ns){if(o==="sync"){const m=tu();u=m.__watcherHandles||(m.__watcherHandles=[])}else if(!a){const m=()=>{};return m.stop=Ct,m.resume=Ct,m.pause=Ct,m}}const c=ze;l.call=(m,S,C)=>ct(m,c,S,C);let f=!1;o==="post"?l.scheduler=m=>{Ye(m,c&&c.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(m,S)=>{S?m():lo(m)}),l.augmentJob=m=>{t&&(m.flags|=4),f&&(m.flags|=2,c&&(m.id=c.uid,m.i=c))};const h=Xc(e,t,l);return ns&&(u?u.push(h):a&&h()),h}function nu(e,t,n){const s=this.proxy,r=Te(e)?e.includes(".")?Ll(s,e):()=>s[e]:e.bind(s,s);let o;le(t)?o=t:(o=t.handler,n=t);const i=cs(this),l=Dl(r,o.bind(s),n);return i(),l}function Ll(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,nn=e=>e&&(e.disabled||e.disabled===""),su=e=>e&&(e.defer||e.defer===""),Fo=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Mo=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Pr=(e,t)=>{const n=e&&e.to;return Te(n)?t?t(n):null:n},ru={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,u){const{mc:c,pc:f,pbc:h,o:{insert:m,querySelector:S,createText:C,createComment:P,parentNode:v}}=u,x=nn(t.props);let{dynamicChildren:A}=t;const R=(U,ae,Y)=>{U.shapeFlag&16&&c(U.children,ae,Y,r,o,i,l,a)},O=(U=t)=>{const ae=nn(U.props),Y=U.target=Pr(U.props,S),se=Nr(Y,U,C,m);Y&&(i!=="svg"&&Fo(Y)?i="svg":i!=="mathml"&&Mo(Y)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(Y),ae||(R(U,Y,se),Mn(U,!1)))},$=U=>{const ae=()=>{if(Ht.get(U)===ae){if(Ht.delete(U),nn(U.props)){const Y=v(U.el)||n;R(U,Y,U.anchor),Mn(U,!0)}O(U)}};Ht.set(U,ae),Ye(ae,o)};if(e==null){const U=t.el=C(""),ae=t.anchor=C("");if(m(U,n,s),m(ae,n,s),su(t.props)||o&&o.pendingBranch){$(t);return}x&&(R(t,n,ae),Mn(t,!0)),O()}else{t.el=e.el;const U=t.anchor=e.anchor,ae=Ht.get(e);if(ae){ae.flags|=8,Ht.delete(e),$(t);return}t.targetStart=e.targetStart;const Y=t.target=e.target,se=t.targetAnchor=e.targetAnchor,oe=nn(e.props),W=oe?n:Y,ce=oe?U:se;if(i==="svg"||Fo(Y)?i="svg":(i==="mathml"||Mo(Y))&&(i="mathml"),A?(h(e.dynamicChildren,A,W,r,o,i,l),uo(e,t,!0)):a||f(e,t,W,ce,r,o,i,l,!1),x)oe?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ys(t,n,U,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const fe=Pr(t.props,S);fe&&(t.target=fe,ys(t,fe,null,u,0))}else oe&&ys(t,Y,se,u,1);Mn(t,x)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:u,targetAnchor:c,target:f,props:h}=e,m=nn(h),S=o||!m,C=Ht.get(e);if(C&&(C.flags|=8,Ht.delete(e)),f&&(r(u),r(c)),o&&r(a),!C&&(m||f)&&i&16)for(let P=0;P{e.isMounted=!0}),Gl(()=>{e.isUnmounting=!0}),e}const ot=[Function,Array],Vl={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ot,onEnter:ot,onAfterEnter:ot,onEnterCancelled:ot,onBeforeLeave:ot,onLeave:ot,onAfterLeave:ot,onLeaveCancelled:ot,onBeforeAppear:ot,onAppear:ot,onAfterAppear:ot,onAppearCancelled:ot},Bl=e=>{const t=e.subTree;return t.component?Bl(t.component):t},lu={name:"BaseTransition",props:Vl,setup(e,{slots:t}){const n=ba(),s=iu();return()=>{const r=t.default&&ql(t.default(),!0),o=r&&r.length?jl(r):n.subTree?pe():void 0;if(!o)return;const i=xe(e),{mode:l}=i;if(s.isLeaving)return ar(o);const a=Vo(o);if(!a)return ar(o);let u=Ir(a,i,s,n,f=>u=f);a.type!==We&&Qn(a,u);let c=n.subTree&&Vo(n.subTree);if(c&&c.type!==We&&!sn(c,a)&&Bl(n).type!==We){let f=Ir(c,i,s,n);if(Qn(c,f),l==="out-in"&&a.type!==We)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},ar(o);l==="in-out"&&a.type!==We?f.delayLeave=(h,m,S)=>{const C=Hl(s,c);C[String(c.key)]=c,h[it]=()=>{m(),h[it]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{S(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return o}}};function jl(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==We){t=n;break}}return t}const au=lu;function Hl(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 Ir(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:h,onLeave:m,onAfterLeave:S,onLeaveCancelled:C,onBeforeAppear:P,onAppear:v,onAfterAppear:x,onAppearCancelled:A}=t,R=String(e.key),O=Hl(n,e),$=(Y,se)=>{Y&&ct(Y,s,9,se)},U=(Y,se)=>{const oe=se[1];$(Y,se),ne(Y)?Y.every(W=>W.length<=1)&&oe():Y.length<=1&&oe()},ae={mode:i,persisted:l,beforeEnter(Y){let se=a;if(!n.isMounted)if(o)se=P||a;else return;Y[it]&&Y[it](!0);const oe=O[R];oe&&sn(e,oe)&&oe.el[it]&&oe.el[it](),$(se,[Y])},enter(Y){if(O[R]===e)return;let se=u,oe=c,W=f;if(!n.isMounted)if(o)se=v||u,oe=x||c,W=A||f;else return;let ce=!1;Y[Dn]=Pe=>{ce||(ce=!0,Pe?$(W,[Y]):$(oe,[Y]),ae.delayedLeave&&ae.delayedLeave(),Y[Dn]=void 0)};const fe=Y[Dn].bind(null,!1);se?U(se,[Y,fe]):fe()},leave(Y,se){const oe=String(e.key);if(Y[Dn]&&Y[Dn](!0),n.isUnmounting)return se();$(h,[Y]);let W=!1;Y[it]=fe=>{W||(W=!0,se(),fe?$(C,[Y]):$(S,[Y]),Y[it]=void 0,O[oe]===e&&delete O[oe])};const ce=Y[it].bind(null,!1);O[oe]=e,m?U(m,[Y,ce]):ce()},clone(Y){const se=Ir(Y,t,n,s,r);return r&&r(se),se}};return ae}function ar(e){if(Ws(e))return e=zt(e),e.children=null,e}function Vo(e){if(!Ws(e))return Fl(e.type)&&e.children?jl(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&&le(n.default))return n.default()}}function Qn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Qn(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 ql(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oKn(C,t&&(ne(t)?t[P]:t),n,s,r));return}if(_n(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Kn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?Xs(s.component):s.el,i=r?null:o,{i:l,r:a}=e,u=t&&t.r,c=l.refs===Ce?l.refs={}:l.refs,f=l.setupState,h=xe(f),m=f===Ce?sl:C=>Bo(c,C)?!1:we(h,C),S=(C,P)=>!(P&&Bo(c,P));if(u!=null&&u!==a){if(jo(t),Te(u))c[u]=null,m(u)&&(f[u]=null);else if(Ge(u)){const C=t;S(u,C.k)&&(u.value=null),C.k&&(c[C.k]=null)}}if(le(a))as(a,l,12,[i,c]);else{const C=Te(a),P=Ge(a);if(C||P){const v=()=>{if(e.f){const x=C?m(a)?f[a]:c[a]:S()||!e.k?a.value:c[e.k];if(r)ne(x)&&Jr(x,o);else if(ne(x))x.includes(o)||x.push(o);else if(C)c[a]=[o],m(a)&&(f[a]=c[a]);else{const A=[o];S(a,e.k)&&(a.value=A),e.k&&(c[e.k]=A)}}else C?(c[a]=i,m(a)&&(f[a]=i)):P&&(S(a,e.k)&&(a.value=i),e.k&&(c[e.k]=i))};if(i){const x=()=>{v(),Ts.delete(e)};x.id=-1,Ts.set(e,x),Ye(x,n)}else jo(e),v()}}}function jo(e){const t=Ts.get(e);t&&(t.flags|=8,Ts.delete(e))}Hs().requestIdleCallback;Hs().cancelIdleCallback;const _n=e=>!!e.type.__asyncLoader,Ws=e=>e.type.__isKeepAlive;function cu(e,t){zl(e,"a",t)}function uu(e,t){zl(e,"da",t)}function zl(e,t,n=ze){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(zs(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Ws(r.parent.vnode)&&fu(s,t,n,r),r=r.parent}}function fu(e,t,n,s){const r=zs(t,e,s,!0);Jl(()=>{Jr(s[t],r)},n)}function zs(e,t,n=ze,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ut();const l=cs(n),a=ct(t,n,e,i);return l(),Ft(),a});return s?r.unshift(o):r.push(o),o}}const Vt=e=>(t,n=ze)=>{(!ns||e==="sp")&&zs(e,(...s)=>t(...s),n)},du=Vt("bm"),Xt=Vt("m"),pu=Vt("bu"),hu=Vt("u"),Gl=Vt("bum"),Jl=Vt("um"),mu=Vt("sp"),gu=Vt("rtg"),yu=Vt("rtc");function bu(e,t=ze){zs("ec",e,t)}const Xl="components";function kr(e,t){return Ql(Xl,e,!0,t)||e}const Yl=Symbol.for("v-ndc");function xu(e){return Te(e)?Ql(Xl,e,!1)||e:e||Yl}function Ql(e,t,n=!0,s=!1){const r=He||ze;if(r){const o=r.type;{const l=nf(o,!1);if(l&&(l===t||l===et(t)||l===Bs(et(t))))return o}const i=Ho(r[e]||o[e],t)||Ho(r.appContext[e],t);return!i&&s?o:i}}function Ho(e,t){return e&&(e[t]||e[et(t)]||e[Bs(et(t))])}function Fe(e,t,n,s){let r;const o=n,i=ne(e);if(i||Te(e)){const l=i&&an(e);let a=!1,u=!1;l&&(a=!lt(e),u=Mt(e),e=qs(e)),r=new Array(e.length);for(let c=0,f=e.length;ct(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,u=l.length;a0;return t!=="default"&&(u.name=t),F(),un(ve,null,[Oe("slot",u,s)],c?-2:64)}let i=e[t];i&&i._c&&(i._d=!1);const l=Lt.length;F();let a;try{const u=i&&Zl(i(n)),c=n.key||o||u&&u.key;a=un(ve,{key:(c&&!ht(c)?c:`_${t}`)+(!u&&s?"_fb":"")},u||(s?s():[]),u&&e._===1?64:-2)}catch(u){for(let c=Lt.length;c>l;c--)fo();throw u}finally{i&&i._c&&(i._d=!0)}return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),a}function Zl(e){return e.some(t=>es(t)?!(t.type===We||t.type===ve&&!Zl(t.children)):!0)?e:null}const $r=e=>e?xa(e)?Xs(e):$r(e.parent):null,Wn=Ue(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=>$r(e.parent),$root:e=>$r(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ta(e),$forceUpdate:e=>e.f||(e.f=()=>{lo(e.update)}),$nextTick:e=>e.n||(e.n=io.bind(e.proxy)),$watch:e=>nu.bind(e)}),cr=(e,t)=>e!==Ce&&!e.__isScriptSetup&&we(e,t),vu={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(cr(s,t))return i[t]=1,s[t];if(r!==Ce&&we(r,t))return i[t]=2,r[t];if(we(o,t))return i[t]=3,o[t];if(n!==Ce&&we(n,t))return i[t]=4,n[t];Dr&&(i[t]=0)}}const u=Wn[t];let c,f;if(u)return t==="$attrs"&&Ke(e.attrs,"get",""),u(e);if((c=l.__cssModules)&&(c=c[t]))return c;if(n!==Ce&&we(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,we(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return cr(r,t)?(r[t]=n,!0):s!==Ce&&we(s,t)?(s[t]=n,!0):we(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,props:o,type:i}},l){let a;return!!(n[l]||e!==Ce&&l[0]!=="$"&&we(e,l)||cr(t,l)||we(o,l)||we(s,l)||we(Wn,l)||we(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:we(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ko(e){return ne(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Dr=!0;function _u(e){const t=ta(e),n=e.proxy,s=e.ctx;Dr=!1,t.beforeCreate&&Wo(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:u,created:c,beforeMount:f,mounted:h,beforeUpdate:m,updated:S,activated:C,deactivated:P,beforeDestroy:v,beforeUnmount:x,destroyed:A,unmounted:R,render:O,renderTracked:$,renderTriggered:U,errorCaptured:ae,serverPrefetch:Y,expose:se,inheritAttrs:oe,components:W,directives:ce,filters:fe}=t;if(u&&wu(u,s,null),i)for(const D in i){const I=i[D];le(I)&&(s[D]=I.bind(n))}if(r){const D=r.call(n,n);Ee(D)&&(e.data=At(D))}if(Dr=!0,o)for(const D in o){const I=o[D],J=le(I)?I.bind(n,n):le(I.get)?I.get.bind(n,n):Ct,ue=!le(I)&&le(I.set)?I.set.bind(n):Ct,re=tt({get:J,set:ue});Object.defineProperty(s,D,{enumerable:!0,configurable:!0,get:()=>re.value,set:de=>re.value=de})}if(l)for(const D in l)ea(l[D],s,n,D);if(a){const D=le(a)?a.call(n):a;Reflect.ownKeys(D).forEach(I=>{vs(I,D[I])})}c&&Wo(c,e,"c");function be(D,I){ne(I)?I.forEach(J=>D(J.bind(n))):I&&D(I.bind(n))}if(be(du,f),be(Xt,h),be(pu,m),be(hu,S),be(cu,C),be(uu,P),be(bu,ae),be(yu,$),be(gu,U),be(Gl,x),be(Jl,R),be(mu,Y),ne(se))if(se.length){const D=e.exposed||(e.exposed={});se.forEach(I=>{Object.defineProperty(D,I,{get:()=>n[I],set:J=>n[I]=J,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===Ct&&(e.render=O),oe!=null&&(e.inheritAttrs=oe),W&&(e.components=W),ce&&(e.directives=ce),Y&&Wl(e)}function wu(e,t,n=Ct){ne(e)&&(e=Lr(e));for(const s in e){const r=e[s];let o;Ee(r)?"default"in r?o=pt(r.from||s,r.default,!0):o=pt(r.from||s):o=pt(r),Ge(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function Wo(e,t,n){ct(ne(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function ea(e,t,n,s){let r=s.includes(".")?Ll(n,s):()=>n[s];if(Te(e)){const o=t[e];le(o)&&_s(r,o)}else if(le(e))_s(r,e.bind(n));else if(Ee(e))if(ne(e))e.forEach(o=>ea(o,t,n,s));else{const o=le(e.handler)?e.handler.bind(n):t[e.handler];le(o)&&_s(r,o,e)}}function ta(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(u=>Ps(a,u,i,!0)),Ps(a,t,i)),Ee(t)&&o.set(t,a),a}function Ps(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Ps(e,o,n,!0),r&&r.forEach(i=>Ps(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:zo,props:Go,emits:Go,methods:Vn,computed:Vn,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:Vn,directives:Vn,watch:Ru,provide:zo,inject:Su};function zo(e,t){return t?e?function(){return Ue(le(e)?e.call(this,this):e,le(t)?t.call(this,this):t)}:t:e}function Su(e,t){return Vn(Lr(e),Lr(t))}function Lr(e){if(ne(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${et(t)}Modifiers`]||e[`${Jt(t)}Modifiers`];function Tu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Ce;let r=n;const o=t.startsWith("update:"),i=o&&Ou(s,t.slice(7));i&&(i.trim&&(r=n.map(c=>Te(c)?c.trim():c)),i.number&&(r=n.map(js)));let l,a=s[l=sr(t)]||s[l=sr(et(t))];!a&&o&&(a=s[l=sr(Jt(t))]),a&&ct(a,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,ct(u,e,6,r)}}const Pu=new WeakMap;function sa(e,t,n=!1){const s=n?Pu:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!le(e)){const a=u=>{const c=sa(u,t,!0);c&&(l=!0,Ue(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(Ee(e)&&s.set(e,null),null):(ne(o)?o.forEach(a=>i[a]=null):Ue(i,o),Ee(e)&&s.set(e,i),i)}function Gs(e,t){return!e||!Fs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),we(e,t[0].toLowerCase()+t.slice(1))||we(e,Jt(t))||we(e,t))}function Jo(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:u,renderCache:c,props:f,data:h,setupState:m,ctx:S,inheritAttrs:C}=e,P=Os(e);let v,x;try{if(n.shapeFlag&4){const R=r||s,O=R;v=St(u.call(O,R,c,f,m,h,S)),x=l}else{const R=t;v=St(R.length>1?R(f,{attrs:l,slots:i,emit:a}):R(f,null)),x=t.props?l:Nu(l)}}catch(R){Lt.length=0,Ks(R,e,1),v=Oe(We)}let A=v;if(x&&C!==!1){const R=Object.keys(x),{shapeFlag:O}=A;R.length&&O&7&&(o&&R.some(Ms)&&(x=Iu(x,o)),A=zt(A,x,!1,!0))}return n.dirs&&(A=zt(A,null,!1,!0),A.dirs=A.dirs?A.dirs.concat(n.dirs):n.dirs),n.transition&&Qn(A,n.transition),v=A,Os(P),v}const Nu=e=>{let t;for(const n in e)(n==="class"||n==="style"||Fs(n))&&((t||(t={}))[n]=e[n]);return t},Iu=(e,t)=>{const n={};for(const s in e)(!Ms(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ku(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?Xo(s,i,u):!!i;if(a&8){const c=t.dynamicProps;for(let f=0;fObject.create(oa),la=e=>Object.getPrototypeOf(e)===oa;function Du(e,t,n,s=!1){const r={},o=ia();e.propsDefaults=Object.create(null),aa(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:Cl(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=xe(r),[a]=e.propsOptions;let u=!1;if((s||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,m]=ca(f,t,!0);Ue(i,h),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!a)return Ee(e)&&s.set(e,yn),yn;if(ne(o))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",co=e=>ne(e)?e.map(St):[St(e)],Fu=(e,t,n)=>{if(t._n)return t;const s=dt((...r)=>co(t(...r)),n);return s._c=!1,s},ua=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ao(r))continue;const o=e[r];if(le(o))t[r]=Fu(r,o,s);else if(o!=null){const i=co(o);t[r]=()=>i}}},fa=(e,t)=>{const n=co(t);e.slots.default=()=>n},da=(e,t,n)=>{for(const s in t)(n||!ao(s))&&(e[s]=t[s])},Mu=(e,t,n)=>{const s=e.slots=ia();if(e.vnode.shapeFlag&32){const r=t._;r?(da(s,t,n),n&&ll(s,"_",r,!0)):ua(t,s)}else t&&fa(e,t)},Vu=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=Ce;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:da(r,t,n):(o=!t.$stable,ua(t,r)),i=t}else t&&(fa(e,t),i={default:1});if(o)for(const l in r)!ao(l)&&i[l]==null&&delete r[l]},Ye=Ku;function Bu(e){return ju(e)}function ju(e,t){const n=Hs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:u,setElementText:c,parentNode:f,nextSibling:h,setScopeId:m=Ct,insertStaticContent:S}=e,C=(p,g,_,N=null,E=null,T=null,K=void 0,j=null,q=!!g.dynamicChildren)=>{if(p===g)return;p&&!sn(p,g)&&(N=y(p),de(p,E,T,!0),p=null),g.patchFlag===-2&&(q=!1,g.dynamicChildren=null);const{type:L,ref:ee,shapeFlag:G}=g;switch(L){case Js:P(p,g,_,N);break;case We:v(p,g,_,N);break;case fr:p==null&&x(g,_,N,K);break;case ve:W(p,g,_,N,E,T,K,j,q);break;default:G&1?O(p,g,_,N,E,T,K,j,q):G&6?ce(p,g,_,N,E,T,K,j,q):(G&64||G&128)&&L.process(p,g,_,N,E,T,K,j,q,X)}ee!=null&&E?Kn(ee,p&&p.ref,T,g||p,!g):ee==null&&p&&p.ref!=null&&Kn(p.ref,null,T,p,!0)},P=(p,g,_,N)=>{if(p==null)s(g.el=l(g.children),_,N);else{const E=g.el=p.el;g.children!==p.children&&u(E,g.children)}},v=(p,g,_,N)=>{p==null?s(g.el=a(g.children||""),_,N):g.el=p.el},x=(p,g,_,N)=>{[p.el,p.anchor]=S(p.children,g,_,N,p.el,p.anchor)},A=({el:p,anchor:g},_,N)=>{let E;for(;p&&p!==g;)E=h(p),s(p,_,N),p=E;s(g,_,N)},R=({el:p,anchor:g})=>{let _;for(;p&&p!==g;)_=h(p),r(p),p=_;r(g)},O=(p,g,_,N,E,T,K,j,q)=>{if(g.type==="svg"?K="svg":g.type==="math"&&(K="mathml"),p==null)$(g,_,N,E,T,K,j,q);else{const L=p.el&&p.el._isVueCE?p.el:null;try{L&&L._beginPatch(),Y(p,g,E,T,K,j,q)}finally{L&&L._endPatch()}}},$=(p,g,_,N,E,T,K,j)=>{let q,L;const{props:ee,shapeFlag:G,transition:te,dirs:ie}=p;if(q=p.el=i(p.type,T,ee&&ee.is,ee),G&8?c(q,p.children):G&16&&ae(p.children,q,null,N,E,ur(p,T),K,j),ie&&Yt(p,null,N,"created"),U(q,p,p.scopeId,K,N),ee){for(const Re in ee)Re!=="value"&&!jn(Re)&&o(q,Re,null,ee[Re],T,N);"value"in ee&&o(q,"value",null,ee.value,T),(L=ee.onVnodeBeforeMount)&&_t(L,N,p)}ie&&Yt(p,null,N,"beforeMount");const he=Hu(E,te);he&&te.beforeEnter(q),s(q,g,_),((L=ee&&ee.onVnodeMounted)||he||ie)&&Ye(()=>{try{L&&_t(L,N,p),he&&te.enter(q),ie&&Yt(p,null,N,"mounted")}finally{}},E)},U=(p,g,_,N,E)=>{if(_&&m(p,_),N)for(let T=0;T{for(let L=q;L{const j=g.el=p.el;let{patchFlag:q,dynamicChildren:L,dirs:ee}=g;q|=p.patchFlag&16;const G=p.props||Ce,te=g.props||Ce;let ie;if(_&&Qt(_,!1),(ie=te.onVnodeBeforeUpdate)&&_t(ie,_,g,p),ee&&Yt(g,p,_,"beforeUpdate"),_&&Qt(_,!0),L&&(!p.dynamicChildren||p.dynamicChildren.length!==L.length)&&(q=0,K=!1,L=null),(G.innerHTML&&te.innerHTML==null||G.textContent&&te.textContent==null)&&c(j,""),L?se(p.dynamicChildren,L,j,_,N,ur(g,E),T):K||I(p,g,j,null,_,N,ur(g,E),T,!1),q>0){if(q&16)oe(j,G,te,_,E);else if(q&2&&G.class!==te.class&&o(j,"class",null,te.class,E),q&4&&o(j,"style",G.style,te.style,E),q&8){const he=g.dynamicProps;for(let Re=0;Re{ie&&_t(ie,_,g,p),ee&&Yt(g,p,_,"updated")},N)},se=(p,g,_,N,E,T,K)=>{for(let j=0;j{if(g!==_){if(g!==Ce)for(const T in g)!jn(T)&&!(T in _)&&o(p,T,g[T],null,E,N);for(const T in _){if(jn(T))continue;const K=_[T],j=g[T];K!==j&&T!=="value"&&o(p,T,j,K,E,N)}"value"in _&&o(p,"value",g.value,_.value,E)}},W=(p,g,_,N,E,T,K,j,q)=>{const L=g.el=p?p.el:l(""),ee=g.anchor=p?p.anchor:l("");let{patchFlag:G,dynamicChildren:te,slotScopeIds:ie}=g;ie&&(j=j?j.concat(ie):ie),p==null?(s(L,_,N),s(ee,_,N),ae(g.children||[],_,ee,E,T,K,j,q)):G>0&&G&64&&te&&p.dynamicChildren&&p.dynamicChildren.length===te.length?(se(p.dynamicChildren,te,_,E,T,K,j),(g.key!=null||E&&g===E.subTree)&&uo(p,g,!0)):I(p,g,_,ee,E,T,K,j,q)},ce=(p,g,_,N,E,T,K,j,q)=>{g.slotScopeIds=j,p==null?g.shapeFlag&512?E.ctx.activate(g,_,N,K,q):fe(g,_,N,E,T,K,q):Pe(p,g,q)},fe=(p,g,_,N,E,T,K)=>{const j=p.component=Yu(p,N,E);if(Ws(p)&&(j.ctx.renderer=X),Qu(j,!1,K),j.asyncDep){if(E&&E.registerDep(j,be,K),!p.el){const q=j.subTree=Oe(We);v(null,q,g,_),p.placeholder=q.el}}else be(j,p,g,_,E,T,K)},Pe=(p,g,_)=>{const N=g.component=p.component;if(ku(p,g,_))if(N.asyncDep&&!N.asyncResolved){D(N,g,_);return}else N.next=g,N.update();else g.el=p.el,N.vnode=g},be=(p,g,_,N,E,T,K)=>{const j=()=>{if(p.isMounted){let{next:G,bu:te,u:ie,parent:he,vnode:Re}=p;{const xt=pa(p);if(xt){G&&(G.el=Re.el,D(p,G,K)),xt.asyncDep.then(()=>{Ye(()=>{p.isUnmounted||L()},E)});return}}let Se=G,$e;Qt(p,!1),G?(G.el=Re.el,D(p,G,K)):G=Re,te&&xs(te),($e=G.props&&G.props.onVnodeBeforeUpdate)&&_t($e,he,G,Re),Qt(p,!0);const Me=Jo(p),bt=p.subTree;p.subTree=Me,C(bt,Me,f(bt.el),y(bt),p,E,T),G.el=Me.el,Se===null&&$u(p,Me.el),ie&&Ye(ie,E),($e=G.props&&G.props.onVnodeUpdated)&&Ye(()=>_t($e,he,G,Re),E)}else{let G;const{el:te,props:ie}=g,{bm:he,m:Re,parent:Se,root:$e,type:Me}=p,bt=_n(g);Qt(p,!1),he&&xs(he),!bt&&(G=ie&&ie.onVnodeBeforeMount)&&_t(G,Se,g),Qt(p,!0);{$e.ce&&$e.ce._hasShadowRoot()&&$e.ce._injectChildStyle(Me,p.parent?p.parent.type:void 0);const xt=p.subTree=Jo(p);C(null,xt,_,N,p,E,T),g.el=xt.el}if(Re&&Ye(Re,E),!bt&&(G=ie&&ie.onVnodeMounted)){const xt=g;Ye(()=>_t(G,Se,xt),E)}(g.shapeFlag&256||Se&&_n(Se.vnode)&&Se.vnode.shapeFlag&256)&&p.a&&Ye(p.a,E),p.isMounted=!0,g=_=N=null}};p.scope.on();const q=p.effect=new dl(j);p.scope.off();const L=p.update=q.run.bind(q),ee=p.job=q.runIfDirty.bind(q);ee.i=p,ee.id=p.uid,q.scheduler=()=>lo(ee),Qt(p,!0),L()},D=(p,g,_)=>{g.component=p;const N=p.vnode.props;p.vnode=g,p.next=null,Lu(p,g.props,N,_),Vu(p,g.children,_),Ut(),Uo(p),Ft()},I=(p,g,_,N,E,T,K,j,q=!1)=>{const L=p&&p.children,ee=p?p.shapeFlag:0,G=g.children,{patchFlag:te,shapeFlag:ie}=g;if(te>0){if(te&128){ue(L,G,_,N,E,T,K,j,q);return}else if(te&256){J(L,G,_,N,E,T,K,j,q);return}}ie&8?(ee&16&&w(L,E,T),G!==L&&c(_,G)):ee&16?ie&16?ue(L,G,_,N,E,T,K,j,q):w(L,E,T,!0):(ee&8&&c(_,""),ie&16&&ae(G,_,N,E,T,K,j,q))},J=(p,g,_,N,E,T,K,j,q)=>{p=p||yn,g=g||yn;const L=p.length,ee=g.length,G=Math.min(L,ee);let te;for(te=0;teee?w(p,E,T,!0,!1,G):ae(g,_,N,E,T,K,j,q,G)},ue=(p,g,_,N,E,T,K,j,q)=>{let L=0;const ee=g.length;let G=p.length-1,te=ee-1;for(;L<=G&&L<=te;){const ie=p[L],he=g[L]=q?It(g[L]):St(g[L]);if(sn(ie,he))C(ie,he,_,null,E,T,K,j,q);else break;L++}for(;L<=G&&L<=te;){const ie=p[G],he=g[te]=q?It(g[te]):St(g[te]);if(sn(ie,he))C(ie,he,_,null,E,T,K,j,q);else break;G--,te--}if(L>G){if(L<=te){const ie=te+1,he=iete)for(;L<=G;)de(p[L],E,T,!0),L++;else{const ie=L,he=L,Re=new Map;for(L=he;L<=te;L++){const st=g[L]=q?It(g[L]):St(g[L]);st.key!=null&&Re.set(st.key,L)}let Se,$e=0;const Me=te-he+1;let bt=!1,xt=0;const kn=new Array(Me);for(L=0;L=Me){de(st,E,T,!0);continue}let vt;if(st.key!=null)vt=Re.get(st.key);else for(Se=he;Se<=te;Se++)if(kn[Se-he]===0&&sn(st,g[Se])){vt=Se;break}vt===void 0?de(st,E,T,!0):(kn[vt-he]=L+1,vt>=xt?xt=vt:bt=!0,C(st,g[vt],_,null,E,T,K,j,q),$e++)}const Po=bt?qu(kn):yn;for(Se=Po.length-1,L=Me-1;L>=0;L--){const st=he+L,vt=g[st],No=g[st+1],Io=st+1{const{el:T,type:K,transition:j,children:q,shapeFlag:L}=p;if(L&6){re(p.component.subTree,g,_,N);return}if(L&128){p.suspense.move(g,_,N);return}if(L&64){K.move(p,g,_,X);return}if(K===ve){s(T,g,_);for(let G=0;Gj.enter(T),E));else{const{leave:G,delayLeave:te,afterLeave:ie}=j,he=()=>{p.ctx.isUnmounted?r(T):s(T,g,_)},Re=()=>{const Se=T._isLeaving||!!T[it];T._isLeaving&&T[it](!0),j.persisted&&!Se?he():G(T,()=>{he(),ie&&ie()})};te?te(T,he,Re):Re()}else s(T,g,_)},de=(p,g,_,N=!1,E=!1)=>{const{type:T,props:K,ref:j,children:q,dynamicChildren:L,shapeFlag:ee,patchFlag:G,dirs:te,cacheIndex:ie,memo:he}=p;if(G===-2&&(E=!1),j!=null&&(Ut(),Kn(j,null,_,p,!0),Ft()),ie!=null&&(g.renderCache[ie]=void 0),ee&256){g.ctx.deactivate(p);return}const Re=ee&1&&te,Se=!_n(p);let $e;if(Se&&($e=K&&K.onVnodeBeforeUnmount)&&_t($e,g,p),ee&6)k(p.component,_,N);else{if(ee&128){p.suspense.unmount(_,N);return}Re&&Yt(p,null,g,"beforeUnmount"),ee&64?p.type.remove(p,g,_,X,N):L&&!L.hasOnce&&(T!==ve||G>0&&G&64)?w(L,g,_,!1,!0):(T===ve&&G&384||!E&&ee&16)&&w(q,g,_),N&&Ne(p)}const Me=he!=null&&ie==null;(Se&&($e=K&&K.onVnodeUnmounted)||Re||Me)&&Ye(()=>{$e&&_t($e,g,p),Re&&Yt(p,null,g,"unmounted"),Me&&(p.el=null)},_)},Ne=p=>{const{type:g,el:_,anchor:N,transition:E}=p;if(g===ve){ge(_,N);return}if(g===fr){R(p);return}const T=()=>{r(_),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(p.shapeFlag&1&&E&&!E.persisted){const{leave:K,delayLeave:j}=E,q=()=>K(_,T);j?j(p.el,T,q):q()}else T()},ge=(p,g)=>{let _;for(;p!==g;)_=h(p),r(p),p=_;r(g)},k=(p,g,_)=>{const{bum:N,scope:E,job:T,subTree:K,um:j,m:q,a:L}=p;Qo(q),Qo(L),N&&xs(N),E.stop(),T&&(T.flags|=8,de(K,p,g,_)),j&&Ye(j,g),Ye(()=>{p.isUnmounted=!0},g)},w=(p,g,_,N=!1,E=!1,T=0)=>{for(let K=T;K{if(p.shapeFlag&6)return y(p.component.subTree);if(p.shapeFlag&128)return p.suspense.next();const g=h(p.anchor||p.el),_=g&&g[Ul];return _?h(_):g};let V=!1;const M=(p,g,_)=>{let N;p==null?g._vnode&&(de(g._vnode,null,null,!0),N=g._vnode.component):C(g._vnode||null,p,g,null,null,null,_),g._vnode=p,V||(V=!0,Uo(N),Il(),V=!1)},X={p:C,um:de,m:re,r:Ne,mt:fe,mc:ae,pc:I,pbc:se,n:y,o:e};return{render:M,hydrate:void 0,createApp:Au(M)}}function ur({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 Qt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Hu(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function uo(e,t,n=!1){const s=e.children,r=t.children;if(ne(s)&&ne(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 pa(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pa(t)}function Qo(e){if(e)for(let t=0;te.__isSuspense;function Ku(e,t){t&&t.pendingBranch?ne(e)?t.effects.push(...e):t.effects.push(e):Zc(e)}const ve=Symbol.for("v-fgt"),Js=Symbol.for("v-txt"),We=Symbol.for("v-cmt"),fr=Symbol.for("v-stc"),Lt=[];let rt=null;function F(e=!1){Lt.push(rt=e?null:[])}function fo(){Lt.pop(),rt=Lt[Lt.length-1]||null}let Zn=1;function Ns(e,t=!1){Zn+=e,e<0&&rt&&t&&(rt.hasOnce=!0)}function ga(e){return e.dynamicChildren=Zn>0?rt||yn:null,fo(),Zn>0&&rt&&rt.push(e),e}function B(e,t,n,s,r,o){return ga(d(e,t,n,s,r,o,!0))}function un(e,t,n,s,r){return ga(Oe(e,t,n,s,r,!0))}function es(e){return e?e.__v_isVNode===!0:!1}function sn(e,t){return e.type===t.type&&e.key===t.key}const ya=({key:e})=>e??null,ws=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Te(e)||Ge(e)||le(e)?{i:He,r:e,k:t,f:!!n}:e:null);function d(e,t=null,n=null,s=0,r=null,o=e===ve?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ya(t),ref:t&&ws(t),scopeId:$l,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:He};return l?(Is(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=Te(n)?8:16),Zn>0&&!i&&rt&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&rt.push(a),a}const Oe=Wu;function Wu(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Yl)&&(e=We),es(e)){const l=zt(e,t,!0);return n&&Is(l,n),Zn>0&&!o&&rt&&(l.shapeFlag&6?rt[rt.indexOf(e)]=l:rt.push(l)),l.patchFlag=-2,l}if(sf(e)&&(e=e.__vccOpts),t){t=zu(t);let{class:l,style:a}=t;l&&!Te(l)&&(t.class=je(l)),Ee(a)&&(oo(a)&&!ne(a)&&(a=Ue({},a)),t.style=Yr(a))}const i=Te(e)?1:ma(e)?128:Fl(e)?64:Ee(e)?4:le(e)?2:0;return d(e,t,n,s,r,i,o,!0)}function zu(e){return e?oo(e)||la(e)?Ue({},e):e:null}function zt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,u=t?Gu(r||{},t):r,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ya(u),ref:t&&t.ref?n&&o?ne(o)?o.concat(ws(t)):[o,ws(t)]:ws(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!==ve?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&zt(e.ssContent),ssFallback:e.ssFallback&&zt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Qn(c,a.clone(c)),c}function ts(e=" ",t=0){return Oe(Js,null,e,t)}function pe(e="",t=!1){return t?(F(),un(We,null,e)):Oe(We,null,e)}function St(e){return e==null||typeof e=="boolean"?Oe(We):ne(e)?Oe(ve,null,e.slice()):es(e)?It(e):Oe(Js,null,String(e))}function It(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:zt(e)}function Is(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ne(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Is(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!la(t)?t._ctx=He:r===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(le(t)){if(s&65){Is(e,{default:t});return}t={default:t,_ctx:He},n=32}else t=String(t),s&64?(n=16,t=[ts(t)]):n=8;e.children=t,e.shapeFlag|=n}function Gu(...e){const t={};for(let n=0;nze||He;let ks,Fr;{const e=Hs(),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)}};ks=t("__VUE_INSTANCE_SETTERS__",n=>ze=n),Fr=t("__VUE_SSR_SETTERS__",n=>ns=n)}const cs=e=>{const t=ze;return ks(e),e.scope.on(),()=>{e.scope.off(),ks(t)}},Zo=()=>{ze&&ze.scope.off(),ks(null)};function xa(e){return e.vnode.shapeFlag&4}let ns=!1;function Qu(e,t=!1,n=!1){t&&Fr(t);const{props:s,children:r}=e.vnode,o=xa(e);Du(e,s,o,t),Mu(e,r,n||t);const i=o?Zu(e,t):void 0;return t&&Fr(!1),i}function Zu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,vu);const{setup:s}=n;if(s){Ut();const r=e.setupContext=s.length>1?tf(e):null,o=cs(e),i=as(s,e,0,[e.props,r]),l=rl(i);if(Ft(),o(),(l||e.sp)&&!_n(e)&&Wl(e),l){if(i.then(Zo,Zo),t)return i.then(a=>{ei(e,a)}).catch(a=>{Ks(a,e,0)});e.asyncDep=i}else ei(e,i)}else va(e)}function ei(e,t,n){le(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ee(t)&&(e.setupState=Tl(t)),va(e)}function va(e,t,n){const s=e.type;e.render||(e.render=s.render||Ct);{const r=cs(e);Ut();try{_u(e)}finally{Ft(),r()}}}const ef={get(e,t){return Ke(e,"get",""),e[t]}};function tf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ef),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Tl(Al(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Wn)return Wn[n](e)},has(t,n){return n in t||n in Wn}})):e.proxy}function nf(e,t=!0){return le(e)?e.displayName||e.name:e.name||t&&e.__name}function sf(e){return le(e)&&"__vccOpts"in e}const tt=(e,t)=>Gc(e,t,ns);function po(e,t,n){try{Ns(-1);const s=arguments.length;return s===2?Ee(t)&&!ne(t)?es(t)?Oe(e,null,[t]):Oe(e,t):Oe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&es(n)&&(n=[n]),Oe(e,t,n))}finally{Ns(1)}}const rf="3.5.40";/** +* @vue/runtime-dom v3.5.40 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Mr;const ti=typeof window<"u"&&window.trustedTypes;if(ti)try{Mr=ti.createPolicy("vue",{createHTML:e=>e})}catch{}const _a=Mr?e=>Mr.createHTML(e):e=>e,of="http://www.w3.org/2000/svg",lf="http://www.w3.org/1998/Math/MathML",Nt=typeof document<"u"?document:null,ni=Nt&&Nt.createElement("template"),af={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"?Nt.createElementNS(of,e):t==="mathml"?Nt.createElementNS(lf,e):n?Nt.createElement(e,{is:n}):Nt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Nt.createTextNode(e),createComment:e=>Nt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Nt.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{ni.innerHTML=_a(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=ni.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Bt="transition",Ln="animation",ss=Symbol("_vtc"),wa={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},cf=Ue({},Vl,wa),uf=e=>(e.displayName="Transition",e.props=cf,e),ff=uf((e,{slots:t})=>po(au,df(e),t)),Zt=(e,t=[])=>{ne(e)?e.forEach(n=>n(...t)):e&&e(...t)},si=e=>e?ne(e)?e.some(t=>t.length>1):e.length>1:!1;function df(e){const t={};for(const W in e)W in wa||(t[W]=e[W]);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:a=o,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,S=pf(r),C=S&&S[0],P=S&&S[1],{onBeforeEnter:v,onEnter:x,onEnterCancelled:A,onLeave:R,onLeaveCancelled:O,onBeforeAppear:$=v,onAppear:U=x,onAppearCancelled:ae=A}=t,Y=(W,ce,fe,Pe)=>{W._enterCancelled=Pe,en(W,ce?c:l),en(W,ce?u:i),fe&&fe()},se=(W,ce)=>{W._isLeaving=!1,en(W,f),en(W,m),en(W,h),ce&&ce()},oe=W=>(ce,fe)=>{const Pe=W?U:x,be=()=>Y(ce,W,fe);Zt(Pe,[ce,be]),ri(()=>{en(ce,W?a:o),Tt(ce,W?c:l),si(Pe)||oi(ce,s,C,be)})};return Ue(t,{onBeforeEnter(W){Zt(v,[W]),Tt(W,o),Tt(W,i)},onBeforeAppear(W){Zt($,[W]),Tt(W,a),Tt(W,u)},onEnter:oe(!1),onAppear:oe(!0),onLeave(W,ce){W._isLeaving=!0;const fe=()=>se(W,ce);Tt(W,f),W._enterCancelled?(Tt(W,h),ai(W)):(ai(W),Tt(W,h)),ri(()=>{W._isLeaving&&(en(W,f),Tt(W,m),si(R)||oi(W,s,P,fe))}),Zt(R,[W,fe])},onEnterCancelled(W){Y(W,!1,void 0,!0),Zt(A,[W])},onAppearCancelled(W){Y(W,!0,void 0,!0),Zt(ae,[W])},onLeaveCancelled(W){se(W),Zt(O,[W])}})}function pf(e){if(e==null)return null;if(Ee(e))return[dr(e.enter),dr(e.leave)];{const t=dr(e);return[t,t]}}function dr(e){return yc(e)}function Tt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ss]||(e[ss]=new Set)).add(t)}function en(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[ss];n&&(n.delete(t),n.size||(e[ss]=void 0))}function ri(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let hf=0;function oi(e,t,n,s){const r=e._endId=++hf,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=mf(e,t);if(!i)return s();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,h),o()},h=m=>{m.target===e&&++c>=a&&f()};setTimeout(()=>{c(n[S]||"").split(", "),r=s(`${Bt}Delay`),o=s(`${Bt}Duration`),i=ii(r,o),l=s(`${Ln}Delay`),a=s(`${Ln}Duration`),u=ii(l,a);let c=null,f=0,h=0;t===Bt?i>0&&(c=Bt,f=i,h=o.length):t===Ln?u>0&&(c=Ln,f=u,h=a.length):(f=Math.max(i,u),c=f>0?i>u?Bt:Ln:null,h=c?c===Bt?o.length:a.length:0);const m=c===Bt&&/\b(?:transform|all)(?:,|$)/.test(s(`${Bt}Property`).toString());return{type:c,timeout:f,propCount:h,hasTransform:m}}function ii(e,t){for(;e.lengthli(n)+li(e[s])))}function li(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ai(e){return(e?e.ownerDocument:document).body.offsetHeight}function gf(e,t,n){const s=e[ss];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ci=Symbol("_vod"),yf=Symbol("_vsh"),bf=Symbol(""),xf=/(?:^|;)\s*display\s*:/;function vf(e,t,n){const s=e.style,r=Te(n);let o=!1;if(n&&!r){if(t)if(Te(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Bn(s,l,"")}else for(const i in t)n[i]==null&&Bn(s,i,"");for(const i in n){i==="display"&&(o=!0);const l=n[i];l!=null?wf(e,i,!Te(t)&&t?t[i]:void 0,l)||Bn(s,i,l):Bn(s,i,"")}}else if(r){if(t!==n){const i=s[bf];i&&(n+=";"+i),s.cssText=n,o=xf.test(n)}}else t&&e.removeAttribute("style");ci in e&&(e[ci]=o?s.display:"",e[yf]&&(s.display="none"))}const ui=/\s*!important$/;function Bn(e,t,n){if(ne(n))n.forEach(s=>Bn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_f(e,t);ui.test(n)?e.setProperty(Jt(s),n.replace(ui,""),"important"):e[s]=n}}const fi=["Webkit","Moz","ms"],pr={};function _f(e,t){const n=pr[t];if(n)return n;let s=et(t);if(s!=="filter"&&s in e)return pr[t]=s;s=Bs(s);for(let r=0;rhr||(Of.then(()=>hr=0),hr=Date.now());function Pf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(ne(r)){const o=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{o.call(s),s._stopped=!0};const i=r.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Nf=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?gf(e,s,i):t==="style"?vf(e,n,s):Fs(t)?Ms(t)||Sf(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):If(e,t,s,i))?(hi(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&pi(e,t,s,i,o,t!=="value")):e._isVueCE&&(kf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Te(s)))?hi(e,et(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),pi(e,t,s,i))};function If(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&gi(t)&&le(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||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 gi(t)&&Te(n)?!1:t in e}function kf(e,t){const n=e._def.props;if(!n)return!1;const s=et(t);return Array.isArray(n)?n.some(r=>et(r)===s):Object.keys(n).some(r=>et(r)===s)}const Gt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ne(t)?n=>xs(t,n):t};function $f(e){e.target.composing=!0}function yi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const at=Symbol("_assign");function bi(e,t,n){return t&&(e=e.trim()),n&&(e=js(e)),e}const De={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[at]=Gt(r);const o=s||r.props&&r.props.type==="number";Dt(e,t?"change":"input",i=>{i.target.composing||e[at](bi(e.value,n,o))}),(n||o)&&Dt(e,"change",()=>{e.value=bi(e.value,n,o)}),t||(Dt(e,"compositionstart",$f),Dt(e,"compositionend",yi),Dt(e,"change",yi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[at]=Gt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?js(e.value):e.value,a=t??"";if(l===a)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a)}},zn={deep:!0,created(e,t,n){e[at]=Gt(n),Dt(e,"change",()=>{const s=e._modelValue,r=Rn(e),o=e.checked,i=e[at];if(ne(s)){const l=Qr(s,r),a=l!==-1;if(o&&!a)i(s.concat(r));else if(!o&&a){const u=[...s];u.splice(l,1),i(u)}}else if(Pn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(Ea(e,o))})},mounted:xi,beforeUpdate(e,t,n){e[at]=Gt(n),xi(e,t,n)}};function xi(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(ne(t))r=Qr(t,s.props.value)>-1;else if(Pn(t))r=t.has(s.props.value);else{if(t===n)return;r=Wt(t,Ea(e,!0))}e.checked!==r&&(e.checked=r)}const vi={created(e,{value:t},n){e.checked=Wt(t,n.props.value),e[at]=Gt(n),Dt(e,"change",()=>{e[at](Rn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[at]=Gt(s),t!==n&&(e.checked=Wt(t,s.props.value))}},Sn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,Dt(e,"change",()=>{const r=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?js(Rn(o)):Rn(o));e[at](e.multiple?Pn(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,io(()=>{e._assigning=!1})}),e[at]=Gt(s)},mounted(e,{value:t}){_i(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[at]=Gt(n)},updated(e,{value:t}){e._assigning||_i(e,t)}};function _i(e,t){const n=e.multiple,s=ne(t);if(!(n&&!s&&!Pn(t))){for(let r=0,o=e.options.length;rString(u)===String(l)):i.selected=Qr(t,l)>-1}else i.selected=t.has(l);else if(Wt(Rn(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Rn(e){return"_value"in e?e._value:e.value}function Ea(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Df=["ctrl","shift","alt","meta"],Lf={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)=>Df.some(n=>e[`${n}Key`]&&!t.includes(n))},ut=(e,t)=>{if(!e)return e;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=Jt(r.key);if(t.some(i=>i===o||Uf[i]===o))return e(r)}))},Mf=Ue({patchProp:Nf},af);let wi;function Vf(){return wi||(wi=Bu(Mf))}const Bf=((...e)=>{const t=Vf().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Hf(s);if(!r)return;const o=t._component;!le(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,jf(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function jf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Hf(e){return Te(e)?document.querySelector(e):e}/*! + * pinia v2.3.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const qf=Symbol();var Ei;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Ei||(Ei={}));function Kf(){const e=Rc(!0),t=e.run(()=>Z({}));let n=[],s=[];const r=Al({install(o){r._a=o,o.provide(qf,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 Wf={__name:"App",setup(e){return(t,n)=>{const s=kr("router-view");return F(),un(s,null,{default:dt(({Component:r})=>[Oe(ff,{name:"fade",mode:"out-in"},{default:dt(()=>[(F(),un(xu(r)))]),_:2},1024)]),_:1})}}};/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const gn=typeof document<"u";function Sa(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function zf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Sa(e.default)}const _e=Object.assign;function mr(e,t){const n={};for(const s in t){const r=t[s];n[s]=gt(r)?r.map(e):e(r)}return n}const Gn=()=>{},gt=Array.isArray;function Si(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Ra=/#/g,Gf=/&/g,Jf=/\//g,Xf=/=/g,Yf=/\?/g,Ca=/\+/g,Qf=/%5B/g,Zf=/%5D/g,Aa=/%5E/g,ed=/%60/g,Oa=/%7B/g,td=/%7C/g,Ta=/%7D/g,nd=/%20/g;function ho(e){return e==null?"":encodeURI(""+e).replace(td,"|").replace(Qf,"[").replace(Zf,"]")}function sd(e){return ho(e).replace(Oa,"{").replace(Ta,"}").replace(Aa,"^")}function Vr(e){return ho(e).replace(Ca,"%2B").replace(nd,"+").replace(Ra,"%23").replace(Gf,"%26").replace(ed,"`").replace(Oa,"{").replace(Ta,"}").replace(Aa,"^")}function rd(e){return Vr(e).replace(Xf,"%3D")}function od(e){return ho(e).replace(Ra,"%23").replace(Yf,"%3F")}function id(e){return od(e).replace(Jf,"%2F")}function rs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const ld=/\/$/,ad=e=>e.replace(ld,"");function gr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=dd(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:rs(i)}}function cd(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ri(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ud(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Cn(t.matched[s],n.matched[r])&&Pa(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Cn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Pa(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!fd(e[n],t[n]))return!1;return!0}function fd(e,t){return gt(e)?Ci(e,t):gt(t)?Ci(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Ci(e,t){return gt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function dd(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 jt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Br=(function(e){return e.pop="pop",e.push="push",e})({}),yr=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function pd(e){if(!e)if(gn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),ad(e)}const hd=/^[^#]+#/;function md(e,t){return e.replace(hd,"#")+t}function gd(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 Ys=()=>({left:window.scrollX,top:window.scrollY});function yd(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=gd(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 Ai(e,t){return(history.state?history.state.position-t:-1)+e}const jr=new Map;function bd(e,t){jr.set(e,t)}function xd(e){const t=jr.get(e);return jr.delete(e),t}function vd(e){return typeof e=="string"||e&&typeof e=="object"}function Na(e){return typeof e=="string"||typeof e=="symbol"}let Ie=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Ia=Symbol("");Ie.MATCHER_NOT_FOUND+"",Ie.NAVIGATION_GUARD_REDIRECT+"",Ie.NAVIGATION_ABORTED+"",Ie.NAVIGATION_CANCELLED+"",Ie.NAVIGATION_DUPLICATED+"";function An(e,t){return _e(new Error,{type:e,[Ia]:!0},t)}function Pt(e,t){return e instanceof Error&&Ia in e&&(t==null||!!(e.type&t))}const _d=["params","query","hash"];function wd(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of _d)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ed(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Vr(r)):[s&&Vr(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Sd(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=gt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Rd=Symbol(""),Ti=Symbol(""),Qs=Symbol(""),mo=Symbol(""),Hr=Symbol("");function Un(){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 Kt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const u=h=>{h===!1?a(An(Ie.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?a(h):vd(h)?a(An(Ie.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},c=o(()=>e.call(s&&s.instances[r],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(h=>a(h))})}function br(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Sa(a)){const u=(a.__vccOpts||a)[t];u&&o.push(Kt(u,n,s,i,l,r))}else{let u=a();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=zf(c)?c.default:c;i.mods[l]=c,i.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&Kt(h,n,s,i,l,r)()}))}}return o}function Cd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iCn(u,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Cn(u,a))||r.push(a))}return[n,s,r]}/*! + * vue-router v4.6.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let Ad=()=>location.protocol+"//"+location.host;function ka(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),Ri(l,"")}return Ri(n,e)+s+r}function Od(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const m=ka(e,location),S=n.value,C=t.value;let P=0;if(h){if(n.value=m,t.value=h,i&&i===S){i=null;return}P=C?h.position-C.position:0}else s(m);r.forEach(v=>{v(n.value,S,{delta:P,type:Br.pop,direction:P?P>0?yr.forward:yr.back:yr.unknown})})};function a(){i=n.value}function u(h){r.push(h);const m=()=>{const S=r.indexOf(h);S>-1&&r.splice(S,1)};return o.push(m),m}function c(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(_e({},h.state,{scroll:Ys()}),"")}}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:a,listen:u,destroy:f}}function Pi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Ys():null}}function Td(e){const{history:t,location:n}=window,s={value:ka(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(a,u,c){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Ad()+e+a;try{t[c?"replaceState":"pushState"](u,"",h),r.value=u}catch(m){console.error(m),n[c?"replace":"assign"](h)}}function i(a,u){o(a,_e({},t.state,Pi(r.value.back,a,r.value.forward,!0),u,{position:r.value.position}),!0),s.value=a}function l(a,u){const c=_e({},r.value,t.state,{forward:a,scroll:Ys()});o(c.current,c,!0),o(a,_e({},Pi(s.value,a,null),{position:c.position+1},u),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function Pd(e){e=pd(e);const t=Td(e),n=Od(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=_e({location:"",base:e,go:s,createHref:md.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}let rn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Le=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Le||{});const Nd={type:rn.Static,value:""},Id=/[a-zA-Z0-9_]/;function kd(e){if(!e)return[[]];if(e==="/")return[[Nd]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${u}": ${m}`)}let n=Le.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,u="",c="";function f(){u&&(n===Le.Static?o.push({type:rn.Static,value:u}):n===Le.Param||n===Le.ParamRegExp||n===Le.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:rn.Param,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=a}for(;lt.length?t.length===1&&t[0]===Qe.Static+Qe.Segment?1:-1:0}function $a(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Fd={strict:!1,end:!0,sensitive:!1};function Md(e,t,n){const s=Ld(kd(e.path),n),r=_e(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Vd(e,t){const n=[],s=new Map;t=Si(Fd,t);function r(f){return s.get(f)}function o(f,h,m){const S=!m,C=$i(f);C.aliasOf=m&&m.record;const P=Si(t,f),v=[C];if("alias"in f){const R=typeof f.alias=="string"?[f.alias]:f.alias;for(const O of R)v.push($i(_e({},C,{components:m?m.record.components:C.components,path:O,aliasOf:m?m.record:C})))}let x,A;for(const R of v){const{path:O}=R;if(h&&O[0]!=="/"){const $=h.record.path,U=$[$.length-1]==="/"?"":"/";R.path=h.record.path+(O&&U+O)}if(x=Md(R,h,P),m?m.alias.push(x):(A=A||x,A!==x&&A.alias.push(x),S&&f.name&&!Di(x)&&i(f.name)),Da(x)&&a(x),C.children){const $=C.children;for(let U=0;U<$.length;U++)o($[U],x,m&&m.children[U])}m=m||x}return A?()=>{i(A)}:Gn}function i(f){if(Na(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 a(f){const h=Hd(f,n);n.splice(h,0,f),f.record.name&&!Di(f)&&s.set(f.record.name,f)}function u(f,h){let m,S={},C,P;if("name"in f&&f.name){if(m=s.get(f.name),!m)throw An(Ie.MATCHER_NOT_FOUND,{location:f});P=m.record.name,S=_e(ki(h.params,m.keys.filter(A=>!A.optional).concat(m.parent?m.parent.keys.filter(A=>A.optional):[]).map(A=>A.name)),f.params&&ki(f.params,m.keys.map(A=>A.name))),C=m.stringify(S)}else if(f.path!=null)C=f.path,m=n.find(A=>A.re.test(C)),m&&(S=m.parse(C),P=m.record.name);else{if(m=h.name?s.get(h.name):n.find(A=>A.re.test(h.path)),!m)throw An(Ie.MATCHER_NOT_FOUND,{location:f,currentLocation:h});P=m.record.name,S=_e({},h.params,f.params),C=m.stringify(S)}const v=[];let x=m;for(;x;)v.unshift(x.record),x=x.parent;return{name:P,path:C,params:S,matched:v,meta:jd(v)}}e.forEach(f=>o(f));function c(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:r}}function ki(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function $i(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Bd(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 Bd(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 Di(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function jd(e){return e.reduce((t,n)=>_e(t,n.meta),{})}function Hd(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;$a(e,t[o])<0?s=o:n=o+1}const r=qd(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qd(e){let t=e;for(;t=t.parent;)if(Da(t)&&$a(e,t)===0)return t}function Da({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Li(e){const t=pt(Qs),n=pt(mo),s=tt(()=>{const a=xn(e.to);return t.resolve(a)}),r=tt(()=>{const{matched:a}=s.value,{length:u}=a,c=a[u-1],f=n.matched;if(!c||!f.length)return-1;const h=f.findIndex(Cn.bind(null,c));if(h>-1)return h;const m=Ui(a[u-2]);return u>1&&Ui(c)===m&&f[f.length-1].path!==m?f.findIndex(Cn.bind(null,a[u-2])):h}),o=tt(()=>r.value>-1&&Jd(n.params,s.value.params)),i=tt(()=>r.value>-1&&r.value===n.matched.length-1&&Pa(n.params,s.value.params));function l(a={}){if(Gd(a)){const u=t[xn(e.replace)?"replace":"push"](xn(e.to)).catch(Gn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:tt(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Kd(e){return e.length===1?e[0]:e}const Wd=Kl({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:Li,setup(e,{slots:t}){const n=At(Li(e)),{options:s}=pt(Qs),r=tt(()=>({[Fi(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Fi(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Kd(t.default(n));return e.custom?o:po("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),zd=Wd;function Gd(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 Jd(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(!gt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function Ui(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Fi=(e,t,n)=>e??t??n,Xd=Kl({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=pt(Hr),r=tt(()=>e.route||s.value),o=pt(Ti,0),i=tt(()=>{let u=xn(o);const{matched:c}=r.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),l=tt(()=>r.value.matched[i.value]);vs(Ti,tt(()=>i.value+1)),vs(Rd,l),vs(Hr,r);const a=Z();return _s(()=>[a.value,l.value,e.name],([u,c,f],[h,m,S])=>{c&&(c.instances[f]=u,m&&m!==c&&u&&u===h&&(c.leaveGuards.size||(c.leaveGuards=m.leaveGuards),c.updateGuards.size||(c.updateGuards=m.updateGuards))),u&&c&&(!m||!Cn(c,m)||!h)&&(c.enterCallbacks[f]||[]).forEach(C=>C(u))},{flush:"post"}),()=>{const u=r.value,c=e.name,f=l.value,h=f&&f.components[c];if(!h)return Mi(n.default,{Component:h,route:u});const m=f.props[c],S=m?m===!0?u.params:typeof m=="function"?m(u):m:null,P=po(h,_e({},S,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(f.instances[c]=null)},ref:a}));return Mi(n.default,{Component:P,route:u})||P}}});function Mi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Yd=Xd;function Qd(e){const t=Vd(e.routes,e),n=e.parseQuery||Ed,s=e.stringifyQuery||Oi,r=e.history,o=Un(),i=Un(),l=Un(),a=qc(jt);let u=jt;gn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=mr.bind(null,y=>""+y),f=mr.bind(null,id),h=mr.bind(null,rs);function m(y,V){let M,X;return Na(y)?(M=t.getRecordMatcher(y),X=V):X=y,t.addRoute(X,M)}function S(y){const V=t.getRecordMatcher(y);V&&t.removeRoute(V)}function C(){return t.getRoutes().map(y=>y.record)}function P(y){return!!t.getRecordMatcher(y)}function v(y,V){if(V=_e({},V||a.value),typeof y=="string"){const _=gr(n,y,V.path),N=t.resolve({path:_.path},V),E=r.createHref(_.fullPath);return _e(_,N,{params:h(N.params),hash:rs(_.hash),redirectedFrom:void 0,href:E})}let M;if(y.path!=null)M=_e({},y,{path:gr(n,y.path,V.path).path});else{const _=_e({},y.params);for(const N in _)_[N]==null&&delete _[N];M=_e({},y,{params:f(_)}),V.params=f(V.params)}const X=t.resolve(M,V),Q=y.hash||"";X.params=c(h(X.params));const p=cd(s,_e({},y,{hash:sd(Q),path:X.path})),g=r.createHref(p);return _e({fullPath:p,hash:Q,query:s===Oi?Sd(y.query):y.query||{}},X,{redirectedFrom:void 0,href:g})}function x(y){return typeof y=="string"?gr(n,y,a.value.path):_e({},y)}function A(y,V){if(u!==y)return An(Ie.NAVIGATION_CANCELLED,{from:V,to:y})}function R(y){return U(y)}function O(y){return R(_e(x(y),{replace:!0}))}function $(y,V){const M=y.matched[y.matched.length-1];if(M&&M.redirect){const{redirect:X}=M;let Q=typeof X=="function"?X(y,V):X;return typeof Q=="string"&&(Q=Q.includes("?")||Q.includes("#")?Q=x(Q):{path:Q},Q.params={}),_e({query:y.query,hash:y.hash,params:Q.path!=null?{}:y.params},Q)}}function U(y,V){const M=u=v(y),X=a.value,Q=y.state,p=y.force,g=y.replace===!0,_=$(M,X);if(_)return U(_e(x(_),{state:typeof _=="object"?_e({},Q,_.state):Q,force:p,replace:g}),V||M);const N=M;N.redirectedFrom=V;let E;return!p&&ud(s,X,M)&&(E=An(Ie.NAVIGATION_DUPLICATED,{to:N,from:X}),re(X,X,!0,!1)),(E?Promise.resolve(E):se(N,X)).catch(T=>Pt(T)?Pt(T,Ie.NAVIGATION_GUARD_REDIRECT)?T:ue(T):I(T,N,X)).then(T=>{if(T){if(Pt(T,Ie.NAVIGATION_GUARD_REDIRECT))return U(_e({replace:g},x(T.to),{state:typeof T.to=="object"?_e({},Q,T.to.state):Q,force:p}),V||N)}else T=W(N,X,!0,g,Q);return oe(N,X,T),T})}function ae(y,V){const M=A(y,V);return M?Promise.reject(M):Promise.resolve()}function Y(y){const V=ge.values().next().value;return V&&typeof V.runWithContext=="function"?V.runWithContext(y):y()}function se(y,V){let M;const[X,Q,p]=Cd(y,V);M=br(X.reverse(),"beforeRouteLeave",y,V);for(const _ of X)_.leaveGuards.forEach(N=>{M.push(Kt(N,y,V))});const g=ae.bind(null,y,V);return M.push(g),w(M).then(()=>{M=[];for(const _ of o.list())M.push(Kt(_,y,V));return M.push(g),w(M)}).then(()=>{M=br(Q,"beforeRouteUpdate",y,V);for(const _ of Q)_.updateGuards.forEach(N=>{M.push(Kt(N,y,V))});return M.push(g),w(M)}).then(()=>{M=[];for(const _ of p)if(_.beforeEnter)if(gt(_.beforeEnter))for(const N of _.beforeEnter)M.push(Kt(N,y,V));else M.push(Kt(_.beforeEnter,y,V));return M.push(g),w(M)}).then(()=>(y.matched.forEach(_=>_.enterCallbacks={}),M=br(p,"beforeRouteEnter",y,V,Y),M.push(g),w(M))).then(()=>{M=[];for(const _ of i.list())M.push(Kt(_,y,V));return M.push(g),w(M)}).catch(_=>Pt(_,Ie.NAVIGATION_CANCELLED)?_:Promise.reject(_))}function oe(y,V,M){l.list().forEach(X=>Y(()=>X(y,V,M)))}function W(y,V,M,X,Q){const p=A(y,V);if(p)return p;const g=V===jt,_=gn?history.state:{};M&&(X||g?r.replace(y.fullPath,_e({scroll:g&&_&&_.scroll},Q)):r.push(y.fullPath,Q)),a.value=y,re(y,V,M,g),ue()}let ce;function fe(){ce||(ce=r.listen((y,V,M)=>{if(!k.listening)return;const X=v(y),Q=$(X,k.currentRoute.value);if(Q){U(_e(Q,{replace:!0,force:!0}),X).catch(Gn);return}u=X;const p=a.value;gn&&bd(Ai(p.fullPath,M.delta),Ys()),se(X,p).catch(g=>Pt(g,Ie.NAVIGATION_ABORTED|Ie.NAVIGATION_CANCELLED)?g:Pt(g,Ie.NAVIGATION_GUARD_REDIRECT)?(U(_e(x(g.to),{force:!0}),X).then(_=>{Pt(_,Ie.NAVIGATION_ABORTED|Ie.NAVIGATION_DUPLICATED)&&!M.delta&&M.type===Br.pop&&r.go(-1,!1)}).catch(Gn),Promise.reject()):(M.delta&&r.go(-M.delta,!1),I(g,X,p))).then(g=>{g=g||W(X,p,!1),g&&(M.delta&&!Pt(g,Ie.NAVIGATION_CANCELLED)?r.go(-M.delta,!1):M.type===Br.pop&&Pt(g,Ie.NAVIGATION_ABORTED|Ie.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),oe(X,p,g)}).catch(Gn)}))}let Pe=Un(),be=Un(),D;function I(y,V,M){ue(y);const X=be.list();return X.length?X.forEach(Q=>Q(y,V,M)):console.error(y),Promise.reject(y)}function J(){return D&&a.value!==jt?Promise.resolve():new Promise((y,V)=>{Pe.add([y,V])})}function ue(y){return D||(D=!y,fe(),Pe.list().forEach(([V,M])=>y?M(y):V()),Pe.reset()),y}function re(y,V,M,X){const{scrollBehavior:Q}=e;if(!gn||!Q)return Promise.resolve();const p=!M&&xd(Ai(y.fullPath,0))||(X||!M)&&history.state&&history.state.scroll||null;return io().then(()=>Q(y,V,p)).then(g=>g&&yd(g)).catch(g=>I(g,y,V))}const de=y=>r.go(y);let Ne;const ge=new Set,k={currentRoute:a,listening:!0,addRoute:m,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:P,getRoutes:C,resolve:v,options:e,push:R,replace:O,go:de,back:()=>de(-1),forward:()=>de(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:be.add,isReady:J,install(y){y.component("RouterLink",zd),y.component("RouterView",Yd),y.config.globalProperties.$router=k,Object.defineProperty(y.config.globalProperties,"$route",{enumerable:!0,get:()=>xn(a)}),gn&&!Ne&&a.value===jt&&(Ne=!0,R(r.location).catch(X=>{}));const V={};for(const X in jt)Object.defineProperty(V,X,{get:()=>a.value[X],enumerable:!0});y.provide(Qs,k),y.provide(mo,Cl(V)),y.provide(Hr,a);const M=y.unmount;ge.add(y),y.unmount=function(){ge.delete(y),ge.size<1&&(u=jt,ce&&ce(),ce=null,a.value=jt,Ne=!1,D=!1),M()}}};function w(y){return y.reduce((V,M)=>V.then(()=>Y(M)),Promise.resolve())}return k}function Zd(){return pt(Qs)}function ep(e){return pt(mo)}const go="sub_store_remote_uri",yo="sub_store_admin_token",bo="sub_store_token_validated";function La(e){const t=(e||"").trim().replace(/\/+$/,"").replace(/\/api$/,"");if(!t)return"";const n=new URL(t);if(!["http:","https:"].includes(n.protocol))throw new Error("Remote URI must use http or https");return n.toString().replace(/\/+$/,"")}function tp(e,t){const n=La(e);n&&t&&(localStorage.setItem(go,n),localStorage.setItem(yo,t),localStorage.setItem(bo,"true"))}function xo(){return localStorage.getItem(go)||""}function Ua(){return localStorage.getItem(yo)||""}function np(){return localStorage.getItem(bo)==="true"}function sp(){localStorage.removeItem(go),localStorage.removeItem(yo),localStorage.removeItem(bo)}async function rp(e,t){if(!e)return!1;try{const n=La(t),s=await fetch(`${n}/api/env`,{headers:{Authorization:`Bearer ${e}`}});return s.ok?(await s.json()).status==="success":!1}catch{return!1}}function op(){return Ua()}function ip(){var e;return xo()||((e=window.SUB_STORE_CONFIG)==null?void 0:e.apiBaseUrl)||""}const lp={class:"min-h-screen flex bg-gray-50"},ap={class:"w-60 bg-gray-900 text-gray-300 flex flex-col fixed inset-y-0 left-0 z-30"},cp={class:"flex-1 py-3 overflow-y-auto"},up={class:"text-base"},fp={class:"flex-1 ml-60 min-h-screen"},dp={class:"px-6 py-5"},pp={__name:"AdminLayout",setup(e){const t=[{to:"/",icon:"📊",label:"概览"},{to:"/sources",icon:"📡",label:"订阅源"},{to:"/collections",icon:"📁",label:"合集"},{to:"/templates",icon:"📋",label:"模板"},{to:"/recycle-bin",icon:"♻️",label:"回收站"},{to:"/tools",icon:"🔧",label:"工具"},{to:"/settings",icon:"⚙️",label:"设置"}];return(n,s)=>{const r=kr("router-link"),o=kr("router-view");return F(),B("div",lp,[d("aside",ap,[s[0]||(s[0]=d("div",{class:"px-5 py-4 border-b border-gray-700"},[d("h1",{class:"text-lg font-bold text-white flex items-center gap-2"},[d("span",{class:"inline-block w-2 h-2 bg-primary-500 rounded-full"}),ts(" SubStore ")])],-1)),d("nav",cp,[(F(),B(ve,null,Fe(t,i=>Oe(r,{key:i.to,to:i.to,class:je(["flex items-center gap-3 px-5 py-2.5 text-sm transition-colors",n.$route.path===i.to||i.to!=="/"&&n.$route.path.startsWith(i.to)?"bg-gray-800 text-white border-l-2 border-primary-500":"hover:bg-gray-800/50 border-l-2 border-transparent"])},{default:dt(()=>[d("span",up,H(i.icon),1),d("span",null,H(i.label),1)]),_:2},1032,["to","class"])),64))])]),d("main",fp,[d("div",dp,[Oe(o)])])])}}},hp={class:"min-h-screen bg-gray-50 flex items-center justify-center px-4"},mp={key:0,class:"mt-4 text-sm text-red-600"},gp=["disabled"],yp={__name:"Login",setup(e){const t=ep(),n=Zd(),s=Z(xo()||window.location.origin),r=Z(""),o=Z(!1),i=Z("");async function l(){i.value="",o.value=!0;try{if(!await rp(r.value,s.value)){i.value="远程 URI 或 TOKEN 无效";return}tp(s.value,r.value),n.replace(typeof t.query.redirect=="string"?t.query.redirect:"/")}catch{i.value="远程 URI 格式无效"}finally{o.value=!1}}return(a,u)=>(F(),B("div",hp,[d("form",{class:"w-full max-w-sm bg-white border border-gray-200 rounded-lg p-6 shadow-sm",onSubmit:ut(l,["prevent"])},[u[2]||(u[2]=d("label",{class:"block text-sm font-medium text-gray-700",for:"remote-uri"},"远程 URI",-1)),me(d("input",{id:"remote-uri","onUpdate:modelValue":u[0]||(u[0]=c=>s.value=c),type:"url",required:"",autocomplete:"url",placeholder:"https://sub-store.example.com",class:"mt-2 w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"},null,512),[[De,s.value,void 0,{trim:!0}]]),u[3]||(u[3]=d("label",{class:"block mt-4 text-sm font-medium text-gray-700",for:"token"},"TOKEN",-1)),me(d("input",{id:"token","onUpdate:modelValue":u[1]||(u[1]=c=>r.value=c),type:"password",required:"",autocomplete:"current-password",class:"mt-2 w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"},null,512),[[De,r.value,void 0,{trim:!0}]]),i.value?(F(),B("p",mp,H(i.value),1)):pe("",!0),d("button",{type:"submit",disabled:o.value,class:"mt-6 w-full px-4 py-2 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-700 disabled:opacity-60 disabled:cursor-not-allowed"},H(o.value?"登录中...":"登录"),9,gp)],32)]))}},bp={class:"min-h-screen flex items-center justify-center bg-gray-50"},xp={__name:"NotFound",setup(e){return(t,n)=>(F(),B("div",bp,[...n[0]||(n[0]=[d("div",{class:"text-center"},[d("p",{class:"text-7xl font-bold text-gray-300"},"404"),d("p",{class:"mt-4 text-gray-400"},"Page Not Found")],-1)])]))}};function Fa(e,t){return function(){return e.apply(t,arguments)}}const{toString:vp}=Object.prototype,{getPrototypeOf:On}=Object,{iterator:us,toStringTag:Ma}=Symbol,$s=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),os=(e,t)=>{let n=e;const s=[];for(;n!=null&&n!==Object.prototype;){if(s.indexOf(n)!==-1)return!1;if(s.push(n),$s(n,t))return!0;n=On(n)}return!1},_p=(e,t)=>e!=null&&os(e,t)?e[t]:void 0,vo=(e=>t=>{const n=vp.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),yt=e=>(e=e.toLowerCase(),t=>vo(t)===e),Zs=e=>t=>typeof t===e,{isArray:fn}=Array,Tn=Zs("undefined");function Nn(e){return e!==null&&!Tn(e)&&e.constructor!==null&&!Tn(e.constructor)&&nt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Va=yt("ArrayBuffer");function wp(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Va(e.buffer),t}const Ep=Zs("string"),nt=Zs("function"),Ba=Zs("number"),In=e=>e!==null&&typeof e=="object",Sp=e=>e===!0||e===!1,Es=e=>{if(!In(e))return!1;const t=On(e);return(t===null||t===Object.prototype||On(t)===null)&&!os(e,Ma)&&!os(e,us)},Rp=e=>{if(!In(e)||Nn(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Cp=yt("Date"),Ap=yt("File"),Op=e=>!!(e&&typeof e.uri<"u"),Tp=e=>e&&typeof e.getParts<"u",Pp=yt("Blob"),Np=yt("FileList"),Ip=e=>In(e)&&nt(e.pipe);function kp(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Vi=kp(),Bi=typeof Vi.FormData<"u"?Vi.FormData:void 0,$p=e=>{if(!e)return!1;if(Bi&&e instanceof Bi)return!0;const t=On(e);if(!t||t===Object.prototype||!nt(e.append))return!1;const n=vo(e);return n==="formdata"||n==="object"&&nt(e.toString)&&e.toString()==="[object FormData]"},Dp=yt("URLSearchParams"),[Lp,Up,Fp,Mp]=["ReadableStream","Request","Response","Headers"].map(yt),Vp=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function fs(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),fn(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const on=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ha=e=>!Tn(e)&&e!==on;function qr(...e){const{caseless:t,skipUndefined:n}=Ha(this)&&this||{},s={},r=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const l=t&&typeof i=="string"&&ja(s,i)||i,a=$s(s,l)?s[l]:void 0;Es(a)&&Es(o)?s[l]=qr(a,o):Es(o)?s[l]=qr({},o):fn(o)?s[l]=o.slice():(!n||!Tn(o))&&(s[l]=o)};for(let o=0,i=e.length;o(fs(t,(r,o)=>{n&&nt(r)?Object.defineProperty(e,o,{__proto__:null,value:Fa(r,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),e),jp=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Hp=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},qp=(e,t,n,s)=>{let r,o,i;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)i=r[o],(!s||s(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=n!==!1&&On(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Kp=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Wp=e=>{if(!e)return null;if(fn(e))return e;let t=e.length;if(!Ba(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},zp=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&On(Uint8Array)),Gp=(e,t)=>{const s=(e&&e[us]).call(e);let r;for(;(r=s.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},Jp=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Xp=yt("HTMLFormElement"),Yp=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),{propertyIsEnumerable:Qp}=Object.prototype,Zp=yt("RegExp"),qa=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};fs(n,(r,o)=>{let i;(i=t(r,o,e))!==!1&&(s[o]=i||r)}),Object.defineProperties(e,s)},eh=e=>{qa(e,(t,n)=>{if(nt(e)&&["arguments","caller","callee"].includes(n))return!1;const s=e[n];if(nt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},th=(e,t)=>{const n={},s=r=>{r.forEach(o=>{n[o]=!0})};return fn(e)?s(e):s(String(e).split(t)),n},nh=()=>{},sh=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function rh(e){return!!(e&&nt(e.append)&&e[Ma]==="FormData"&&e[us])}const oh=e=>{const t=new WeakSet,n=s=>{if(In(s)){if(t.has(s))return;if(Nn(s))return s;if(!("toJSON"in s)){t.add(s);const r=fn(s)?[]:{};return fs(s,(o,i)=>{const l=n(o);!Tn(l)&&(r[i]=l)}),t.delete(s),r}}return s};return n(e)},ih=yt("AsyncFunction"),lh=e=>e&&(In(e)||nt(e))&&nt(e.then)&&nt(e.catch),Ka=((e,t)=>e?setImmediate:t?((n,s)=>(on.addEventListener("message",({source:r,data:o})=>{r===on&&o===n&&s.length&&s.shift()()},!1),r=>{s.push(r),on.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",nt(on.postMessage)),ah=typeof queueMicrotask<"u"?queueMicrotask.bind(on):typeof process<"u"&&process.nextTick||Ka,Wa=e=>e!=null&&nt(e[us]),ch=e=>e!=null&&os(e,us)&&Wa(e),b={isArray:fn,isArrayBuffer:Va,isBuffer:Nn,isFormData:$p,isArrayBufferView:wp,isString:Ep,isNumber:Ba,isBoolean:Sp,isObject:In,isPlainObject:Es,isEmptyObject:Rp,isReadableStream:Lp,isRequest:Up,isResponse:Fp,isHeaders:Mp,isUndefined:Tn,isDate:Cp,isFile:Ap,isReactNativeBlob:Op,isReactNative:Tp,isBlob:Pp,isRegExp:Zp,isFunction:nt,isStream:Ip,isURLSearchParams:Dp,isTypedArray:zp,isFileList:Np,forEach:fs,merge:qr,extend:Bp,trim:Vp,stripBOM:jp,inherits:Hp,toFlatObject:qp,kindOf:vo,kindOfTest:yt,endsWith:Kp,toArray:Wp,forEachEntry:Gp,matchAll:Jp,isHTMLForm:Xp,hasOwnProperty:$s,hasOwnProp:$s,hasOwnInPrototypeChain:os,getSafeProp:_p,reduceDescriptors:qa,freezeMethods:eh,toObjectSet:th,toCamelCase:Yp,noop:nh,toFiniteNumber:sh,findKey:ja,global:on,isContextDefined:Ha,isSpecCompliantForm:rh,toJSONObject:oh,isAsyncFn:ih,isThenable:lh,setImmediate:Ka,asap:ah,isIterable:Wa,isSafeIterable:ch},uh=b.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),fh=e=>{const t={};let n,s,r;return e&&e.split(` +`).forEach(function(i){r=i.indexOf(":"),n=i.substring(0,r).trim().toLowerCase(),s=i.substring(r+1).trim(),!(!n||t[n]&&uh[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t};function dh(e){let t=0,n=e.length;for(;tt;){const s=e.charCodeAt(n-1);if(s!==9&&s!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const ph=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),hh=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function _o(e,t){return b.isArray(e)?e.map(n=>_o(n,t)):dh(String(e).replace(t,""))}const mh=e=>_o(e,ph),gh=e=>_o(e,hh);function za(e){const t=Object.create(null);return b.forEach(e.toJSON(),(n,s)=>{t[s]=gh(n)}),t}const ji=Symbol("internals");function Fn(e){return e&&String(e).trim().toLowerCase()}function Ss(e){return e===!1||e==null?e:b.isArray(e)?e.map(Ss):mh(String(e))}function yh(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const bh=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function xr(e,t,n,s,r){if(b.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!b.isString(t)){if(b.isString(s))return t.indexOf(s)!==-1;if(b.isRegExp(s))return s.test(t)}}function xh(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function vh(e,t){const n=b.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{__proto__:null,value:function(r,o,i){return this[s].call(this,t,r,o,i)},configurable:!0})})}let Je=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function o(l,a,u){const c=Fn(a);if(!c)return;const f=b.findKey(r,c);(!f||r[f]===void 0||u===!0||u===void 0&&r[f]!==!1)&&(r[f||a]=Ss(l))}const i=(l,a)=>b.forEach(l,(u,c)=>o(u,c,a));if(b.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(b.isString(t)&&(t=t.trim())&&!bh(t))i(fh(t),n);else if(b.isObject(t)&&b.isSafeIterable(t)){let l=Object.create(null),a,u;for(const c of t){if(!b.isArray(c))throw new TypeError("Object iterator must return a key-value pair");u=c[0],b.hasOwnProp(l,u)?(a=l[u],l[u]=b.isArray(a)?[...a,c[1]]:[a,c[1]]):l[u]=c[1]}i(l,n)}else t!=null&&o(n,t,s);return this}get(t,n){if(t=Fn(t),t){const s=b.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return yh(r);if(b.isFunction(n))return n.call(this,r,s);if(b.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Fn(t),t){const s=b.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||xr(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function o(i){if(i=Fn(i),i){const l=b.findKey(s,i);l&&(!n||xr(s,s[l],l,n))&&(delete s[l],r=!0)}}return b.isArray(t)?t.forEach(o):o(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const o=n[s];(!t||xr(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const n=this,s={};return b.forEach(this,(r,o)=>{const i=b.findKey(s,o);if(i){n[i]=Ss(r),delete n[o];return}const l=t?xh(o):String(o).trim();l!==o&&delete n[o],n[l]=Ss(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return b.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&b.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[ji]=this[ji]={accessors:{}}).accessors,r=this.prototype;function o(i){const l=Fn(i);s[l]||(vh(r,i),s[l]=!0)}return b.isArray(t)?t.forEach(o):o(t),this}};Je.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);b.reduceDescriptors(Je.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});b.freezeMethods(Je);const _h="[REDACTED ****]";function wh(e){if(b.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(b.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function Eh(e,t){const n=new Set(t.map(o=>String(o).toLowerCase())),s=[],r=o=>{if(o===null||typeof o!="object"||b.isBuffer(o))return o;if(s.indexOf(o)!==-1)return;o instanceof Je&&(o=o.toJSON()),s.push(o);let i;if(b.isArray(o))i=[],o.forEach((l,a)=>{const u=r(l);b.isUndefined(u)||(i[a]=u)});else{if(!b.isPlainObject(o)&&wh(o))return s.pop(),o;i=Object.create(null);for(const[l,a]of Object.entries(o)){const u=n.has(l.toLowerCase())?_h:r(a);b.isUndefined(u)||(i[l]=u)}}return s.pop(),i};return r(e)}let z=class Ga extends Error{static from(t,n,s,r,o,i){const l=new Ga(t.message,n||t.code,s,r,o);return Object.defineProperty(l,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,n,s,r,o){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),s&&(this.config=s),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const t=this.config,n=t&&b.hasOwnProp(t,"redact")?t.redact:void 0,s=b.isArray(n)&&n.length>0?Eh(t,n):b.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:s,code:this.code,status:this.status}}};z.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";z.ERR_BAD_OPTION="ERR_BAD_OPTION";z.ECONNABORTED="ECONNABORTED";z.ETIMEDOUT="ETIMEDOUT";z.ECONNREFUSED="ECONNREFUSED";z.ERR_NETWORK="ERR_NETWORK";z.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";z.ERR_DEPRECATED="ERR_DEPRECATED";z.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";z.ERR_BAD_REQUEST="ERR_BAD_REQUEST";z.ERR_CANCELED="ERR_CANCELED";z.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";z.ERR_INVALID_URL="ERR_INVALID_URL";z.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const Sh=null,Ja=100;function Kr(e){return b.isPlainObject(e)||b.isArray(e)}function Xa(e){return b.endsWith(e,"[]")?e.slice(0,-2):e}function vr(e,t,n){return e?e.concat(t).map(function(r,o){return r=Xa(r),!n&&o?"["+r+"]":r}).join(n?".":""):t}function Rh(e){return b.isArray(e)&&!e.some(Kr)}const Ch=b.toFlatObject(b,{},null,function(t){return/^is[A-Z]/.test(t)});function er(e,t,n){if(!b.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=b.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,A){return!b.isUndefined(A[x])});const s=n.metaTokens,r=n.visitor||S,o=n.dots,i=n.indexes,l=n.Blob||typeof Blob<"u"&&Blob,a=n.maxDepth===void 0?Ja:n.maxDepth,u=l&&b.isSpecCompliantForm(t),c=[];if(!b.isFunction(r))throw new TypeError("visitor must be a function");function f(v){if(v===null)return"";if(b.isDate(v))return v.toISOString();if(b.isBoolean(v))return v.toString();if(!u&&b.isBlob(v))throw new z("Blob is not supported. Use a Buffer instead.");if(b.isArrayBuffer(v)||b.isTypedArray(v)){if(u&&typeof l=="function")return new l([v]);if(typeof Buffer<"u")return Buffer.from(v);throw new z("Blob is not supported. Use a Buffer instead.",z.ERR_NOT_SUPPORT)}return v}function h(v){if(v>a)throw new z("Object is too deeply nested ("+v+" levels). Max depth: "+a,z.ERR_FORM_DATA_DEPTH_EXCEEDED)}function m(v,x){if(a===1/0)return JSON.stringify(v);const A=[];return JSON.stringify(v,function(O,$){if(!b.isObject($))return $;for(;A.length&&A[A.length-1]!==this;)A.pop();return A.push($),h(x+A.length-1),$})}function S(v,x,A){let R=v;if(b.isReactNative(t)&&b.isReactNativeBlob(v))return t.append(vr(A,x,o),f(v)),!1;if(v&&!A&&typeof v=="object"){if(b.endsWith(x,"{}"))x=s?x:x.slice(0,-2),v=m(v,1);else if(b.isArray(v)&&Rh(v)||(b.isFileList(v)||b.endsWith(x,"[]"))&&(R=b.toArray(v)))return x=Xa(x),R.forEach(function($,U){!(b.isUndefined($)||$===null)&&t.append(i===!0?vr([x],U,o):i===null?x:x+"[]",f($))}),!1}return Kr(v)?!0:(t.append(vr(A,x,o),f(v)),!1)}const C=Object.assign(Ch,{defaultVisitor:S,convertValue:f,isVisitable:Kr});function P(v,x,A=0){if(!b.isUndefined(v)){if(h(A),c.indexOf(v)!==-1)throw new Error("Circular reference detected in "+x.join("."));c.push(v),b.forEach(v,function(O,$){(!(b.isUndefined(O)||O===null)&&r.call(t,O,b.isString($)?$.trim():$,x,C))===!0&&P(O,x?x.concat($):[$],A+1)}),c.pop()}}if(!b.isObject(e))throw new TypeError("data must be an object");return P(e),t}function Hi(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(s){return t[s]})}function wo(e,t){this._pairs=[],e&&er(e,this,t)}const Ya=wo.prototype;Ya.append=function(t,n){this._pairs.push([t,n])};Ya.toString=function(t){const n=t?s=>t.call(this,s,Hi):Hi;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function Ah(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Qa(e,t,n){if(!t)return e;e=e||"";const s=b.isFunction(n)?{serialize:n}:n,r=b.getSafeProp(s,"encode")||Ah,o=b.getSafeProp(s,"serialize");let i;if(o?i=o(t,s):i=b.isURLSearchParams(t)?t.toString():new wo(t,s).toString(r),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class qi{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){b.forEach(this.handlers,function(s){s!==null&&t(s)})}}const Eo={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},Oh=typeof URLSearchParams<"u"?URLSearchParams:wo,Th=typeof FormData<"u"?FormData:null,Ph=typeof Blob<"u"?Blob:null,Nh={isBrowser:!0,classes:{URLSearchParams:Oh,FormData:Th,Blob:Ph},protocols:["http","https","file","blob","url","data"]},So=typeof window<"u"&&typeof document<"u",Wr=typeof navigator=="object"&&navigator||void 0,Ih=So&&(!Wr||["ReactNative","NativeScript","NS"].indexOf(Wr.product)<0),kh=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",$h=So&&window.location.href||"http://localhost",Dh=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:So,hasStandardBrowserEnv:Ih,hasStandardBrowserWebWorkerEnv:kh,navigator:Wr,origin:$h},Symbol.toStringTag,{value:"Module"})),Be={...Dh,...Nh};function Lh(e,t){return er(e,new Be.classes.URLSearchParams,{visitor:function(n,s,r,o){return Be.isNode&&b.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}const Ki=Ja;function Za(e){if(e>Ki)throw new z("FormData field is too deeply nested ("+e+" levels). Max depth: "+Ki,z.ERR_FORM_DATA_DEPTH_EXCEEDED)}function Uh(e){const t=[],n=/\w+|\[(\w*)]/g;let s;for(;(s=n.exec(e))!==null;)Za(t.length),t.push(s[0]==="[]"?"":s[1]||s[0]);return t}function Fh(e){const t={},n=Object.keys(e);let s;const r=n.length;let o;for(s=0;s=n.length;return i=!i&&b.isArray(r)?r.length:i,a?(b.hasOwnProp(r,i)?r[i]=b.isArray(r[i])?r[i].concat(s):[r[i],s]:r[i]=s,!l):((!b.hasOwnProp(r,i)||!b.isObject(r[i]))&&(r[i]=[]),t(n,s,r[i],o)&&b.isArray(r[i])&&(r[i]=Fh(r[i])),!l)}if(b.isFormData(e)&&b.isFunction(e.entries)){const n={};return b.forEachEntry(e,(s,r)=>{t(Uh(s),r,n,0)}),n}return null}const hn=(e,t)=>e!=null&&b.hasOwnProp(e,t)?e[t]:void 0;function Mh(e,t,n){if(b.isString(e))try{return(t||JSON.parse)(e),b.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const ds={transitional:Eo,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,o=b.isObject(t);if(o&&b.isHTMLForm(t)&&(t=new FormData(t)),b.isFormData(t))return r?JSON.stringify(ec(t)):t;if(b.isArrayBuffer(t)||b.isBuffer(t)||b.isStream(t)||b.isFile(t)||b.isBlob(t)||b.isReadableStream(t))return t;if(b.isArrayBufferView(t))return t.buffer;if(b.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){const a=hn(this,"formSerializer");if(s.indexOf("application/x-www-form-urlencoded")>-1)return Lh(t,a).toString();if((l=b.isFileList(t))||s.indexOf("multipart/form-data")>-1){const u=hn(this,"env"),c=u&&u.FormData;return er(l?{"files[]":t}:t,c&&new c,a)}}return o||r?(n.setContentType("application/json",!1),Mh(t)):t}],transformResponse:[function(t){const n=hn(this,"transitional")||ds.transitional,s=n&&n.forcedJSONParsing,r=hn(this,"responseType"),o=r==="json";if(b.isResponse(t)||b.isReadableStream(t))return t;if(t&&b.isString(t)&&(s&&!r||o)){const l=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t,hn(this,"parseReviver"))}catch(a){if(l)throw a.name==="SyntaxError"?z.from(a,z.ERR_BAD_RESPONSE,this,null,hn(this,"response")):a}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Be.classes.FormData,Blob:Be.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};b.forEach(["delete","get","head","post","put","patch","query"],e=>{ds.headers[e]={}});function _r(e,t){const n=this||ds,s=t||n,r=Je.from(s.headers);let o=s.data;return b.forEach(e,function(l){o=l.call(n,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function tc(e){return!!(e&&e.__CANCEL__)}let ps=class extends z{constructor(t,n,s){super(t??"canceled",z.ERR_CANCELED,n,s),this.name="CanceledError",this.__CANCEL__=!0}};function nc(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new z("Request failed with status code "+n.status,n.status>=400&&n.status<500?z.ERR_BAD_REQUEST:z.ERR_BAD_RESPONSE,n.config,n.request,n))}function Vh(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}function Bh(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,o=0,i;return t=t!==void 0?t:1e3,function(a){const u=Date.now(),c=s[o];i||(i=u),n[r]=a,s[r]=u;let f=o,h=0;for(;f!==r;)h+=n[f++],f=f%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),u-i{n=c,r=null,o&&(clearTimeout(o),o=null),e(...u)};return[(...u)=>{const c=Date.now(),f=c-n;f>=s?i(u,c):(r=u,o||(o=setTimeout(()=>{o=null,i(r)},s-f)))},()=>r&&i(r)]}const Ds=(e,t,n=3)=>{let s=0;const r=Bh(50,250);return jh(o=>{if(!o||typeof o.loaded!="number")return;const i=o.loaded,l=o.lengthComputable?o.total:void 0,a=l!=null?Math.min(i,l):i,u=Math.max(0,a-s),c=r(u);s=Math.max(s,a);const f={loaded:a,total:l,progress:l?a/l:void 0,bytes:u,rate:c||void 0,estimated:c&&l?(l-a)/c:void 0,event:o,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(f)},n)},Wi=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},zi=e=>(...t)=>b.asap(()=>e(...t)),Hh=Be.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Be.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Be.origin),Be.navigator&&/(msie|trident)/i.test(Be.navigator.userAgent)):()=>!0,qh=Be.hasStandardBrowserEnv?{write(e,t,n,s,r,o,i){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];b.isNumber(n)&&l.push(`expires=${new Date(n).toUTCString()}`),b.isString(s)&&l.push(`path=${s}`),b.isString(r)&&l.push(`domain=${r}`),o===!0&&l.push("secure"),b.isString(i)&&l.push(`SameSite=${i}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;ne instanceof Je?{...e}:e;function dn(e,t){e=e||{},t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function s(c,f,h,m){return b.isPlainObject(c)&&b.isPlainObject(f)?b.merge.call({caseless:m},c,f):b.isPlainObject(f)?b.merge({},f):b.isArray(f)?f.slice():f}function r(c,f,h,m){if(b.isUndefined(f)){if(!b.isUndefined(c))return s(void 0,c,h,m)}else return s(c,f,h,m)}function o(c,f){if(!b.isUndefined(f))return s(void 0,f)}function i(c,f){if(b.isUndefined(f)){if(!b.isUndefined(c))return s(void 0,c)}else return s(void 0,f)}function l(c){const f=b.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!b.isUndefined(f))if(b.isPlainObject(f)){if(b.hasOwnProp(f,c))return f[c]}else return;const h=b.hasOwnProp(e,"transitional")?e.transitional:void 0;if(b.isPlainObject(h)&&b.hasOwnProp(h,c))return h[c]}function a(c,f,h){if(b.hasOwnProp(t,h))return s(c,f);if(b.hasOwnProp(e,h))return s(void 0,c)}const u={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:a,headers:(c,f,h)=>r(Ji(c),Ji(f),h,!0)};return b.forEach(Object.keys({...e,...t}),function(f){if(f==="__proto__"||f==="constructor"||f==="prototype")return;const h=b.hasOwnProp(u,f)?u[f]:r,m=b.hasOwnProp(e,f)?e[f]:void 0,S=b.hasOwnProp(t,f)?t[f]:void 0,C=h(m,S,f);b.isUndefined(C)&&h!==a||(n[f]=C)}),b.hasOwnProp(t,"validateStatus")&&b.isUndefined(t.validateStatus)&&l("validateStatusUndefinedResolves")===!1&&(b.hasOwnProp(e,"validateStatus")?n.validateStatus=s(void 0,e.validateStatus):delete n.validateStatus),n}const Yh=["content-type","content-length"];function Qh(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([s,r])=>{Yh.includes(s.toLowerCase())&&e.set(s,r)})}const Zh=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function rc(e){const t=dn({},e),n=h=>b.hasOwnProp(t,h)?t[h]:void 0,s=n("data");let r=n("withXSRFToken");const o=n("xsrfHeaderName"),i=n("xsrfCookieName");let l=n("headers");const a=n("auth"),u=n("baseURL"),c=n("allowAbsoluteUrls"),f=n("url");if(t.headers=l=Je.from(l),t.url=Qa(sc(u,f,c,t),n("params"),n("paramsSerializer")),a){const h=b.getSafeProp(a,"username")||"",m=b.getSafeProp(a,"password")||"";try{l.set("Authorization","Basic "+btoa(h+":"+(m?Zh(m):"")))}catch(S){throw z.from(S,z.ERR_BAD_OPTION_VALUE,e)}}if(b.isFormData(s)&&(Be.hasStandardBrowserEnv||Be.hasStandardBrowserWebWorkerEnv||b.isReactNative(s)?l.setContentType(void 0):b.isFunction(s.getHeaders)&&Qh(l,s.getHeaders(),n("formDataHeaderPolicy"))),Be.hasStandardBrowserEnv&&(b.isFunction(r)&&(r=r(t)),r===!0||r==null&&Hh(t.url))){const m=o&&i&&qh.read(i);m&&l.set(o,m)}return t}const em=typeof XMLHttpRequest<"u",tm=em&&function(e){return new Promise(function(n,s){const r=rc(e);let o=r.data;const i=Je.from(r.headers).normalize();let{responseType:l,onUploadProgress:a,onDownloadProgress:u}=r,c,f,h,m,S;function C(){m&&m(),S&&S(),r.cancelToken&&r.cancelToken.unsubscribe(c),r.signal&&r.signal.removeEventListener("abort",c)}let P=new XMLHttpRequest;P.open(r.method.toUpperCase(),r.url,!0),P.timeout=r.timeout;function v(){if(!P)return;const A=Je.from("getAllResponseHeaders"in P&&P.getAllResponseHeaders()),O={data:!l||l==="text"||l==="json"?P.responseText:P.response,status:P.status,statusText:P.statusText,headers:A,config:e,request:P};nc(function(U){n(U),C()},function(U){s(U),C()},O),P=null}"onloadend"in P?P.onloadend=v:P.onreadystatechange=function(){!P||P.readyState!==4||P.status===0&&!(P.responseURL&&P.responseURL.startsWith("file:"))||setTimeout(v)},P.onabort=function(){P&&(s(new z("Request aborted",z.ECONNABORTED,e,P)),C(),P=null)},P.onerror=function(R){const O=R&&R.message?R.message:"Network Error",$=new z(O,z.ERR_NETWORK,e,P);$.event=R||null,s($),C(),P=null},P.ontimeout=function(){let R=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const O=r.transitional||Eo;r.timeoutErrorMessage&&(R=r.timeoutErrorMessage),s(new z(R,O.clarifyTimeoutError?z.ETIMEDOUT:z.ECONNABORTED,e,P)),C(),P=null},o===void 0&&i.setContentType(null),"setRequestHeader"in P&&b.forEach(za(i),function(R,O){P.setRequestHeader(O,R)}),b.isUndefined(r.withCredentials)||(P.withCredentials=!!r.withCredentials),l&&l!=="json"&&(P.responseType=r.responseType),u&&([h,S]=Ds(u,!0),P.addEventListener("progress",h)),a&&P.upload&&([f,m]=Ds(a),P.upload.addEventListener("progress",f),P.upload.addEventListener("loadend",m)),(r.cancelToken||r.signal)&&(c=A=>{P&&(s(!A||A.type?new ps(null,e,P):A),P.abort(),C(),P=null)},r.cancelToken&&r.cancelToken.subscribe(c),r.signal&&(r.signal.aborted?c():r.signal.addEventListener("abort",c)));const x=Vh(r.url);if(x&&!Be.protocols.includes(x)){s(new z("Unsupported protocol "+x+":",z.ERR_BAD_REQUEST,e)),C();return}P.send(o||null)})},nm=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let s=!1;const r=function(a){if(!s){s=!0,i();const u=a instanceof Error?a:this.reason;n.abort(u instanceof z?u:new ps(u instanceof Error?u.message:u))}};let o=t&&setTimeout(()=>{o=null,r(new z(`timeout of ${t}ms exceeded`,z.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(r):a.removeEventListener("abort",r)}),e=null)};e.forEach(a=>a.addEventListener("abort",r,{once:!0}));const{signal:l}=n;return l.unsubscribe=()=>b.asap(i),l},sm=function*(e,t){let n=e.byteLength;if(n{const r=rm(e,t);let o=0,i,l=a=>{i||(i=!0,s&&s(a))};return new ReadableStream({async pull(a){try{const{done:u,value:c}=await r.next();if(u){l(),a.close();return}let f=c.byteLength;if(n){let h=o+=f;n(h)}a.enqueue(new Uint8Array(c))}catch(u){throw l(u),u}},cancel(a){return l(a),r.return()}},{highWaterMark:2})},Ls=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,im=(e,t,n)=>t+2m>=2&&s.charCodeAt(m-2)===37&&s.charCodeAt(m-1)===51&&(s.charCodeAt(m)===68||s.charCodeAt(m)===100);u>=0&&(s.charCodeAt(u)===61?(a++,u--):c(u)&&(a++,u-=3)),a===1&&u>=0&&(s.charCodeAt(u)===61||c(u))&&a++;const h=Math.floor(i/4)*3-(a||0);return h>0?h:0}let o=0;for(let i=0,l=s.length;i=55296&&a<=56319&&i+1=56320&&u<=57343?(o+=4,i++):o+=3}else o+=3}return o}const Ro="1.18.1",Yi=64*1024,{isFunction:bs}=b,am=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),Qi=e=>{if(!b.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Zi=(e,...t)=>{try{return!!e(...t)}catch{return!1}},cm=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},um=e=>{const t=b.global!==void 0&&b.global!==null?b.global:globalThis,{ReadableStream:n,TextEncoder:s}=t;e=b.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:r,Request:o,Response:i}=e,l=r?bs(r):typeof fetch=="function",a=bs(o),u=bs(i);if(!l)return!1;const c=l&&bs(n),f=l&&(typeof s=="function"?(v=>x=>v.encode(x))(new s):async v=>new Uint8Array(await new o(v).arrayBuffer())),h=a&&c&&Zi(()=>{let v=!1;const x=new o(Be.origin,{body:new n,method:"POST",get duplex(){return v=!0,"half"}}),A=x.headers.has("Content-Type");return x.body!=null&&x.body.cancel(),v&&!A}),m=u&&c&&Zi(()=>b.isReadableStream(new i("").body)),S={stream:m&&(v=>v.body)};l&&["text","arrayBuffer","blob","formData","stream"].forEach(v=>{!S[v]&&(S[v]=(x,A)=>{let R=x&&x[v];if(R)return R.call(x);throw new z(`Response type '${v}' is not supported`,z.ERR_NOT_SUPPORT,A)})});const C=async v=>{if(v==null)return 0;if(b.isBlob(v))return v.size;if(b.isSpecCompliantForm(v))return(await new o(Be.origin,{method:"POST",body:v}).arrayBuffer()).byteLength;if(b.isArrayBufferView(v)||b.isArrayBuffer(v))return v.byteLength;if(b.isURLSearchParams(v)&&(v=v+""),b.isString(v))return(await f(v)).byteLength},P=async(v,x)=>{const A=b.toFiniteNumber(v.getContentLength());return A??C(x)};return async v=>{let{url:x,method:A,data:R,signal:O,cancelToken:$,timeout:U,onDownloadProgress:ae,onUploadProgress:Y,responseType:se,headers:oe,withCredentials:W="same-origin",fetchOptions:ce,maxContentLength:fe,maxBodyLength:Pe}=rc(v);const be=b.isNumber(fe)&&fe>-1,D=b.isNumber(Pe)&&Pe>-1,I=w=>b.hasOwnProp(v,w)?v[w]:void 0;let J=r||fetch;se=se?(se+"").toLowerCase():"text";let ue=nm([O,$&&$.toAbortSignal()],U),re=null;const de=ue&&ue.unsubscribe&&(()=>{ue.unsubscribe()});let Ne,ge=null;const k=()=>new z("Request body larger than maxBodyLength limit",z.ERR_BAD_REQUEST,v,re);try{let w;const y=I("auth");if(y){const E=b.getSafeProp(y,"username")||"",T=b.getSafeProp(y,"password")||"";w={username:E,password:T}}if(cm(x)){const E=new URL(x,Be.origin);if(!w&&(E.username||E.password)){const T=Qi(E.username),K=Qi(E.password);w={username:T,password:K}}(E.username||E.password)&&(E.username="",E.password="",x=E.href)}if(w&&(oe.delete("authorization"),oe.set("Authorization","Basic "+btoa(am((w.username||"")+":"+(w.password||""))))),be&&typeof x=="string"&&x.startsWith("data:")&&lm(x)>fe)throw new z("maxContentLength size of "+fe+" exceeded",z.ERR_BAD_RESPONSE,v,re);if(D&&A!=="get"&&A!=="head"){const E=await C(R);if(typeof E=="number"&&isFinite(E)&&(Ne=E,E>Pe))throw k()}const V=D&&(b.isReadableStream(R)||b.isStream(R)),M=(E,T,K)=>Xi(E,Yi,j=>{if(D&&j>Pe)throw ge=k();T&&T(j)},K);if(h&&A!=="get"&&A!=="head"&&(Y||V)){if(Ne=Ne??await P(oe,R),Ne!==0||V){let E=new o(x,{method:"POST",body:R,duplex:"half"}),T;if(b.isFormData(R)&&(T=E.headers.get("content-type"))&&oe.setContentType(T),E.body){const[K,j]=Y&&Wi(Ne,Ds(zi(Y)))||[];R=M(E.body,K,j)}}}else if(V&&!a&&c&&A!=="get"&&A!=="head")R=M(R);else if(V&&a&&!h&&A!=="get"&&A!=="head")throw new z("Stream request bodies are not supported by the current fetch implementation",z.ERR_NOT_SUPPORT,v,re);b.isString(W)||(W=W?"include":"omit");const X=a&&"credentials"in o.prototype;if(b.isFormData(R)){const E=oe.getContentType();E&&/^multipart\/form-data/i.test(E)&&!/boundary=/i.test(E)&&oe.delete("content-type")}oe.set("User-Agent","axios/"+Ro,!1);const Q={...ce,signal:ue,method:A.toUpperCase(),headers:za(oe.normalize()),body:R,duplex:"half",credentials:X?W:void 0};re=a&&new o(x,Q);let p=await(a?J(re,ce):J(x,Q));const g=Je.from(p.headers);if(be){const E=b.toFiniteNumber(g.getContentLength());if(E!=null&&E>fe)throw new z("maxContentLength size of "+fe+" exceeded",z.ERR_BAD_RESPONSE,v,re)}const _=m&&(se==="stream"||se==="response");if(m&&p.body&&(ae||be||_&&de)){const E={};["status","statusText","headers"].forEach(ee=>{E[ee]=p[ee]});const T=b.toFiniteNumber(g.getContentLength()),[K,j]=ae&&Wi(T,Ds(zi(ae),!0))||[];let q=0;const L=ee=>{if(be&&(q=ee,q>fe))throw new z("maxContentLength size of "+fe+" exceeded",z.ERR_BAD_RESPONSE,v,re);K&&K(ee)};p=new i(Xi(p.body,Yi,L,()=>{j&&j(),de&&de()}),E)}se=se||"text";let N=await S[b.findKey(S,se)||"text"](p,v);if(be&&!m&&!_){let E;if(N!=null&&(typeof N.byteLength=="number"?E=N.byteLength:typeof N.size=="number"?E=N.size:typeof N=="string"&&(E=typeof s=="function"?new s().encode(N).byteLength:N.length)),typeof E=="number"&&E>fe)throw new z("maxContentLength size of "+fe+" exceeded",z.ERR_BAD_RESPONSE,v,re)}return!_&&de&&de(),await new Promise((E,T)=>{nc(E,T,{data:N,headers:Je.from(p.headers),status:p.status,statusText:p.statusText,config:v,request:re})})}catch(w){if(de&&de(),ue&&ue.aborted&&ue.reason instanceof z){const y=ue.reason;throw y.config=v,re&&(y.request=re),w!==y&&Object.defineProperty(y,"cause",{__proto__:null,value:w,writable:!0,enumerable:!1,configurable:!0}),y}if(ge)throw re&&!ge.request&&(ge.request=re),ge;if(w instanceof z)throw re&&!w.request&&(w.request=re),w;if(w&&w.name==="TypeError"&&/Load failed|fetch/i.test(w.message)){const y=new z("Network Error",z.ERR_NETWORK,v,re,w&&w.response);throw Object.defineProperty(y,"cause",{__proto__:null,value:w.cause||w,writable:!0,enumerable:!1,configurable:!0}),y}throw z.from(w,w&&w.code,v,re,w&&w.response)}}},fm=new Map,oc=e=>{let t=e&&e.env||{};const{fetch:n,Request:s,Response:r}=t,o=[s,r,n];let i=o.length,l=i,a,u,c=fm;for(;l--;)a=o[l],u=c.get(a),u===void 0&&c.set(a,u=l?new Map:um(t)),c=u;return u};oc();const Co={http:Sh,xhr:tm,fetch:{get:oc}};b.forEach(Co,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const el=e=>`- ${e}`,dm=e=>b.isFunction(e)||e===null||e===!1;function pm(e,t){e=b.isArray(e)?e:[e];const{length:n}=e;let s,r;const o={};for(let i=0;i`adapter ${a} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=n?i.length>1?`since : +`+i.map(el).join(` +`):" "+el(i[0]):"as no adapter specified";throw new z("There is no suitable adapter to dispatch the request "+l,z.ERR_NOT_SUPPORT)}return r}const ic={getAdapter:pm,adapters:Co};function wr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ps(null,e)}function tl(e){return wr(e),e.headers=Je.from(e.headers),e.data=_r.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ic.getAdapter(e.adapter||ds.adapter,e)(e).then(function(s){wr(e),e.response=s;try{s.data=_r.call(e,e.transformResponse,s)}finally{delete e.response}return s.headers=Je.from(s.headers),s},function(s){if(!tc(s)&&(wr(e),s&&s.response)){e.response=s.response;try{s.response.data=_r.call(e,e.transformResponse,s.response)}finally{delete e.response}s.response.headers=Je.from(s.response.headers)}return Promise.reject(s)})}const tr={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{tr[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const nl={};tr.transitional=function(t,n,s){function r(o,i){return"[Axios v"+Ro+"] Transitional option '"+o+"'"+i+(s?". "+s:"")}return(o,i,l)=>{if(t===!1)throw new z(r(i," has been removed"+(n?" in "+n:"")),z.ERR_DEPRECATED);return n&&!nl[i]&&(nl[i]=!0,console.warn(r(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,l):!0}};tr.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function hm(e,t,n){if(typeof e!="object"||e===null)throw new z("options must be an object",z.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const o=s[r],i=Object.prototype.hasOwnProperty.call(t,o)?t[o]:void 0;if(i){const l=e[o],a=l===void 0||i(l,o,e);if(a!==!0)throw new z("option "+o+" must be "+a,z.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new z("Unknown option "+o,z.ERR_BAD_OPTION)}}const Rs={assertOptions:hm,validators:tr},qe=Rs.validators;let cn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new qi,response:new qi}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=(()=>{if(!r.stack)return"";const i=r.stack.indexOf(` +`);return i===-1?"":r.stack.slice(i+1)})();try{if(!s.stack)s.stack=o;else if(o){const i=o.indexOf(` +`),l=i===-1?-1:o.indexOf(` +`,i+1),a=l===-1?"":o.slice(l+1);String(s.stack).endsWith(a)||(s.stack+=` +`+o)}}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=dn(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:o}=n;s!==void 0&&Rs.assertOptions(s,{silentJSONParsing:qe.transitional(qe.boolean),forcedJSONParsing:qe.transitional(qe.boolean),clarifyTimeoutError:qe.transitional(qe.boolean),legacyInterceptorReqResOrdering:qe.transitional(qe.boolean),advertiseZstdAcceptEncoding:qe.transitional(qe.boolean),validateStatusUndefinedResolves:qe.transitional(qe.boolean)},!1),r!=null&&(b.isFunction(r)?n.paramsSerializer={serialize:r}:Rs.assertOptions(r,{encode:qe.function,serialize:qe.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Rs.assertOptions(n,{baseUrl:qe.spelling("baseURL"),withXsrfToken:qe.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&b.merge(o.common,o[n.method]);o&&b.forEach(["delete","get","head","post","put","patch","query","common"],S=>{delete o[S]}),n.headers=Je.concat(i,o);const l=[];let a=!0;this.interceptors.request.forEach(function(C){if(typeof C.runWhen=="function"&&C.runWhen(n)===!1)return;a=a&&C.synchronous;const P=n.transitional||Eo;P&&P.legacyInterceptorReqResOrdering?l.unshift(C.fulfilled,C.rejected):l.push(C.fulfilled,C.rejected)});const u=[];this.interceptors.response.forEach(function(C){u.push(C.fulfilled,C.rejected)});let c,f=0,h;if(!a){const S=[tl.bind(this),void 0];for(S.unshift(...l),S.push(...u),h=S.length,c=Promise.resolve(n);f{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](r);s._listeners=null}),this.promise.then=r=>{let o;const i=new Promise(l=>{s.subscribe(l),o=l}).then(r);return i.cancel=function(){s.unsubscribe(o)},i},t(function(o,i,l){s.reason||(s.reason=new ps(o,i,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new lc(function(r){t=r}),cancel:t}}};function gm(e){return function(n){return e.apply(null,n)}}function ym(e){return b.isObject(e)&&e.isAxiosError===!0}const zr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(zr).forEach(([e,t])=>{zr[t]=e});function ac(e){const t=new cn(e),n=Fa(cn.prototype.request,t);return b.extend(n,cn.prototype,t,{allOwnKeys:!0}),b.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return ac(dn(e,r))},n}const ke=ac(ds);ke.Axios=cn;ke.CanceledError=ps;ke.CancelToken=mm;ke.isCancel=tc;ke.VERSION=Ro;ke.toFormData=er;ke.AxiosError=z;ke.Cancel=ke.CanceledError;ke.all=function(t){return Promise.all(t)};ke.spread=gm;ke.isAxiosError=ym;ke.mergeConfig=dn;ke.AxiosHeaders=Je;ke.formToJSON=e=>ec(b.isHTMLForm(e)?new FormData(e):e);ke.getAdapter=ic.getAdapter;ke.HttpStatusCode=zr;ke.default=ke;const{Axios:h0,AxiosError:m0,CanceledError:g0,isCancel:y0,CancelToken:b0,VERSION:x0,all:v0,Cancel:_0,isAxiosError:w0,spread:E0,toFormData:S0,AxiosHeaders:R0,HttpStatusCode:C0,formToJSON:A0,getAdapter:O0,mergeConfig:T0,create:P0}=ke,ye=ke.create({timeout:3e4});ye.interceptors.request.use(e=>{e.baseURL=`${ip()}/api`;const t=op();return t&&(e.headers.Authorization=`Bearer ${t}`),e});ye.interceptors.response.use(e=>e.data,e=>{var n,s,r,o;((n=e.response)==null?void 0:n.status)===401&&sp();const t=((o=(r=(s=e.response)==null?void 0:s.data)==null?void 0:r.error)==null?void 0:o.message)||e.message||"Request failed";return Promise.reject(new Error(t))});const bm=()=>ye.get("/env"),xm=()=>ye.get("/settings"),vm=e=>ye.patch("/settings",e),_m=()=>ye.get("/storage"),wm=e=>ye.post("/storage",e),Ao=()=>ye.get("/sources"),Em=e=>ye.post("/sources",e),Sm=(e,t)=>ye.patch(`/sources/${e}`,t),Rm=e=>ye.delete(`/sources/${e}`),cc=()=>ye.get("/collections"),Cm=e=>ye.post("/collections",e),Am=(e,t)=>ye.patch(`/collections/${e}`,t),Om=e=>ye.delete(`/collections/${e}`),Oo=()=>ye.get("/templates"),Tm=e=>ye.post("/templates",e),Pm=(e,t)=>ye.patch(`/templates/${e}`,t),Nm=e=>ye.delete(`/templates/${e}`),Im=()=>ye.get("/recycle-bin"),km=e=>ye.delete(`/recycle-bin/${e}`),$m=e=>ye.post(`/recycle-bin/${e}/restore`),Er=e=>ye.post("/preview/source",e),Sr=e=>ye.post("/preview/collection",e),Dm=(e,t)=>ye.get(`/link/source/${e}`,{params:{}}),Lm=(e,t)=>ye.get(`/link/collection/${e}`,{params:{}}),Um=e=>ye.get(`/source/flow/${e}`),Fm=e=>ye.post("/proxy/parse",e),Mm=e=>ye.post("/rule/parse",e),uc=e=>ye.post("/utils/proxy-uri",e),Vm=e=>ye.post("/utils/node-info",{server:e}),fc=e=>ye.post("/utils/egress-info",e),Bm={class:"grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6"},jm={class:"text-sm text-gray-500"},Hm={class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},qm={class:"bg-white rounded-lg p-4 shadow-sm border"},Km={key:0,class:"space-y-1.5 text-sm"},Wm={class:"flex justify-between"},zm={class:"flex justify-between"},Gm={class:"flex justify-between"},Jm={class:"flex justify-between"},Xm={class:"flex justify-between"},Ym={key:1,class:"text-gray-400 text-sm"},Qm={class:"bg-white rounded-lg p-4 shadow-sm border"},Zm={key:0,class:"flex flex-wrap gap-2"},eg={__name:"Dashboard",setup(e){const t=Z(null),n=Z([]),s=Z([]),r=Z([]),o=tt(()=>[{label:"订阅源",value:n.value.length,color:"text-blue-600"},{label:"合集",value:s.value.length,color:"text-purple-600"},{label:"模板",value:r.value.length,color:"text-green-600"}]),i={buildTimeScripts:"脚本引擎",proxyConversion:"代理转换",ruleConversion:"规则转换",recycleBin:"回收站",nodeInfo:"节点信息",surgeMac:"Surge Mac"};return Xt(async()=>{try{const[l,a,u,c]=await Promise.all([bm(),Ao(),cc(),Oo()]);t.value=l.data,n.value=a.data||[],s.value=u.data||[],r.value=c.data||[]}catch(l){console.error("Failed to load dashboard",l)}}),(l,a)=>{var u;return F(),B("div",null,[a[7]||(a[7]=d("h2",{class:"text-xl font-bold mb-5"},"概览",-1)),d("div",Bm,[(F(!0),B(ve,null,Fe(o.value,c=>(F(),B("div",{key:c.label,class:"bg-white rounded-lg p-4 shadow-sm border"},[d("p",jm,H(c.label),1),d("p",{class:je(["text-2xl font-bold mt-1",c.color])},H(c.value),3)]))),128))]),d("div",Hm,[d("div",qm,[a[5]||(a[5]=d("h3",{class:"font-semibold mb-3"},"环境信息",-1)),t.value?(F(),B("div",Km,[d("div",Wm,[a[0]||(a[0]=d("span",{class:"text-gray-500"},"应用",-1)),d("span",null,H(t.value.app),1)]),d("div",zm,[a[1]||(a[1]=d("span",{class:"text-gray-500"},"后端",-1)),d("span",null,H(t.value.backend),1)]),d("div",Gm,[a[2]||(a[2]=d("span",{class:"text-gray-500"},"版本",-1)),d("span",null,H(t.value.version),1)]),d("div",Jm,[a[3]||(a[3]=d("span",{class:"text-gray-500"},"运行时",-1)),d("span",null,H(t.value.runtime),1)]),d("div",Xm,[a[4]||(a[4]=d("span",{class:"text-gray-500"},"存储",-1)),d("span",null,H(t.value.storage),1)])])):(F(),B("div",Ym,"加载中..."))]),d("div",Qm,[a[6]||(a[6]=d("h3",{class:"font-semibold mb-3"},"功能特性",-1)),(u=t.value)!=null&&u.feature?(F(),B("div",Zm,[(F(!0),B(ve,null,Fe(t.value.feature,(c,f)=>(F(),B("span",{key:f,class:je(["px-2 py-1 rounded text-xs",c?"bg-green-100 text-green-700":"bg-gray-100 text-gray-500"])},H(i[f]||f)+": "+H(c?"✓":"✗"),3))),128))])):pe("",!0)])])])}}},tg={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4"},ng={class:"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[85vh] flex flex-col"},sg={class:"flex items-center justify-between px-6 py-3 border-b"},rg={class:"text-base font-semibold text-gray-900"},og={class:"flex-1 overflow-y-auto px-6 py-4"},ig={key:0,class:"px-6 py-3 border-t flex justify-end gap-2"},Us={__name:"Modal",props:{modelValue:Boolean,title:{type:String,default:""}},emits:["update:modelValue"],setup(e){return(t,n)=>(F(),un(Ml,{to:"body"},[e.modelValue?(F(),B("div",tg,[d("div",{class:"absolute inset-0 bg-black/40",onClick:n[0]||(n[0]=s=>t.$emit("update:modelValue",!1))}),d("div",ng,[d("div",sg,[d("h3",rg,H(e.title),1),d("button",{class:"text-gray-400 hover:text-gray-600 text-xl",onClick:n[1]||(n[1]=s=>t.$emit("update:modelValue",!1))},"×")]),d("div",og,[qo(t.$slots,"default")]),t.$slots.footer?(F(),B("div",ig,[qo(t.$slots,"footer")])):pe("",!0)])])):pe("",!0)]))}},lg={key:0,class:"fixed inset-0 z-[60] flex items-center justify-center p-4"},ag={class:"relative bg-white rounded-lg shadow-xl w-full max-w-sm p-5"},cg={class:"text-base font-semibold text-gray-900 mb-2"},ug={class:"text-sm text-gray-600 mb-4"},fg={class:"flex justify-end gap-2"},nr={__name:"ConfirmDialog",props:{modelValue:Boolean,title:{type:String,default:"确认"},message:{type:String,default:"确定执行此操作?"},confirmText:{type:String,default:"确定"},danger:{type:Boolean,default:!1}},emits:["update:modelValue","confirm"],setup(e){return(t,n)=>(F(),un(Ml,{to:"body"},[e.modelValue?(F(),B("div",lg,[d("div",{class:"absolute inset-0 bg-black/40",onClick:n[0]||(n[0]=s=>t.$emit("update:modelValue",!1))}),d("div",ag,[d("h3",cg,H(e.title),1),d("p",ug,H(e.message),1),d("div",fg,[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:n[1]||(n[1]=s=>t.$emit("update:modelValue",!1))},"取消"),d("button",{class:je(["px-4 py-2 text-sm rounded-lg text-white",e.danger?"bg-red-600 hover:bg-red-700":"bg-primary-600 hover:bg-primary-700"]),onClick:n[2]||(n[2]=s=>t.$emit("confirm"))},H(e.confirmText),3)])])])):pe("",!0)]))}};async function is(e){var n;if((n=navigator.clipboard)!=null&&n.writeText){await navigator.clipboard.writeText(e);return}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{if(!document.execCommand("copy"))throw new Error("复制失败")}finally{document.body.removeChild(t)}}const dg={key:0,class:"text-gray-400 text-sm"},pg={key:1,class:"text-gray-400 text-sm py-8 text-center"},hg={key:2,class:"space-y-2"},mg=["onClick"],gg={class:"flex-1 min-w-0"},yg={class:"flex items-center gap-2"},bg={class:"font-medium text-gray-900"},xg={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-red-100 text-red-700"},vg={key:0,class:"text-xs text-gray-500 mt-1"},_g={class:"flex gap-2 mt-1 text-xs text-gray-400"},wg={key:0},Eg={key:1,class:"text-xs text-gray-500 mt-1 truncate"},Sg={class:"flex gap-1 ml-3"},Rg=["disabled","onClick"],Cg=["onClick"],Ag=["onClick"],Og=["onClick"],Tg={key:0,class:"text-gray-400 text-sm py-4 text-center"},Pg={key:1},Ng={class:"overflow-x-auto rounded-lg bg-white"},Ig={class:"w-full text-left text-xs"},kg={class:"divide-y divide-gray-100"},$g={class:"px-3 py-2 text-gray-500"},Dg={class:"px-3 py-2 text-blue-600"},Lg={class:"px-3 py-2 font-mono text-gray-500"},Ug={class:"px-3 py-2 font-mono text-gray-500"},Fg={class:"px-3 py-2 text-gray-500"},Mg={class:"px-3 py-2 text-gray-500"},Vg={class:"px-3 py-2 font-mono text-gray-500"},Bg={class:"px-3 py-2 font-mono text-gray-500"},jg={class:"px-3 py-2 font-mono text-gray-500"},Hg={class:"px-3 py-2 text-gray-500"},qg={class:"px-3 py-2 text-gray-500"},Kg={class:"px-3 py-2"},Wg=["onClick"],zg={key:0,class:"text-xs text-gray-400 mt-2"},Gg={class:"space-y-4"},Jg=["disabled"],Xg={class:"flex gap-2"},Yg={key:0},Qg={key:1},Zg={class:"flex items-center gap-2"},ey={class:"mb-2 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-500"},ty={class:"mt-2"},ny={class:"mt-2 w-full border-collapse overflow-hidden rounded-lg bg-white text-left"},sy={class:"border border-gray-200 px-2 py-1 text-gray-700"},ry={class:"border border-gray-200 px-2 py-1"},oy=["onUpdate:modelValue"],iy=["value"],ly=["onUpdate:modelValue"],ay=["onUpdate:modelValue"],cy=["onClick"],uy={__name:"Sources",setup(e){const t=Z([]),n=Z(!0),s=Z(!1),r=Z(!1),o=Z(""),i=Z(!1),l=Z(null),a=Z(""),u=Z(""),c=At({}),f=At({}),h=Z(null),m=Z({show:!1,title:"",message:"",danger:!1,action:null}),S=["include","exclude","rename","dedupe","sort","delete-field","flag","quick","resolve","custom"],C={include:"包含(include)",exclude:"排除(exclude)",rename:"重命名(rename)",dedupe:"去重(dedupe)",sort:"排序(sort)","delete-field":"删除字段(delete-field)",flag:"旗帜(flag)",quick:"快捷规则(quick)",resolve:"解析域名(resolve)",custom:"自定义(custom)"},P=[{type:"include",label:C.include,help:"只保留 field 匹配 pattern 的节点"},{type:"exclude",label:C.exclude,help:"删除 field 匹配 pattern 的节点"},{type:"rename",label:C.rename,help:"按 pattern 处理名称,简易表单适合清理固定前缀/后缀"},{type:"dedupe",label:C.dedupe,help:"按 field 去重,留空按 name 去重"},{type:"sort",label:C.sort,help:"按名称排序"},{type:"delete-field",label:C["delete-field"],help:"从 field 文本中删除匹配 pattern 的片段"},{type:"flag",label:C.flag,help:"给节点名补充或整理地区旗帜"},{type:"quick",label:C.quick,help:"应用快捷清理规则"},{type:"resolve",label:C.resolve,help:"把 server 域名解析为 IP"},{type:"custom",label:C.custom,help:"高级声明式规则链,适合 API/导入配置使用"}],v=()=>({name:"",type:"remote",url:"",content:"",enabled:!0,filters:[]}),x=At(v());function A(k,w="success"){h.value={msg:k,type:w},setTimeout(()=>h.value=null,2500)}function R(k){return k?new Date(k).toLocaleString("zh-CN"):""}function O(k){return k?new Date(k*1e3).toLocaleDateString("zh-CN"):""}function $(k){if(!Number.isFinite(k))return"";const w=["B","KB","MB","GB","TB"];let y=k,V=0;for(;y>=1024&&V=10||V===0?y.toFixed(0):y.toFixed(1)}${w[V]}`}function U(k,...w){for(const y of w){const V=k==null?void 0:k[y];if(V!=null&&V!=="")return V}return"-"}function ae(k){if(k!=null&&k["reality-opts"]||(k==null?void 0:k.security)==="reality")return"reality";const w=U(k,"tls","security");return w===!0?"TLS":w===!1||w==="none"?"-":w}function Y(k){const w=k==null?void 0:k.transport;return typeof w=="string"?w:w!=null&&w.type?w.type:U(k,"network","net")}function se(k){var X,Q,p;const w=f[k.id];if(!w)return"";const y=[];w.planName&&y.push(`套餐: ${w.planName}`);const V=Number(((X=w.usage)==null?void 0:X.upload)||0)+Number(((Q=w.usage)==null?void 0:Q.download)||0),M=Number(w.total||0);return M>0&&y.push(`流量: ${$(V)} / ${$(M)}`),M>V&&y.push(`剩余: ${$(M-V)}`),w.expires&&y.push(`到期: ${O(w.expires)}`),(p=k.meta)!=null&&p.price&&y.push(`计费: ${k.meta.price}${k.meta.billingCycle?`/${k.meta.billingCycle}`:""}`),y.join(" · ")}function oe(k){return{original:(k==null?void 0:k.originalCount)??(Array.isArray(k==null?void 0:k.original)?k.original.length:(k==null?void 0:k.nodes)??0),processed:Array.isArray(k==null?void 0:k.processed)?k.processed.length:0}}function W(k){return{id:k.id,name:k.name,type:k.type,url:k.url,content:k.content,filters:k.filters}}function ce(){Object.assign(x,v()),r.value=!1,s.value=!0}function fe(k){Object.assign(x,{name:k.id,type:k.type||"remote",url:k.url||"",content:k.content||"",enabled:k.enabled!==!1,filters:JSON.parse(JSON.stringify(k.filters||[]))}),r.value=!0,s.value=!0}function Pe(){x.filters.push({type:"include",pattern:"",field:""})}async function be(){try{const k={name:x.name,type:x.type,url:x.url,content:x.content,enabled:x.enabled,filters:x.filters.filter(w=>w.type)};r.value?await Sm(x.name,k):await Em(k),s.value=!1,await de(),A(r.value?"已更新":"已创建")}catch(k){A(k.message,"error")}}async function D(k){m.value={show:!0,title:"删除订阅源",message:`确定删除 "${k.name}"?`,danger:!0,action:async()=>{try{await Rm(k.id),await de(),A("已删除")}catch(w){A(w.message,"error")}}}}async function I(k){if(o.value===k.id){o.value="",l.value=null;return}o.value=k.id,i.value=!0,l.value=null;try{const w=await Er(W(k));l.value=w.data,c[k.id]=oe(w.data)}catch(w){A(w.message,"error"),o.value=""}finally{i.value=!1}}async function J(k){try{const w=await Dm(k.id);await is(w.data.url),A("链接已复制")}catch(w){A(w.message,"error")}}async function ue(k){try{const w=await uc(k);await is(w.data.uri),A("节点链接已复制")}catch(w){A(w.message,"error")}}async function re(k){var w,y;if(!a.value){a.value=k.id,u.value="";try{const V=await Er(W(k)),M=((w=V.data)==null?void 0:w.processed)||((y=V.data)==null?void 0:y.original)||[];c[k.id]=oe(V.data),o.value===k.id&&(l.value=V.data);for(let X=0;X(F(),B("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[w[11]||(w[11]=d("h2",{class:"text-xl font-bold"},"订阅源",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:ce},"+ 新建")]),n.value?(F(),B("div",dg,"加载中...")):t.value.length===0?(F(),B("div",pg,"暂无订阅源")):(F(),B("div",hg,[(F(!0),B(ve,null,Fe(t.value,y=>{var V,M,X;return F(),B("div",{key:y.id,class:"bg-white rounded-lg shadow-sm border overflow-hidden hover:shadow-md transition-shadow"},[d("div",{class:"p-4 flex items-center justify-between cursor-pointer",onClick:Q=>I(y)},[d("div",gg,[d("div",yg,[d("span",bg,H(y.name),1),d("span",{class:je(["px-1.5 py-0.5 rounded text-xs",y.type==="remote"?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-600"])},H(y.type),3),y.enabled?pe("",!0):(F(),B("span",xg,"已禁用"))]),y.type==="local"?(F(),B("p",vg,"(本地内容)")):pe("",!0),d("div",_g,[d("span",null,"原始节点: "+H(((V=c[y.id])==null?void 0:V.original)??"-"),1),d("span",null,"处理后: "+H(((M=c[y.id])==null?void 0:M.processed)??"-"),1),d("span",null,"过滤器: "+H(((X=y.filters)==null?void 0:X.length)||0),1),y.createdAt?(F(),B("span",wg,"创建: "+H(R(y.createdAt)),1)):pe("",!0)]),se(y)?(F(),B("p",Eg,H(se(y)),1)):pe("",!0)]),d("div",Sg,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600 whitespace-nowrap",disabled:!!a.value,onClick:ut(Q=>re(y),["stop"])},H(a.value===y.id?`探测 ${u.value}`:"探测出口"),9,Rg),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:ut(Q=>J(y),["stop"])},"复制链接",8,Cg),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:ut(Q=>fe(y),["stop"])},"编辑",8,Ag),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:ut(Q=>D(y),["stop"])},"删除",8,Og)])],8,mg),o.value===y.id?(F(),B("div",{key:0,class:"border-t bg-gray-50",onClick:w[0]||(w[0]=ut(()=>{},["stop"]))},[i.value?(F(),B("div",Tg,"解析中...")):l.value?(F(),B("div",Pg,[d("div",Ng,[d("table",Ig,[w[12]||(w[12]=d("thead",{class:"sticky top-0 bg-gray-100 text-gray-600"},[d("tr",null,[d("th",{class:"px-3 py-2 font-medium"},"Type"),d("th",{class:"px-3 py-2 font-medium"},"Name"),d("th",{class:"px-3 py-2 font-medium"},"Server"),d("th",{class:"px-3 py-2 font-medium"},"Port"),d("th",{class:"px-3 py-2 font-medium"},"Transport"),d("th",{class:"px-3 py-2 font-medium"},"Tls"),d("th",{class:"px-3 py-2 font-medium"},"Delay"),d("th",{class:"px-3 py-2 font-medium"},"Speed"),d("th",{class:"px-3 py-2 font-medium"},"Egress IP"),d("th",{class:"px-3 py-2 font-medium"},"Country"),d("th",{class:"px-3 py-2 font-medium"},"Region"),d("th",{class:"px-3 py-2 font-medium"},"Link")])],-1)),d("tbody",kg,[(F(!0),B(ve,null,Fe(l.value.processed||l.value.original||[],(Q,p)=>(F(),B("tr",{key:p},[d("td",$g,H(U(Q,"type")),1),d("td",Dg,H(U(Q,"name","remarks")),1),d("td",Lg,H(U(Q,"server","address")),1),d("td",Ug,H(U(Q,"port")),1),d("td",Fg,H(Y(Q)),1),d("td",Mg,H(ae(Q)),1),d("td",Vg,H(U(Q,"latencyMs","delay","latency","ping")),1),d("td",Bg,H(U(Q,"speed","downloadSpeed")),1),d("td",jg,H(U(Q,"egressIp")),1),d("td",Hg,H(U(Q,"egressCountry","country")),1),d("td",qg,H(U(Q,"egressRegion","region")),1),d("td",Kg,[d("button",{class:"px-2 py-1 text-xs rounded hover:bg-gray-100 text-blue-600 whitespace-nowrap",onClick:g=>ue(Q)},"复制",8,Wg)])]))),128))])])]),(l.value.processed||l.value.original||[]).length===0?(F(),B("p",zg,"暂无节点")):pe("",!0)])):pe("",!0)])):pe("",!0)])}),128))])),Oe(Us,{modelValue:s.value,"onUpdate:modelValue":w[8]||(w[8]=y=>s.value=y),title:r.value?"编辑订阅源":"新建订阅源"},{footer:dt(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:w[7]||(w[7]=y=>s.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:be},"保存")]),default:dt(()=>[d("div",Gg,[d("div",null,[w[13]||(w[13]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),me(d("input",{"onUpdate:modelValue":w[1]||(w[1]=y=>x.name=y),disabled:r.value,placeholder:"my-sub",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,Jg),[[De,x.name]]),w[14]||(w[14]=d("p",{class:"text-xs text-gray-400 mt-0.5"},"仅支持小写字母、数字、下划线、连字符",-1))]),d("div",null,[w[17]||(w[17]=d("label",{class:"block text-sm font-medium mb-1"},"类型",-1)),d("div",Xg,[d("label",{class:je(["flex-1 flex items-center gap-2 px-3 py-2 border rounded-lg text-sm cursor-pointer",x.type==="remote"?"border-primary-500 bg-primary-50 text-primary-700":"border-gray-200"])},[me(d("input",{type:"radio","onUpdate:modelValue":w[2]||(w[2]=y=>x.type=y),value:"remote",class:"text-primary-600"},null,512),[[vi,x.type]]),w[15]||(w[15]=d("span",null,"远程 (URL)",-1))],2),d("label",{class:je(["flex-1 flex items-center gap-2 px-3 py-2 border rounded-lg text-sm cursor-pointer",x.type==="local"?"border-primary-500 bg-primary-50 text-primary-700":"border-gray-200"])},[me(d("input",{type:"radio","onUpdate:modelValue":w[3]||(w[3]=y=>x.type=y),value:"local",class:"text-primary-600"},null,512),[[vi,x.type]]),w[16]||(w[16]=d("span",null,"本地 (内容)",-1))],2)])]),x.type==="remote"?(F(),B("div",Yg,[w[18]||(w[18]=d("label",{class:"block text-sm font-medium mb-1"},"URL",-1)),me(d("textarea",{"onUpdate:modelValue":w[4]||(w[4]=y=>x.url=y),rows:"3",placeholder:"https://example.com/sub (多个URL换行)",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[De,x.url]])])):pe("",!0),x.type==="local"?(F(),B("div",Qg,[w[19]||(w[19]=d("label",{class:"block text-sm font-medium mb-1"},"内容",-1)),me(d("textarea",{"onUpdate:modelValue":w[5]||(w[5]=y=>x.content=y),rows:"6",placeholder:"ss://... 或 base64 内容",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[De,x.content]])])):pe("",!0),d("div",Zg,[me(d("input",{type:"checkbox",id:"src-enabled","onUpdate:modelValue":w[6]||(w[6]=y=>x.enabled=y),class:"rounded"},null,512),[[zn,x.enabled]]),w[20]||(w[20]=d("label",{for:"src-enabled",class:"text-sm"},"启用",-1))]),d("div",null,[d("div",{class:"flex items-center justify-between mb-1"},[w[21]||(w[21]=d("label",{class:"text-sm font-medium"},"过滤器",-1)),d("button",{class:"text-xs text-primary-600 hover:underline",onClick:Pe},"+ 添加")]),d("details",ey,[w[24]||(w[24]=d("summary",{class:"cursor-pointer text-gray-700"},"使用说明",-1)),d("div",ty,[w[23]||(w[23]=d("p",null,"pattern 支持正则;field 留空默认匹配 name。常用字段:name、type、server、port。",-1)),d("table",ny,[w[22]||(w[22]=d("thead",{class:"bg-gray-100 text-gray-700"},[d("tr",null,[d("th",{class:"border border-gray-200 px-2 py-1 font-medium"},"过滤器"),d("th",{class:"border border-gray-200 px-2 py-1 font-medium"},"说明")])],-1)),d("tbody",null,[(F(),B(ve,null,Fe(P,y=>d("tr",{key:y.type},[d("td",sy,H(y.label),1),d("td",ry,H(y.help),1)])),64))])])])]),(F(!0),B(ve,null,Fe(x.filters,(y,V)=>(F(),B("div",{key:V,class:"flex gap-1 mb-1.5"},[me(d("select",{"onUpdate:modelValue":M=>y.type=M,class:"px-2 py-1 border rounded text-xs w-28"},[(F(),B(ve,null,Fe(S,M=>d("option",{key:M,value:M},H(C[M]||M),9,iy)),64))],8,oy),[[Sn,y.type]]),me(d("input",{"onUpdate:modelValue":M=>y.pattern=M,placeholder:"pattern",class:"flex-1 px-2 py-1 border rounded text-xs"},null,8,ly),[[De,y.pattern]]),me(d("input",{"onUpdate:modelValue":M=>y.field=M,placeholder:"field",class:"w-24 px-2 py-1 border rounded text-xs"},null,8,ay),[[De,y.field]]),d("button",{class:"px-2 py-1 text-xs text-red-500 hover:bg-red-50 rounded",onClick:M=>x.filters.splice(V,1)},"×",8,cy)]))),128))])])]),_:1},8,["modelValue","title"]),Oe(nr,{modelValue:m.value.show,"onUpdate:modelValue":w[9]||(w[9]=y=>m.value.show=y),title:m.value.title,message:m.value.message,danger:m.value.danger,onConfirm:w[10]||(w[10]=y=>{m.value.action(),m.value.show=!1})},null,8,["modelValue","title","message","danger"]),h.value?(F(),B("div",{key:3,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",h.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(h.value.msg),3)):pe("",!0)]))}},fy={key:0,class:"text-gray-400 text-sm"},dy={key:1,class:"text-gray-400 text-sm py-8 text-center"},py={key:2,class:"space-y-2"},hy=["onClick"],my={class:"flex-1 min-w-0"},gy={class:"flex items-center gap-2"},yy={class:"font-medium text-gray-900"},by={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-red-100 text-red-700"},xy={class:"flex gap-3 mt-1 text-xs text-gray-400"},vy={key:0},_y={class:"flex gap-1 ml-3"},wy=["disabled","onClick"],Ey=["onClick"],Sy=["onClick"],Ry=["onClick"],Cy={key:0,class:"text-gray-400 text-sm py-4 text-center"},Ay={key:1},Oy={class:"overflow-x-auto rounded-lg bg-white"},Ty={class:"w-full text-left text-xs"},Py={class:"divide-y divide-gray-100"},Ny={class:"px-3 py-2 text-gray-500"},Iy={class:"px-3 py-2 text-blue-600"},ky={class:"px-3 py-2 font-mono text-gray-500"},$y={class:"px-3 py-2 font-mono text-gray-500"},Dy={class:"px-3 py-2 text-gray-500"},Ly={class:"px-3 py-2 text-gray-500"},Uy={class:"px-3 py-2 font-mono text-gray-500"},Fy={class:"px-3 py-2 font-mono text-gray-500"},My={class:"px-3 py-2 font-mono text-gray-500"},Vy={class:"px-3 py-2 text-gray-500"},By={class:"px-3 py-2 text-gray-500"},jy={class:"px-3 py-2"},Hy=["onClick"],qy={key:0,class:"text-xs text-gray-400 mt-2"},Ky={class:"space-y-4"},Wy=["disabled"],zy={class:"max-h-32 overflow-y-auto border rounded-lg p-2 space-y-1"},Gy=["value"],Jy={class:"text-xs text-gray-400"},Xy={key:0,class:"text-xs text-gray-400 py-1"},Yy=["value"],Qy={class:"flex items-center gap-4"},Zy={class:"flex items-center gap-2 text-sm"},eb={class:"flex items-center gap-2 text-sm"},tb={class:"flex items-center justify-between mb-1"},nb=["onUpdate:modelValue"],sb=["value"],rb=["onUpdate:modelValue"],ob=["onClick"],ib={__name:"Collections",setup(e){const t=Z([]),n=Z([]),s=Z([]),r=Z(!0),o=Z(!1),i=Z(!1),l=Z(""),a=Z(!1),u=Z(null),c=Z(""),f=Z(""),h=Z(null),m=At({}),S=Z({show:!1,title:"",message:"",danger:!1,action:null}),C=["include","exclude","rename","dedupe","sort","delete-field","flag","quick","resolve","custom"],P=()=>({name:"",sourceIds:[],filters:[],templateId:"",ignoreFailed:!0,enabled:!0}),v=At(P());function x(D,I="success"){h.value={msg:D,type:I},setTimeout(()=>h.value=null,2500)}function A(D,...I){for(const J of I){const ue=D==null?void 0:D[J];if(ue!=null&&ue!=="")return ue}return"-"}function R(D){if(D!=null&&D["reality-opts"]||(D==null?void 0:D.security)==="reality")return"reality";const I=A(D,"tls","security");return I===!0?"TLS":I===!1||I==="none"?"-":I}function O(D){const I=D==null?void 0:D.transport;return typeof I=="string"?I:I!=null&&I.type?I.type:A(D,"network","net")}function $(D){return{original:(D==null?void 0:D.originalCount)??(Array.isArray(D==null?void 0:D.original)?D.original.length:(D==null?void 0:D.nodes)??0),processed:Array.isArray(D==null?void 0:D.processed)?D.processed.length:0}}function U(){Object.assign(v,P()),i.value=!1,o.value=!0}function ae(D){Object.assign(v,{name:D.id,sourceIds:[...D.sourceIds||[]],filters:JSON.parse(JSON.stringify(D.filters||[])),templateId:D.templateId||"",ignoreFailed:D.ignoreFailed!==!1,enabled:D.enabled!==!1}),i.value=!0,o.value=!0}async function Y(){try{const D={...v};i.value?await Am(v.name,D):await Cm(D),o.value=!1,await Pe(),x(i.value?"已更新":"已创建")}catch(D){x(D.message,"error")}}async function se(D){S.value={show:!0,title:"删除合集",message:`确定删除 "${D.name}"?`,danger:!0,action:async()=>{try{await Om(D.id),await Pe(),x("已删除")}catch(I){x(I.message,"error")}}}}async function oe(D){try{const I=await Lm(D.id);await is(I.data.url),x("链接已复制")}catch(I){x(I.message,"error")}}async function W(D){if(l.value===D.id){l.value="",u.value=null;return}l.value=D.id,a.value=!0,u.value=null;try{const I=await Sr(D);u.value=I.data,m[D.id]=$(I.data)}catch(I){x(I.message,"error"),l.value=""}finally{a.value=!1}}async function ce(D){try{const I=await uc(D);await is(I.data.uri),x("节点链接已复制")}catch(I){x(I.message,"error")}}async function fe(D){var I,J;if(!c.value){c.value=D.id,f.value="";try{const ue=await Sr(D),re=((I=ue.data)==null?void 0:I.processed)||((J=ue.data)==null?void 0:J.original)||[];m[D.id]=$(ue.data),l.value===D.id&&(u.value=ue.data);for(let de=0;de(F(),B("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[I[11]||(I[11]=d("h2",{class:"text-xl font-bold"},"合集",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:U},"+ 新建")]),r.value?(F(),B("div",fy,"加载中...")):t.value.length===0?(F(),B("div",dy,"暂无合集")):(F(),B("div",py,[(F(!0),B(ve,null,Fe(t.value,J=>{var ue,re,de,Ne;return F(),B("div",{key:J.id,class:"bg-white rounded-lg shadow-sm border overflow-hidden hover:shadow-md transition-shadow"},[d("div",{class:"p-4 flex items-center justify-between cursor-pointer",onClick:ge=>W(J)},[d("div",my,[d("div",gy,[d("span",yy,H(J.name),1),J.enabled?pe("",!0):(F(),B("span",by,"已禁用"))]),d("div",xy,[d("span",null,"原始节点: "+H(((ue=m[J.id])==null?void 0:ue.original)??"-"),1),d("span",null,"处理后: "+H(((re=m[J.id])==null?void 0:re.processed)??"-"),1),d("span",null,"订阅源: "+H(((de=J.sourceIds)==null?void 0:de.length)||0),1),d("span",null,"过滤器: "+H(((Ne=J.filters)==null?void 0:Ne.length)||0),1),d("span",null,"模板: "+H(J.templateId||"default"),1),J.ignoreFailed?(F(),B("span",vy,"忽略失败")):pe("",!0)])]),d("div",_y,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600 whitespace-nowrap",disabled:!!c.value,onClick:ut(ge=>fe(J),["stop"])},H(c.value===J.id?`探测 ${f.value}`:"探测出口"),9,wy),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:ut(ge=>oe(J),["stop"])},"复制链接",8,Ey),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:ut(ge=>ae(J),["stop"])},"编辑",8,Sy),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:ut(ge=>se(J),["stop"])},"删除",8,Ry)])],8,hy),l.value===J.id?(F(),B("div",{key:0,class:"border-t bg-gray-50",onClick:I[0]||(I[0]=ut(()=>{},["stop"]))},[a.value?(F(),B("div",Cy,"解析中...")):u.value?(F(),B("div",Ay,[d("div",Oy,[d("table",Ty,[I[12]||(I[12]=d("thead",{class:"sticky top-0 bg-gray-100 text-gray-600"},[d("tr",null,[d("th",{class:"px-3 py-2 font-medium"},"Type"),d("th",{class:"px-3 py-2 font-medium"},"Name"),d("th",{class:"px-3 py-2 font-medium"},"Server"),d("th",{class:"px-3 py-2 font-medium"},"Port"),d("th",{class:"px-3 py-2 font-medium"},"Transport"),d("th",{class:"px-3 py-2 font-medium"},"Tls"),d("th",{class:"px-3 py-2 font-medium"},"Delay"),d("th",{class:"px-3 py-2 font-medium"},"Speed"),d("th",{class:"px-3 py-2 font-medium"},"Egress IP"),d("th",{class:"px-3 py-2 font-medium"},"Country"),d("th",{class:"px-3 py-2 font-medium"},"Region"),d("th",{class:"px-3 py-2 font-medium"},"Link")])],-1)),d("tbody",Py,[(F(!0),B(ve,null,Fe(u.value.processed||u.value.original||[],(ge,k)=>(F(),B("tr",{key:k},[d("td",Ny,H(A(ge,"type")),1),d("td",Iy,H(A(ge,"name","remarks")),1),d("td",ky,H(A(ge,"server","address")),1),d("td",$y,H(A(ge,"port")),1),d("td",Dy,H(O(ge)),1),d("td",Ly,H(R(ge)),1),d("td",Uy,H(A(ge,"latencyMs","delay","latency","ping")),1),d("td",Fy,H(A(ge,"speed","downloadSpeed")),1),d("td",My,H(A(ge,"egressIp")),1),d("td",Vy,H(A(ge,"egressCountry","country")),1),d("td",By,H(A(ge,"egressRegion","region")),1),d("td",jy,[d("button",{class:"px-2 py-1 text-xs rounded hover:bg-gray-100 text-blue-600 whitespace-nowrap",onClick:w=>ce(ge)},"复制",8,Hy)])]))),128))])])]),(u.value.processed||u.value.original||[]).length===0?(F(),B("p",qy,"暂无节点")):pe("",!0)])):pe("",!0)])):pe("",!0)])}),128))])),Oe(Us,{modelValue:o.value,"onUpdate:modelValue":I[8]||(I[8]=J=>o.value=J),title:i.value?"编辑合集":"新建合集"},{footer:dt(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:I[7]||(I[7]=J=>o.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:Y},"保存")]),default:dt(()=>[d("div",Ky,[d("div",null,[I[13]||(I[13]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),me(d("input",{"onUpdate:modelValue":I[1]||(I[1]=J=>v.name=J),disabled:i.value,placeholder:"my-collection",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,Wy),[[De,v.name]])]),d("div",null,[I[14]||(I[14]=d("label",{class:"block text-sm font-medium mb-1"},"订阅源 (多选)",-1)),d("div",zy,[(F(!0),B(ve,null,Fe(n.value,J=>(F(),B("label",{key:J.id,class:"flex items-center gap-2 text-sm cursor-pointer hover:bg-gray-50 px-1 py-0.5 rounded"},[me(d("input",{type:"checkbox",value:J.id,"onUpdate:modelValue":I[2]||(I[2]=ue=>v.sourceIds=ue),class:"rounded"},null,8,Gy),[[zn,v.sourceIds]]),d("span",null,H(J.name),1),d("span",Jy,"("+H(J.type)+")",1)]))),128)),n.value.length===0?(F(),B("p",Xy,"无可用订阅源")):pe("",!0)])]),d("div",null,[I[16]||(I[16]=d("label",{class:"block text-sm font-medium mb-1"},"模板",-1)),me(d("select",{"onUpdate:modelValue":I[3]||(I[3]=J=>v.templateId=J),class:"w-full px-3 py-2 border rounded-lg text-sm"},[I[15]||(I[15]=d("option",{value:""},"默认",-1)),(F(!0),B(ve,null,Fe(s.value,J=>(F(),B("option",{key:J.id,value:J.id},H(J.name)+" ("+H(J.target)+")",9,Yy))),128))],512),[[Sn,v.templateId]])]),d("div",Qy,[d("label",Zy,[me(d("input",{type:"checkbox","onUpdate:modelValue":I[4]||(I[4]=J=>v.enabled=J),class:"rounded"},null,512),[[zn,v.enabled]]),I[17]||(I[17]=ts(" 启用 ",-1))]),d("label",eb,[me(d("input",{type:"checkbox","onUpdate:modelValue":I[5]||(I[5]=J=>v.ignoreFailed=J),class:"rounded"},null,512),[[zn,v.ignoreFailed]]),I[18]||(I[18]=ts(" 忽略失败源 ",-1))])]),d("div",null,[d("div",tb,[I[19]||(I[19]=d("label",{class:"text-sm font-medium"},"过滤器",-1)),d("button",{class:"text-xs text-primary-600 hover:underline",onClick:I[6]||(I[6]=J=>v.filters.push({type:"include",pattern:""}))},"+ 添加")]),(F(!0),B(ve,null,Fe(v.filters,(J,ue)=>(F(),B("div",{key:ue,class:"flex gap-1 mb-1.5"},[me(d("select",{"onUpdate:modelValue":re=>J.type=re,class:"px-2 py-1 border rounded text-xs w-28"},[(F(),B(ve,null,Fe(C,re=>d("option",{key:re,value:re},H(re),9,sb)),64))],8,nb),[[Sn,J.type]]),me(d("input",{"onUpdate:modelValue":re=>J.pattern=re,placeholder:"pattern",class:"flex-1 px-2 py-1 border rounded text-xs"},null,8,rb),[[De,J.pattern]]),d("button",{class:"px-2 py-1 text-xs text-red-500 hover:bg-red-50 rounded",onClick:re=>v.filters.splice(ue,1)},"×",8,ob)]))),128))])])]),_:1},8,["modelValue","title"]),Oe(nr,{modelValue:S.value.show,"onUpdate:modelValue":I[9]||(I[9]=J=>S.value.show=J),title:S.value.title,message:S.value.message,danger:S.value.danger,onConfirm:I[10]||(I[10]=J=>{S.value.action(),S.value.show=!1})},null,8,["modelValue","title","message","danger"]),h.value?(F(),B("div",{key:3,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",h.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(h.value.msg),3)):pe("",!0)]))}},lb={key:0,class:"text-gray-400 text-sm"},ab={key:1,class:"text-gray-400 text-sm py-8 text-center"},cb={key:2,class:"space-y-2"},ub={class:"flex-1 min-w-0"},fb={class:"flex items-center gap-2"},db={class:"font-medium text-gray-900"},pb={class:"px-1.5 py-0.5 rounded text-xs bg-purple-100 text-purple-700"},hb={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-gray-100 text-gray-500"},mb={class:"text-xs text-gray-500 mt-1"},gb={key:0,class:"flex gap-1 ml-3"},yb=["onClick"],bb=["onClick"],xb={key:1,class:"flex gap-1 ml-3"},vb=["onClick"],_b={class:"space-y-4"},wb=["disabled"],Eb=["value"],Sb={key:0,class:"text-xs text-red-500 mt-1"},Rb={class:"text-xs font-mono bg-gray-50 p-3 rounded max-h-96 overflow-auto"},Cb={__name:"Templates",setup(e){const t=Z([]),n=Z(!0),s=Z(!1),r=Z(!1),o=Z(!1),i=Z(null),l=Z(null),a=Z({show:!1,title:"",message:"",danger:!1,action:null}),u=["mihomo","stash","surge","surge-mac","surfboard","loon","egern","shadowrocket","qx","sing-box","v2ray","uri","json"],c=()=>({name:"",target:"mihomo",configStr:"{}"}),f=At(c()),h=tt(()=>{try{return JSON.parse(f.configStr),""}catch{return"JSON 格式错误"}});function m(R,O="success"){l.value={msg:R,type:O},setTimeout(()=>l.value=null,2500)}function S(){Object.assign(f,c()),r.value=!1,s.value=!0}function C(R){Object.assign(f,{name:R.id,target:R.target,configStr:JSON.stringify(R.config||{},null,2)}),r.value=!0,s.value=!0}function P(R){i.value=R.config,o.value=!0}async function v(){if(h.value){m(h.value,"error");return}try{const R={name:f.name,target:f.target,config:JSON.parse(f.configStr)};r.value?await Pm(f.name,R):await Tm(R),s.value=!1,await A(),m(r.value?"已更新":"已创建")}catch(R){m(R.message,"error")}}async function x(R){a.value={show:!0,title:"删除模板",message:`确定删除 "${R.name}"?`,danger:!0,action:async()=>{try{await Nm(R.id),await A(),m("已删除")}catch(O){m(O.message,"error")}}}}async function A(){n.value=!0;try{const R=await Oo();t.value=R.data||[]}catch(R){m(R.message,"error")}finally{n.value=!1}}return Xt(A),(R,O)=>(F(),B("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[O[8]||(O[8]=d("h2",{class:"text-xl font-bold"},"模板",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:S},"+ 新建")]),n.value?(F(),B("div",lb,"加载中...")):t.value.length===0?(F(),B("div",ab,"暂无模板")):(F(),B("div",cb,[(F(!0),B(ve,null,Fe(t.value,$=>(F(),B("div",{key:$.id,class:"bg-white rounded-lg p-4 shadow-sm border flex items-center justify-between hover:shadow-md transition-shadow"},[d("div",ub,[d("div",fb,[d("span",db,H($.name),1),d("span",pb,H($.target),1),$.readonly?(F(),B("span",hb,"内置")):pe("",!0)]),d("p",mb,H(Object.keys($.config||{}).length)+" 个配置项",1)]),$.readonly?(F(),B("div",xb,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:U=>P($)},"查看",8,vb)])):(F(),B("div",gb,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:U=>C($)},"编辑",8,yb),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:U=>x($)},"删除",8,bb)]))]))),128))])),Oe(Us,{modelValue:s.value,"onUpdate:modelValue":O[4]||(O[4]=$=>s.value=$),title:r.value?"编辑模板":"新建模板"},{footer:dt(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:O[3]||(O[3]=$=>s.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:v},"保存")]),default:dt(()=>[d("div",_b,[d("div",null,[O[9]||(O[9]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),me(d("input",{"onUpdate:modelValue":O[0]||(O[0]=$=>f.name=$),disabled:r.value,placeholder:"my-template",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,wb),[[De,f.name]])]),d("div",null,[O[10]||(O[10]=d("label",{class:"block text-sm font-medium mb-1"},"目标平台",-1)),me(d("select",{"onUpdate:modelValue":O[1]||(O[1]=$=>f.target=$),class:"w-full px-3 py-2 border rounded-lg text-sm"},[(F(),B(ve,null,Fe(u,$=>d("option",{key:$,value:$},H($),9,Eb)),64))],512),[[Sn,f.target]])]),d("div",null,[O[11]||(O[11]=d("label",{class:"block text-sm font-medium mb-1"},"配置 (JSON)",-1)),me(d("textarea",{"onUpdate:modelValue":O[2]||(O[2]=$=>f.configStr=$),rows:"12",placeholder:'{"proxy-groups": [], "rules": []}',class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[De,f.configStr]]),h.value?(F(),B("p",Sb,H(h.value),1)):pe("",!0)])])]),_:1},8,["modelValue","title"]),Oe(Us,{modelValue:o.value,"onUpdate:modelValue":O[5]||(O[5]=$=>o.value=$),title:"查看模板配置"},{default:dt(()=>[d("pre",Rb,H(JSON.stringify(i.value,null,2)),1)]),_:1},8,["modelValue"]),Oe(nr,{modelValue:a.value.show,"onUpdate:modelValue":O[6]||(O[6]=$=>a.value.show=$),title:a.value.title,message:a.value.message,danger:a.value.danger,onConfirm:O[7]||(O[7]=$=>{a.value.action(),a.value.show=!1})},null,8,["modelValue","title","message","danger"]),l.value?(F(),B("div",{key:3,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",l.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(l.value.msg),3)):pe("",!0)]))}},Ab={key:0,class:"text-gray-400 text-sm"},Ob={key:1,class:"text-gray-400 text-sm py-8 text-center"},Tb={key:2,class:"space-y-2"},Pb={class:"flex-1 min-w-0"},Nb={class:"flex items-center gap-2"},Ib={class:"font-medium text-gray-900"},kb={class:"text-xs text-gray-400 mt-1"},$b={class:"flex gap-1 ml-3"},Db=["onClick"],Lb=["onClick"],Ub={__name:"RecycleBin",setup(e){const t=Z([]),n=Z(!0),s=Z(null),r=Z({show:!1,title:"",message:"",danger:!1,confirmText:"确定",action:null});function o(f,h="success"){s.value={msg:f,type:h},setTimeout(()=>s.value=null,2500)}function i(f){return f?new Date(f).toLocaleString("zh-CN"):""}function l(f){return{source:"bg-blue-100 text-blue-700",collection:"bg-purple-100 text-purple-700",template:"bg-green-100 text-green-700"}[f]||"bg-gray-100 text-gray-600"}async function a(f){r.value={show:!0,title:"恢复",message:`恢复 "${f.resourceId}"?`,danger:!1,confirmText:"恢复",action:async()=>{try{await $m(f.id),await c(),o("已恢复")}catch(h){o(h.message,"error")}}}}async function u(f){r.value={show:!0,title:"彻底删除",message:`彻底删除 "${f.resourceId}"?此操作不可撤销!`,danger:!0,confirmText:"彻底删除",action:async()=>{try{await km(f.id),await c(),o("已彻底删除")}catch(h){o(h.message,"error")}}}}async function c(){n.value=!0;try{const f=await Im();t.value=f.data||[]}catch(f){o(f.message,"error")}finally{n.value=!1}}return Xt(c),(f,h)=>(F(),B("div",null,[h[2]||(h[2]=d("h2",{class:"text-xl font-bold mb-5"},"回收站",-1)),n.value?(F(),B("div",Ab,"加载中...")):t.value.length===0?(F(),B("div",Ob,"回收站为空")):(F(),B("div",Tb,[(F(!0),B(ve,null,Fe(t.value,m=>(F(),B("div",{key:m.id,class:"bg-white rounded-lg p-4 shadow-sm border flex items-center justify-between"},[d("div",Pb,[d("div",Nb,[d("span",{class:je(["px-1.5 py-0.5 rounded text-xs",l(m.resourceType)])},H(m.resourceType),3),d("span",Ib,H(m.resourceId),1)]),d("p",kb,"删除于: "+H(i(m.deletedAt)),1)]),d("div",$b,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:S=>a(m)},"恢复",8,Db),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:S=>u(m)},"彻底删除",8,Lb)])]))),128))])),Oe(nr,{modelValue:r.value.show,"onUpdate:modelValue":h[0]||(h[0]=m=>r.value.show=m),title:r.value.title,message:r.value.message,danger:r.value.danger,confirmText:r.value.confirmText,onConfirm:h[1]||(h[1]=m=>{r.value.action(),r.value.show=!1})},null,8,["modelValue","title","message","danger","confirmText"]),s.value?(F(),B("div",{key:3,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",s.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(s.value.msg),3)):pe("",!0)]))}},Fb={class:"bg-white rounded-lg p-4 shadow-sm border mb-4"},Mb={class:"flex gap-2 mb-3"},Vb=["value"],Bb={class:"flex gap-2 mb-2"},jb=["disabled"],Hb={key:0,class:"text-xs text-gray-500 mb-2"},qb={class:"bg-white rounded-lg p-4 shadow-sm border mb-4"},Kb={class:"flex gap-2 mb-3"},Wb=["disabled"],zb={key:0,class:"bg-gray-50 rounded-lg p-3 text-sm space-y-1"},Gb={class:"flex justify-between"},Jb={class:"flex justify-between"},Xb={class:"flex justify-between"},Yb={class:"flex justify-between"},Qb={key:0,class:"flex justify-between"},Zb={class:"bg-white rounded-lg p-4 shadow-sm border"},e0={class:"flex gap-2"},t0={class:"px-4 py-2 bg-gray-600 text-white rounded-lg text-sm hover:bg-gray-700 cursor-pointer"},n0={__name:"Tools",setup(e){const t=["mihomo","stash","surge","surge-mac","surfboard","loon","egern","shadowrocket","qx","sing-box","v2ray","uri","json"],n=["mihomo","surge","loon","qx"],s=Z("proxy"),r=Z("mihomo"),o=Z(""),i=Z(""),l=Z(""),a=Z(!1),u=Z(""),c=Z(null),f=Z(!1),h=Z(null),m=tt(()=>s.value==="proxy"?t:n);function S(R,O="success"){h.value={msg:R,type:O},setTimeout(()=>h.value=null,2500)}async function C(R){try{await is(R),S("已复制")}catch(O){S(O.message,"error")}}async function P(){var R;if(!o.value.trim()){S("请输入内容","error");return}a.value=!0,i.value="",l.value="";try{const $=await(s.value==="proxy"?Fm:Mm)({content:o.value,target:r.value});i.value=$.data.content||$.data.par_res||"",l.value=`解析: ${$.data.parsed||0} · 输出: ${$.data.emitted||0} · 跳过: ${$.data.skipped||0}`,(R=$.data.warnings)!=null&&R.length&&(l.value+=" · ⚠ "+$.data.warnings.join("; ")),S("转换成功")}catch(O){S(O.message,"error")}finally{a.value=!1}}async function v(){f.value=!0,c.value=null;try{const R=await Vm(u.value);c.value=R.data}catch(R){S(R.message,"error")}finally{f.value=!1}}async function x(){try{const R=await _m(),O=new Blob([JSON.stringify(R,null,2)],{type:"application/json"}),$=URL.createObjectURL(O),U=document.createElement("a");U.href=$,U.download=`sub-store-backup-${Date.now()}.json`,U.click(),URL.revokeObjectURL($),S("已导出")}catch(R){S(R.message,"error")}}async function A(R){var $;const O=($=R.target.files)==null?void 0:$[0];if(O){try{const U=await O.text(),ae=JSON.parse(U);await wm(ae),S("导入成功")}catch(U){S(U.message,"error")}R.target.value=""}}return(R,O)=>{var $;return F(),B("div",null,[O[16]||(O[16]=d("h2",{class:"text-xl font-bold mb-5"},"工具",-1)),d("div",Fb,[O[7]||(O[7]=d("h3",{class:"font-semibold mb-3"},"转换器",-1)),d("div",Mb,[me(d("select",{"onUpdate:modelValue":O[0]||(O[0]=U=>s.value=U),class:"px-3 py-2 border rounded-lg text-sm"},[...O[6]||(O[6]=[d("option",{value:"proxy"},"代理转换",-1),d("option",{value:"rule"},"规则转换",-1)])],512),[[Sn,s.value]]),me(d("select",{"onUpdate:modelValue":O[1]||(O[1]=U=>r.value=U),class:"px-3 py-2 border rounded-lg text-sm"},[(F(!0),B(ve,null,Fe(m.value,U=>(F(),B("option",{key:U,value:U},H(U),9,Vb))),128))],512),[[Sn,r.value]])]),me(d("textarea",{"onUpdate:modelValue":O[2]||(O[2]=U=>o.value=U),rows:"5",placeholder:"粘贴订阅内容或规则...",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono mb-2"},null,512),[[De,o.value]]),d("div",Bb,[d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",disabled:a.value,onClick:P},H(a.value?"转换中...":"转换"),9,jb),i.value?(F(),B("button",{key:0,class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:O[3]||(O[3]=U=>C(i.value))},"复制结果")):pe("",!0)]),l.value?(F(),B("p",Hb,H(l.value),1)):pe("",!0),i.value?me((F(),B("textarea",{key:1,"onUpdate:modelValue":O[4]||(O[4]=U=>i.value=U),rows:"8",readonly:"",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono bg-gray-50"},null,512)),[[De,i.value]]):pe("",!0)]),d("div",qb,[O[13]||(O[13]=d("h3",{class:"font-semibold mb-3"},"节点信息查询",-1)),d("div",Kb,[me(d("input",{"onUpdate:modelValue":O[5]||(O[5]=U=>u.value=U),placeholder:"服务器地址 / IP",class:"flex-1 px-3 py-2 border rounded-lg text-sm",onKeyup:Ff(v,["enter"])},null,544),[[De,u.value]]),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",disabled:!u.value||f.value,onClick:v},H(f.value?"查询中...":"查询"),9,Wb)]),c.value?(F(),B("div",zb,[d("div",Gb,[O[8]||(O[8]=d("span",{class:"text-gray-500"},"IP",-1)),d("span",null,H(c.value.ip),1)]),d("div",Jb,[O[9]||(O[9]=d("span",{class:"text-gray-500"},"国家",-1)),d("span",null,H(c.value.country),1)]),d("div",Xb,[O[10]||(O[10]=d("span",{class:"text-gray-500"},"地区",-1)),d("span",null,H(c.value.region),1)]),d("div",Yb,[O[11]||(O[11]=d("span",{class:"text-gray-500"},"城市",-1)),d("span",null,H(c.value.city),1)]),c.value.connection?(F(),B("div",Qb,[O[12]||(O[12]=d("span",{class:"text-gray-500"},"ISP",-1)),d("span",null,H((($=c.value.connection)==null?void 0:$.isp)||"-"),1)])):pe("",!0)])):pe("",!0)]),d("div",Zb,[O[15]||(O[15]=d("h3",{class:"font-semibold mb-3"},"数据备份",-1)),d("div",e0,[d("button",{class:"px-4 py-2 bg-green-600 text-white rounded-lg text-sm hover:bg-green-700",onClick:x},"导出全部"),d("label",t0,[O[14]||(O[14]=ts(" 导入备份 ",-1)),d("input",{type:"file",accept:".json",class:"hidden",onChange:A},null,32)])])]),h.value?(F(),B("div",{key:0,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",h.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(h.value.msg),3)):pe("",!0)])}}},s0={key:0,class:"text-gray-400 text-sm"},r0={key:1,class:"space-y-4"},o0={class:"bg-white rounded-lg p-4 shadow-sm border"},i0={class:"space-y-3"},l0={class:"flex items-center gap-2"},a0={class:"bg-white rounded-lg p-4 shadow-sm border"},c0={__name:"Settings",setup(e){const t=Z(null),n=Z(!0),s=Z(null);function r(i,l="success"){s.value={msg:i,type:l},setTimeout(()=>s.value=null,2500)}async function o(){try{await vm(t.value),r("设置已保存")}catch(i){r(i.message,"error")}}return Xt(async()=>{try{const i=await xm();t.value=i.data}catch(i){r(i.message,"error")}finally{n.value=!1}}),(i,l)=>(F(),B("div",null,[l[16]||(l[16]=d("h2",{class:"text-xl font-bold mb-5"},"设置",-1)),n.value?(F(),B("div",s0,"加载中...")):(F(),B("div",r0,[d("div",o0,[l[13]||(l[13]=d("h3",{class:"font-semibold mb-3 text-sm"},"通用",-1)),d("div",i0,[d("div",null,[l[7]||(l[7]=d("label",{class:"block text-sm mb-1"},"默认 User-Agent",-1)),me(d("input",{"onUpdate:modelValue":l[0]||(l[0]=a=>t.value.defaultUserAgent=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[De,t.value.defaultUserAgent]])]),d("div",null,[l[8]||(l[8]=d("label",{class:"block text-sm mb-1"},"默认流量查询 User-Agent",-1)),me(d("input",{"onUpdate:modelValue":l[1]||(l[1]=a=>t.value.defaultFlowUserAgent=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[De,t.value.defaultFlowUserAgent]])]),d("div",null,[l[9]||(l[9]=d("label",{class:"block text-sm mb-1"},"请求超时 (ms)",-1)),me(d("input",{"onUpdate:modelValue":l[2]||(l[2]=a=>t.value.defaultTimeout=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[De,t.value.defaultTimeout]])]),d("div",null,[l[10]||(l[10]=d("label",{class:"block text-sm mb-1"},"后端并发数",-1)),me(d("input",{"onUpdate:modelValue":l[3]||(l[3]=a=>t.value.backendRequestConcurrency=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[De,t.value.backendRequestConcurrency]])]),d("div",null,[l[11]||(l[11]=d("label",{class:"block text-sm mb-1"},"远程缓存 TTL (秒)",-1)),me(d("input",{"onUpdate:modelValue":l[4]||(l[4]=a=>t.value.remoteCacheTtl=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[De,t.value.remoteCacheTtl]])]),d("div",l0,[me(d("input",{type:"checkbox",id:"cache-stale","onUpdate:modelValue":l[5]||(l[5]=a=>t.value.remoteCacheStaleOnError=a),class:"rounded"},null,512),[[zn,t.value.remoteCacheStaleOnError]]),l[12]||(l[12]=d("label",{for:"cache-stale",class:"text-sm"},"缓存过期时仍返回旧数据",-1))])])]),d("div",a0,[l[14]||(l[14]=d("h3",{class:"font-semibold mb-3 text-sm"},"节点信息 API",-1)),me(d("input",{"onUpdate:modelValue":l[6]||(l[6]=a=>t.value.nodeInfoApiUrl=a),placeholder:"https://ipwho.is/{ip}",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[De,t.value.nodeInfoApiUrl]]),l[15]||(l[15]=d("p",{class:"text-xs text-gray-400 mt-1"},"URL 中 {ip} 会被替换为查询的 IP",-1))]),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:o},"保存设置")])),s.value?(F(),B("div",{key:2,class:je(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",s.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},H(s.value.msg),3)):pe("",!0)]))}},u0=[{path:"/login",name:"login",component:yp,meta:{title:"登录"}},{path:"/",component:pp,children:[{path:"",name:"dashboard",component:eg,meta:{title:"概览"}},{path:"sources",name:"sources",component:uy,meta:{title:"订阅源"}},{path:"collections",name:"collections",component:ib,meta:{title:"合集"}},{path:"templates",name:"templates",component:Cb,meta:{title:"模板"}},{path:"recycle-bin",name:"recycle-bin",component:Ub,meta:{title:"回收站"}},{path:"tools",name:"tools",component:n0,meta:{title:"工具"}},{path:"settings",name:"settings",component:c0,meta:{title:"设置"}}]},{path:"/:pathMatch(.*)*",name:"not-found",component:xp}],dc=Qd({history:Pd(),routes:u0});dc.beforeEach((e,t,n)=>{if(e.name==="login"||e.name==="not-found")return n();const s=xo(),r=Ua(),o=np();if(!s||!r||!o)return n({name:"login",query:{redirect:e.fullPath}});n()});const To=Bf(Wf);To.use(Kf());To.use(dc);To.mount("#app"); diff --git a/frontend/dist/assets/index-CtUpN0Ye.js b/frontend/dist/assets/index-CtUpN0Ye.js deleted file mode 100644 index f8935b5..0000000 --- a/frontend/dist/assets/index-CtUpN0Ye.js +++ /dev/null @@ -1,37 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** -* @vue/shared v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Wr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Re={},gn=[],Rt=()=>{},nl=()=>!1,Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ms=e=>e.startsWith("onUpdate:"),Le=Object.assign,Gr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},fu=Object.prototype.hasOwnProperty,xe=(e,t)=>fu.call(e,t),Z=Array.isArray,yn=e=>is(e)==="[object Map]",Pn=e=>is(e)==="[object Set]",No=e=>is(e)==="[object Date]",oe=e=>typeof e=="function",Oe=e=>typeof e=="string",pt=e=>typeof e=="symbol",_e=e=>e!==null&&typeof e=="object",sl=e=>(_e(e)||oe(e))&&oe(e.then)&&oe(e.catch),rl=Object.prototype.toString,is=e=>rl.call(e),du=e=>is(e).slice(8,-1),ol=e=>is(e)==="[object Object]",zr=e=>Oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Hn=Wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Vs=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},pu=/-\w/g,Ze=Vs(e=>e.replace(pu,t=>t.slice(1).toUpperCase())),hu=/\B([A-Z])/g,Jt=Vs(e=>e.replace(hu,"-$1").toLowerCase()),Bs=Vs(e=>e.charAt(0).toUpperCase()+e.slice(1)),sr=Vs(e=>e?`on${Bs(e)}`:""),St=(e,t)=>!Object.is(e,t),bs=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},js=e=>{const t=parseFloat(e);return isNaN(t)?e:t},mu=e=>{const t=Oe(e)?Number(e):NaN;return isNaN(t)?e:t};let Io;const Hs=()=>Io||(Io=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Jr(e){if(Z(e)){const t={};for(let n=0;n{if(n){const s=n.split(yu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Be(e){let t="";if(Oe(e))t=e;else if(Z(e))for(let n=0;nWt(n,t))}const al=e=>!!(e&&e.__v_isRef===!0),G=e=>Oe(e)?e:e==null?"":Z(e)||_e(e)&&(e.toString===rl||!oe(e.toString))?al(e)?G(e.value):JSON.stringify(e,ul,2):String(e),ul=(e,t)=>al(t)?ul(e,t.value):yn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[rr(s,o)+" =>"]=r,n),{})}:Pn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>rr(n))}:pt(t)?rr(t):_e(t)&&!Z(t)&&!ol(t)?String(t):t,rr=(e,t="")=>{var n;return pt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Fe;class cl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Fe&&(Fe.active?(this.parent=Fe,this.index=(Fe.scopes||(Fe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Fe===this)Fe=this.prevScope;else{let t=Fe;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.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(Kn){let t=Kn;for(Kn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;qn;){let t=qn;for(qn=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 hl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ml(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Zr(s),Ru(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Er(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(gl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function gl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Jn)||(e.globalVersion=Jn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Er(e))))return;e.flags|=2;const t=e.dep,n=Ce,s=ct;Ce=e,ct=!0;try{hl(e);const r=e.fn(e._value);(t.version===0||St(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{Ce=n,ct=s,ml(e),e.flags&=-3}}function Zr(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)Zr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ru(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ct=!0;const yl=[];function Lt(){yl.push(ct),ct=!1}function Ut(){const e=yl.pop();ct=e===void 0?!0:e}function ko(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ce;Ce=void 0;try{t()}finally{Ce=n}}}let Jn=0;class Cu{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 eo{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||!ct||Ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ce)n=this.activeLink=new Cu(Ce,this),Ce.deps?(n.prevDep=Ce.depsTail,Ce.depsTail.nextDep=n,Ce.depsTail=n):Ce.deps=Ce.depsTail=n,bl(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++,Jn++,this.notify(t)}notify(t){Qr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Yr()}}}function bl(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)bl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Sr=new WeakMap,on=Symbol(""),Rr=Symbol(""),Xn=Symbol("");function qe(e,t,n){if(ct&&Ce){let s=Sr.get(e);s||Sr.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new eo),r.map=s,r.key=n),r.track()}}function It(e,t,n,s,r,o){const i=Sr.get(e);if(!i){Jn++;return}const l=a=>{a&&a.trigger()};if(Qr(),t==="clear")i.forEach(l);else{const a=Z(e),c=a&&zr(n);if(a&&n==="length"){const u=Number(s);i.forEach((f,p)=>{(p==="length"||p===Xn||!pt(p)&&p>=u)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),c&&l(i.get(Xn)),t){case"add":a?c&&l(i.get("length")):(l(i.get(on)),yn(e)&&l(i.get(Rr)));break;case"delete":a||(l(i.get(on)),yn(e)&&l(i.get(Rr)));break;case"set":yn(e)&&l(i.get(on));break}}Yr()}function dn(e){const t=me(e);return t===e?t:(qe(t,"iterate",Xn),lt(e)?t:t.map(ht))}function qs(e){return qe(e=me(e),"iterate",Xn),e}function wt(e,t){return Ft(e)?En(ln(e)?ht(t):t):ht(t)}const Au={__proto__:null,[Symbol.iterator](){return ir(this,Symbol.iterator,e=>wt(this,e))},concat(...e){return dn(this).concat(...e.map(t=>Z(t)?dn(t):t))},entries(){return ir(this,"entries",e=>(e[1]=wt(this,e[1]),e))},every(e,t){return At(this,"every",e,t,void 0,arguments)},filter(e,t){return At(this,"filter",e,t,n=>n.map(s=>wt(this,s)),arguments)},find(e,t){return At(this,"find",e,t,n=>wt(this,n),arguments)},findIndex(e,t){return At(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return At(this,"findLast",e,t,n=>wt(this,n),arguments)},findLastIndex(e,t){return At(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return At(this,"forEach",e,t,void 0,arguments)},includes(...e){return lr(this,"includes",e)},indexOf(...e){return lr(this,"indexOf",e)},join(e){return dn(this).join(e)},lastIndexOf(...e){return lr(this,"lastIndexOf",e)},map(e,t){return At(this,"map",e,t,void 0,arguments)},pop(){return Dn(this,"pop")},push(...e){return Dn(this,"push",e)},reduce(e,...t){return Do(this,"reduce",e,t)},reduceRight(e,...t){return Do(this,"reduceRight",e,t)},shift(){return Dn(this,"shift")},some(e,t){return At(this,"some",e,t,void 0,arguments)},splice(...e){return Dn(this,"splice",e)},toReversed(){return dn(this).toReversed()},toSorted(e){return dn(this).toSorted(e)},toSpliced(...e){return dn(this).toSpliced(...e)},unshift(...e){return Dn(this,"unshift",e)},values(){return ir(this,"values",e=>wt(this,e))}};function ir(e,t,n){const s=qs(e),r=s[t]();return s!==e&&!lt(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const Ou=Array.prototype;function At(e,t,n,s,r,o){const i=qs(e),l=i!==e&&!lt(e),a=i[t];if(a!==Ou[t]){const f=a.apply(e,o);return l?ht(f):f}let c=n;i!==e&&(l?c=function(f,p){return n.call(this,wt(e,f),p,e)}:n.length>2&&(c=function(f,p){return n.call(this,f,p,e)}));const u=a.call(i,c,s);return l&&r?r(u):u}function Do(e,t,n,s){const r=qs(e),o=r!==e&&!lt(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(c,u,f){return l&&(l=!1,c=wt(e,c)),n.call(this,c,wt(e,u),f,e)}):n.length>3&&(i=function(c,u,f){return n.call(this,c,u,f,e)}));const a=r[t](i,...s);return l?wt(e,a):a}function lr(e,t,n){const s=me(e);qe(s,"iterate",Xn);const r=s[t](...n);return(r===-1||r===!1)&&so(n[0])?(n[0]=me(n[0]),s[t](...n)):r}function Dn(e,t,n=[]){Lt(),Qr();const s=me(e)[t].apply(e,n);return Yr(),Ut(),s}const Tu=Wr("__proto__,__v_isRef,__isVue"),xl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(pt));function Pu(e){pt(e)||(e=String(e));const t=me(this);return qe(t,"has",e),t.hasOwnProperty(e)}class vl{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?Vu:Sl:o?El:wl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=Z(t);if(!r){let a;if(i&&(a=Au[n]))return a;if(n==="hasOwnProperty")return Pu}const l=Reflect.get(t,n,Ge(t)?t:s);if((pt(n)?xl.has(n):Tu(n))||(r||qe(t,"get",n),o))return l;if(Ge(l)){const a=i&&zr(n)?l:l.value;return r&&_e(a)?Ar(a):a}return _e(l)?r?Ar(l):Ct(l):l}}class _l extends vl{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=Z(t)&&zr(n);if(!this._isShallow){const c=Ft(o);if(!lt(s)&&!Ft(s)&&(o=me(o),s=me(s)),!i&&Ge(o)&&!Ge(s))return c||(o.value=s),!0}const l=i?Number(n)e,ps=e=>Reflect.getPrototypeOf(e);function $u(e,t,n){return function(...s){const r=this.__v_raw,o=me(r),i=yn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=r[e](...s),u=n?Cr:t?En:ht;return!t&&qe(o,"iterate",a?Rr:on),Le(Object.create(c),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:l?[u(f[0]),u(f[1])]:u(f),done:p}}})}}function hs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Lu(e,t){const n={get(r){const o=this.__v_raw,i=me(o),l=me(r);e||(St(r,l)&&qe(i,"get",r),qe(i,"get",l));const{has:a}=ps(i),c=t?Cr:e?En:ht;if(a.call(i,r))return c(o.get(r));if(a.call(i,l))return c(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&qe(me(r),"iterate",on),r.size},has(r){const o=this.__v_raw,i=me(o),l=me(r);return e||(St(r,l)&&qe(i,"has",r),qe(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=me(l),c=t?Cr:e?En:ht;return!e&&qe(a,"iterate",on),l.forEach((u,f)=>r.call(o,c(u),c(f),i))}};return Le(n,e?{add:hs("add"),set:hs("set"),delete:hs("delete"),clear:hs("clear")}:{add(r){const o=me(this),i=ps(o),l=me(r),a=!t&&!lt(r)&&!Ft(r)?l:r;return i.has.call(o,a)||St(r,a)&&i.has.call(o,r)||St(l,a)&&i.has.call(o,l)||(o.add(a),It(o,"add",a,a)),this},set(r,o){!t&&!lt(o)&&!Ft(o)&&(o=me(o));const i=me(this),{has:l,get:a}=ps(i);let c=l.call(i,r);c||(r=me(r),c=l.call(i,r));const u=a.call(i,r);return i.set(r,o),c?St(o,u)&&It(i,"set",r,o):It(i,"add",r,o),this},delete(r){const o=me(this),{has:i,get:l}=ps(o);let a=i.call(o,r);a||(r=me(r),a=i.call(o,r)),l&&l.call(o,r);const c=o.delete(r);return a&&It(o,"delete",r,void 0),c},clear(){const r=me(this),o=r.size!==0,i=r.clear();return o&&It(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=$u(r,e,t)}),n}function to(e,t){const n=Lu(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(xe(n,r)&&r in s?n:s,r,o)}const Uu={get:to(!1,!1)},Fu={get:to(!1,!0)},Mu={get:to(!0,!1)};const wl=new WeakMap,El=new WeakMap,Sl=new WeakMap,Vu=new WeakMap;function Bu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ct(e){return Ft(e)?e:no(e,!1,Iu,Uu,wl)}function Rl(e){return no(e,!1,Du,Fu,El)}function Ar(e){return no(e,!0,ku,Mu,Sl)}function no(e,t,n,s,r){if(!_e(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=r.get(e);if(o)return o;const i=Bu(du(e));if(i===0)return e;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ln(e){return Ft(e)?ln(e.__v_raw):!!(e&&e.__v_isReactive)}function Ft(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function so(e){return e?!!e.__v_raw:!1}function me(e){const t=e&&e.__v_raw;return t?me(t):e}function Cl(e){return!xe(e,"__v_skip")&&Object.isExtensible(e)&&il(e,"__v_skip",!0),e}const ht=e=>_e(e)?Ct(e):e,En=e=>_e(e)?Ar(e):e;function Ge(e){return e?e.__v_isRef===!0:!1}function Y(e){return Al(e,!1)}function ju(e){return Al(e,!0)}function Al(e,t){return Ge(e)?e:new Hu(e,t)}class Hu{constructor(t,n){this.dep=new eo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:me(t),this._value=n?t:ht(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||lt(t)||Ft(t);t=s?t:me(t),St(t,n)&&(this._rawValue=t,this._value=s?t:ht(t),this.dep.trigger())}}function bn(e){return Ge(e)?e.value:e}const qu={get:(e,t,n)=>t==="__v_raw"?e:bn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Ge(r)&&!Ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ol(e){return ln(e)?e:new Proxy(e,qu)}class Ku{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new eo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Jn-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 pl(this,!0),!0}get value(){const t=this.dep.track();return gl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Wu(e,t,n=!1){let s,r;return oe(e)?s=e:(s=e.get,r=e.set),new Ku(s,r,n)}const ms={},Rs=new WeakMap;let en;function Gu(e,t=!1,n=en){if(n){let s=Rs.get(n);s||Rs.set(n,s=[]),s.push(e)}}function zu(e,t,n=Re){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,c=S=>r?S:lt(S)||r===!1||r===0?kt(S,1):kt(S);let u,f,p,m,A=!1,P=!1;if(Ge(e)?(f=()=>e.value,A=lt(e)):ln(e)?(f=()=>c(e),A=!0):Z(e)?(P=!0,A=e.some(S=>ln(S)||lt(S)),f=()=>e.map(S=>{if(Ge(S))return S.value;if(ln(S))return c(S);if(oe(S))return a?a(S,2):S()})):oe(e)?t?f=a?()=>a(e,2):e:f=()=>{if(p){Lt();try{p()}finally{Ut()}}const S=en;en=u;try{return a?a(e,3,[m]):e(m)}finally{en=S}}:f=Rt,t&&r){const S=f,x=r===!0?1/0:r;f=()=>kt(S(),x)}const w=Su(),v=()=>{u.stop(),w&&w.active&&Gr(w.effects,u)};if(o&&t){const S=t;t=(...x)=>{const _=S(...x);return v(),_}}let R=P?new Array(e.length).fill(ms):ms;const k=S=>{if(!(!(u.flags&1)||!u.dirty&&!S))if(t){const x=u.run();if(S||r||A||(P?x.some((_,O)=>St(_,R[O])):St(x,R))){p&&p();const _=en;en=u;try{const O=[x,R===ms?void 0:P&&R[0]===ms?[]:R,m];R=x,a?a(t,3,O):t(...O)}finally{en=_}}}else u.run()};return l&&l(k),u=new fl(f),u.scheduler=i?()=>i(k,!1):k,m=S=>Gu(S,!1,u),p=u.onStop=()=>{const S=Rs.get(u);if(S){if(a)a(S,4);else for(const x of S)x();Rs.delete(u)}},t?s?k(!0):R=u.run():i?i(k.bind(null,!0),!0):u.run(),v.pause=u.pause.bind(u),v.resume=u.resume.bind(u),v.stop=v,v}function kt(e,t=1/0,n){if(t<=0||!_e(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ge(e))kt(e.value,t,n);else if(Z(e))for(let s=0;s{kt(s,t,n)});else if(ol(e)){for(const s in e)kt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&kt(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function ls(e,t,n,s){try{return s?e(...s):e()}catch(r){Ks(r,t,n)}}function ut(e,t,n,s){if(oe(e)){const r=ls(e,t,n,s);return r&&sl(r)&&r.catch(o=>{Ks(o,t,n)}),r}if(Z(e)){const r=[];for(let o=0;o>>1,r=Ye[s],o=Qn(r);o=Qn(n)?Ye.push(e):Ye.splice(Xu(t),0,e),e.flags|=1,Pl()}}function Pl(){Cs||(Cs=Tl.then(Il))}function Qu(e){Z(e)?xn.push(...e):qt&&e.id===-1?qt.splice(hn+1,0,e):e.flags&1||(xn.push(e),e.flags|=1),Pl()}function $o(e,t,n=_t+1){for(;nQn(n)-Qn(s));if(xn.length=0,qt){qt.push(...t);return}for(qt=t,hn=0;hne.id==null?e.flags&2?-1:1/0:e.id;function Il(e){try{for(_t=0;_t{s._d&&Ps(-1);const o=As(t),i=$t.length;let l;try{l=e(...r)}finally{for(let a=$t.length;a>i;a--)uo();As(o),s._d&&Ps(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function ae(e,t){if(je===null)return e;const n=Xs(je),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&oe(t)?t.call(s&&s.proxy):t}}const Yu=Symbol.for("v-scx"),Zu=()=>dt(Yu);function vs(e,t,n){return Dl(e,t,n)}function Dl(e,t,n=Re){const{immediate:s,deep:r,flush:o,once:i}=n,l=Le({},n),a=t&&s||!t&&o!=="post";let c;if(ns){if(o==="sync"){const m=Zu();c=m.__watcherHandles||(m.__watcherHandles=[])}else if(!a){const m=()=>{};return m.stop=Rt,m.resume=Rt,m.pause=Rt,m}}const u=We;l.call=(m,A,P)=>ut(m,u,A,P);let f=!1;o==="post"?l.scheduler=m=>{Xe(m,u&&u.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(m,A)=>{A?m():oo(m)}),l.augmentJob=m=>{t&&(m.flags|=4),f&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const p=zu(e,t,l);return ns&&(c?c.push(p):a&&p()),p}function ec(e,t,n){const s=this.proxy,r=Oe(e)?e.includes(".")?$l(s,e):()=>s[e]:e.bind(s,s);let o;oe(t)?o=t:(o=t.handler,n=t);const i=as(this),l=Dl(r,o.bind(s),n);return i(),l}function $l(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,tn=e=>e&&(e.disabled||e.disabled===""),tc=e=>e&&(e.defer||e.defer===""),Lo=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Uo=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Or=(e,t)=>{const n=e&&e.to;return Oe(n)?t?t(n):null:n},nc={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,c){const{mc:u,pc:f,pbc:p,o:{insert:m,querySelector:A,createText:P,createComment:w,parentNode:v}}=c,R=tn(t.props);let{dynamicChildren:k}=t;const S=(O,te,B)=>{O.shapeFlag&16&&u(O.children,te,B,r,o,i,l,a)},x=(O=t)=>{const te=tn(O.props),B=O.target=Or(O.props,A),ee=Tr(B,O,P,m);B&&(i!=="svg"&&Lo(B)?i="svg":i!=="mathml"&&Uo(B)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(B),te||(S(O,B,ee),Mn(O,!1)))},_=O=>{const te=()=>{if(Ht.get(O)===te){if(Ht.delete(O),tn(O.props)){const B=v(O.el)||n;S(O,B,O.anchor),Mn(O,!0)}x(O)}};Ht.set(O,te),Xe(te,o)};if(e==null){const O=t.el=P(""),te=t.anchor=P("");if(m(O,n,s),m(te,n,s),tc(t.props)||o&&o.pendingBranch){_(t);return}R&&(S(t,n,te),Mn(t,!0)),x()}else{t.el=e.el;const O=t.anchor=e.anchor,te=Ht.get(e);if(te){te.flags|=8,Ht.delete(e),_(t);return}t.targetStart=e.targetStart;const B=t.target=e.target,ee=t.targetAnchor=e.targetAnchor,re=tn(e.props),H=re?n:B,ie=re?O:ee;if(i==="svg"||Lo(B)?i="svg":(i==="mathml"||Uo(B))&&(i="mathml"),k?(p(e.dynamicChildren,k,H,r,o,i,l),ao(e,t,!0)):a||f(e,t,H,ie,r,o,i,l,!1),R)re?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):gs(t,n,O,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const ce=Or(t.props,A);ce&&(t.target=ce,gs(t,ce,null,c,0))}else re&&gs(t,B,ee,c,1);Mn(t,R)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:c,targetAnchor:u,target:f,props:p}=e,m=tn(p),A=o||!m,P=Ht.get(e);if(P&&(P.flags|=8,Ht.delete(e)),f&&(r(c),r(u)),o&&r(a),!P&&(m||f)&&i&16)for(let w=0;w{e.isMounted=!0}),Gl(()=>{e.isUnmounting=!0}),e}const ot=[Function,Array],Ml={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ot,onEnter:ot,onAfterEnter:ot,onEnterCancelled:ot,onBeforeLeave:ot,onLeave:ot,onAfterLeave:ot,onLeaveCancelled:ot,onBeforeAppear:ot,onAppear:ot,onAfterAppear:ot,onAppearCancelled:ot},Vl=e=>{const t=e.subTree;return t.component?Vl(t.component):t},oc={name:"BaseTransition",props:Ml,setup(e,{slots:t}){const n=ya(),s=rc();return()=>{const r=t.default&&Hl(t.default(),!0),o=r&&r.length?Bl(r):n.subTree?he():void 0;if(!o)return;const i=me(e),{mode:l}=i;if(s.isLeaving)return ar(o);const a=Fo(o);if(!a)return ar(o);let c=Pr(a,i,s,n,f=>c=f);a.type!==Ke&&Yn(a,c);let u=n.subTree&&Fo(n.subTree);if(u&&u.type!==Ke&&!nn(u,a)&&Vl(n).type!==Ke){let f=Pr(u,i,s,n);if(Yn(u,f),l==="out-in"&&a.type!==Ke)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},ar(o);l==="in-out"&&a.type!==Ke?f.delayLeave=(p,m,A)=>{const P=jl(s,u);P[String(u.key)]=u,p[it]=()=>{m(),p[it]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{A(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function Bl(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ke){t=n;break}}return t}const ic=oc;function jl(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 Pr(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:p,onLeave:m,onAfterLeave:A,onLeaveCancelled:P,onBeforeAppear:w,onAppear:v,onAfterAppear:R,onAppearCancelled:k}=t,S=String(e.key),x=jl(n,e),_=(B,ee)=>{B&&ut(B,s,9,ee)},O=(B,ee)=>{const re=ee[1];_(B,ee),Z(B)?B.every(H=>H.length<=1)&&re():B.length<=1&&re()},te={mode:i,persisted:l,beforeEnter(B){let ee=a;if(!n.isMounted)if(o)ee=w||a;else return;B[it]&&B[it](!0);const re=x[S];re&&nn(e,re)&&re.el[it]&&re.el[it](),_(ee,[B])},enter(B){if(x[S]===e)return;let ee=c,re=u,H=f;if(!n.isMounted)if(o)ee=v||c,re=R||u,H=k||f;else return;let ie=!1;B[$n]=Ie=>{ie||(ie=!0,Ie?_(H,[B]):_(re,[B]),te.delayedLeave&&te.delayedLeave(),B[$n]=void 0)};const ce=B[$n].bind(null,!1);ee?O(ee,[B,ce]):ce()},leave(B,ee){const re=String(e.key);if(B[$n]&&B[$n](!0),n.isUnmounting)return ee();_(p,[B]);let H=!1;B[it]=ce=>{H||(H=!0,ee(),ce?_(P,[B]):_(A,[B]),B[it]=void 0,x[re]===e&&delete x[re])};const ie=B[it].bind(null,!1);x[re]=e,m?O(m,[B,ie]):ie()},clone(B){const ee=Pr(B,t,n,s,r);return r&&r(ee),ee}};return te}function ar(e){if(Ws(e))return e=Gt(e),e.children=null,e}function Fo(e){if(!Ws(e))return Ul(e.type)&&e.children?Bl(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&&oe(n.default))return n.default()}}function Yn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yn(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 Hl(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oWn(P,t&&(Z(t)?t[w]:t),n,s,r));return}if(vn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Wn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?Xs(s.component):s.el,i=r?null:o,{i:l,r:a}=e,c=t&&t.r,u=l.refs===Re?l.refs={}:l.refs,f=l.setupState,p=me(f),m=f===Re?nl:P=>Mo(u,P)?!1:xe(p,P),A=(P,w)=>!(w&&Mo(u,w));if(c!=null&&c!==a){if(Vo(t),Oe(c))u[c]=null,m(c)&&(f[c]=null);else if(Ge(c)){const P=t;A(c,P.k)&&(c.value=null),P.k&&(u[P.k]=null)}}if(oe(a))ls(a,l,12,[i,u]);else{const P=Oe(a),w=Ge(a);if(P||w){const v=()=>{if(e.f){const R=P?m(a)?f[a]:u[a]:A()||!e.k?a.value:u[e.k];if(r)Z(R)&&Gr(R,o);else if(Z(R))R.includes(o)||R.push(o);else if(P)u[a]=[o],m(a)&&(f[a]=u[a]);else{const k=[o];A(a,e.k)&&(a.value=k),e.k&&(u[e.k]=k)}}else P?(u[a]=i,m(a)&&(f[a]=i)):w&&(A(a,e.k)&&(a.value=i),e.k&&(u[e.k]=i))};if(i){const R=()=>{v(),Os.delete(e)};R.id=-1,Os.set(e,R),Xe(R,n)}else Vo(e),v()}}}function Vo(e){const t=Os.get(e);t&&(t.flags|=8,Os.delete(e))}Hs().requestIdleCallback;Hs().cancelIdleCallback;const vn=e=>!!e.type.__asyncLoader,Ws=e=>e.type.__isKeepAlive;function lc(e,t){Wl(e,"a",t)}function ac(e,t){Wl(e,"da",t)}function Wl(e,t,n=We){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Gs(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Ws(r.parent.vnode)&&uc(s,t,n,r),r=r.parent}}function uc(e,t,n,s){const r=Gs(t,e,s,!0);zl(()=>{Gr(s[t],r)},n)}function Gs(e,t,n=We,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Lt();const l=as(n),a=ut(t,n,e,i);return l(),Ut(),a});return s?r.unshift(o):r.push(o),o}}const Mt=e=>(t,n=We)=>{(!ns||e==="sp")&&Gs(e,(...s)=>t(...s),n)},cc=Mt("bm"),Vt=Mt("m"),fc=Mt("bu"),dc=Mt("u"),Gl=Mt("bum"),zl=Mt("um"),pc=Mt("sp"),hc=Mt("rtg"),mc=Mt("rtc");function gc(e,t=We){Gs("ec",e,t)}const Jl="components";function Nr(e,t){return Ql(Jl,e,!0,t)||e}const Xl=Symbol.for("v-ndc");function yc(e){return Oe(e)?Ql(Jl,e,!1)||e:e||Xl}function Ql(e,t,n=!0,s=!1){const r=je||We;if(r){const o=r.type;{const l=ef(o,!1);if(l&&(l===t||l===Ze(t)||l===Bs(Ze(t))))return o}const i=Bo(r[e]||o[e],t)||Bo(r.appContext[e],t);return!i&&s?o:i}}function Bo(e,t){return e&&(e[t]||e[Ze(t)]||e[Bs(Ze(t))])}function Me(e,t,n,s){let r;const o=n,i=Z(e);if(i||Oe(e)){const l=i&&ln(e);let a=!1,c=!1;l&&(a=!lt(e),c=Ft(e),e=qs(e)),r=new Array(e.length);for(let u=0,f=e.length;ut(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,c=l.length;a0;return t!=="default"&&(c.name=t),L(),un(ve,null,[Ae("slot",c,s)],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1);const l=$t.length;L();let a;try{const c=i&&Yl(i(n)),u=n.key||o||c&&c.key;a=un(ve,{key:(u&&!pt(u)?u:`_${t}`)+(!c&&s?"_fb":"")},c||(s?s():[]),c&&e._===1?64:-2)}catch(c){for(let u=$t.length;u>l;u--)uo();throw c}finally{i&&i._c&&(i._d=!0)}return a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),a}function Yl(e){return e.some(t=>es(t)?!(t.type===Ke||t.type===ve&&!Yl(t.children)):!0)?e:null}const Ir=e=>e?ba(e)?Xs(e):Ir(e.parent):null,Gn=Le(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=>Ir(e.parent),$root:e=>Ir(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ea(e),$forceUpdate:e=>e.f||(e.f=()=>{oo(e.update)}),$nextTick:e=>e.n||(e.n=ro.bind(e.proxy)),$watch:e=>ec.bind(e)}),ur=(e,t)=>e!==Re&&!e.__isScriptSetup&&xe(e,t),bc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(ur(s,t))return i[t]=1,s[t];if(r!==Re&&xe(r,t))return i[t]=2,r[t];if(xe(o,t))return i[t]=3,o[t];if(n!==Re&&xe(n,t))return i[t]=4,n[t];kr&&(i[t]=0)}}const c=Gn[t];let u,f;if(c)return t==="$attrs"&&qe(e.attrs,"get",""),c(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==Re&&xe(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,xe(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return ur(r,t)?(r[t]=n,!0):s!==Re&&xe(s,t)?(s[t]=n,!0):xe(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,props:o,type:i}},l){let a;return!!(n[l]||e!==Re&&l[0]!=="$"&&xe(e,l)||ur(t,l)||xe(o,l)||xe(s,l)||xe(Gn,l)||xe(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:xe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ho(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let kr=!0;function xc(e){const t=ea(e),n=e.proxy,s=e.ctx;kr=!1,t.beforeCreate&&qo(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:p,beforeUpdate:m,updated:A,activated:P,deactivated:w,beforeDestroy:v,beforeUnmount:R,destroyed:k,unmounted:S,render:x,renderTracked:_,renderTriggered:O,errorCaptured:te,serverPrefetch:B,expose:ee,inheritAttrs:re,components:H,directives:ie,filters:ce}=t;if(c&&vc(c,s,null),i)for(const fe in i){const ue=i[fe];oe(ue)&&(s[fe]=ue.bind(n))}if(r){const fe=r.call(n,n);_e(fe)&&(e.data=Ct(fe))}if(kr=!0,o)for(const fe in o){const ue=o[fe],et=oe(ue)?ue.bind(n,n):oe(ue.get)?ue.get.bind(n,n):Rt,De=!oe(ue)&&oe(ue.set)?ue.set.bind(n):Rt,D=tt({get:et,set:De});Object.defineProperty(s,fe,{enumerable:!0,configurable:!0,get:()=>D.value,set:I=>D.value=I})}if(l)for(const fe in l)Zl(l[fe],s,n,fe);if(a){const fe=oe(a)?a.call(n):a;Reflect.ownKeys(fe).forEach(ue=>{xs(ue,fe[ue])})}u&&qo(u,e,"c");function we(fe,ue){Z(ue)?ue.forEach(et=>fe(et.bind(n))):ue&&fe(ue.bind(n))}if(we(cc,f),we(Vt,p),we(fc,m),we(dc,A),we(lc,P),we(ac,w),we(gc,te),we(mc,_),we(hc,O),we(Gl,R),we(zl,S),we(pc,B),Z(ee))if(ee.length){const fe=e.exposed||(e.exposed={});ee.forEach(ue=>{Object.defineProperty(fe,ue,{get:()=>n[ue],set:et=>n[ue]=et,enumerable:!0})})}else e.exposed||(e.exposed={});x&&e.render===Rt&&(e.render=x),re!=null&&(e.inheritAttrs=re),H&&(e.components=H),ie&&(e.directives=ie),B&&Kl(e)}function vc(e,t,n=Rt){Z(e)&&(e=Dr(e));for(const s in e){const r=e[s];let o;_e(r)?"default"in r?o=dt(r.from||s,r.default,!0):o=dt(r.from||s):o=dt(r),Ge(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function qo(e,t,n){ut(Z(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Zl(e,t,n,s){let r=s.includes(".")?$l(n,s):()=>n[s];if(Oe(e)){const o=t[e];oe(o)&&vs(r,o)}else if(oe(e))vs(r,e.bind(n));else if(_e(e))if(Z(e))e.forEach(o=>Zl(o,t,n,s));else{const o=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(o)&&vs(r,o,e)}}function ea(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(c=>Ts(a,c,i,!0)),Ts(a,t,i)),_e(t)&&o.set(t,a),a}function Ts(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Ts(e,o,n,!0),r&&r.forEach(i=>Ts(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=_c[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const _c={data:Ko,props:Wo,emits:Wo,methods:Vn,computed:Vn,beforeCreate:Je,created:Je,beforeMount:Je,mounted:Je,beforeUpdate:Je,updated:Je,beforeDestroy:Je,beforeUnmount:Je,destroyed:Je,unmounted:Je,activated:Je,deactivated:Je,errorCaptured:Je,serverPrefetch:Je,components:Vn,directives:Vn,watch:Ec,provide:Ko,inject:wc};function Ko(e,t){return t?e?function(){return Le(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function wc(e,t){return Vn(Dr(e),Dr(t))}function Dr(e){if(Z(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ze(t)}Modifiers`]||e[`${Jt(t)}Modifiers`];function Ac(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Re;let r=n;const o=t.startsWith("update:"),i=o&&Cc(s,t.slice(7));i&&(i.trim&&(r=n.map(u=>Oe(u)?u.trim():u)),i.number&&(r=n.map(js)));let l,a=s[l=sr(t)]||s[l=sr(Ze(t))];!a&&o&&(a=s[l=sr(Jt(t))]),a&&ut(a,e,6,r);const c=s[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ut(c,e,6,r)}}const Oc=new WeakMap;function na(e,t,n=!1){const s=n?Oc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!oe(e)){const a=c=>{const u=na(c,t,!0);u&&(l=!0,Le(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(_e(e)&&s.set(e,null),null):(Z(o)?o.forEach(a=>i[a]=null):Le(i,o),_e(e)&&s.set(e,i),i)}function zs(e,t){return!e||!Fs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),xe(e,t[0].toLowerCase()+t.slice(1))||xe(e,Jt(t))||xe(e,t))}function Go(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:c,renderCache:u,props:f,data:p,setupState:m,ctx:A,inheritAttrs:P}=e,w=As(e);let v,R;try{if(n.shapeFlag&4){const S=r||s,x=S;v=Et(c.call(x,S,u,f,m,p,A)),R=l}else{const S=t;v=Et(S.length>1?S(f,{attrs:l,slots:i,emit:a}):S(f,null)),R=t.props?l:Tc(l)}}catch(S){$t.length=0,Ks(S,e,1),v=Ae(Ke)}let k=v;if(R&&P!==!1){const S=Object.keys(R),{shapeFlag:x}=k;S.length&&x&7&&(o&&S.some(Ms)&&(R=Pc(R,o)),k=Gt(k,R,!1,!0))}return n.dirs&&(k=Gt(k,null,!1,!0),k.dirs=k.dirs?k.dirs.concat(n.dirs):n.dirs),n.transition&&Yn(k,n.transition),v=k,As(w),v}const Tc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Fs(n))&&((t||(t={}))[n]=e[n]);return t},Pc=(e,t)=>{const n={};for(const s in e)(!Ms(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Nc(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?zo(s,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fObject.create(ra),ia=e=>Object.getPrototypeOf(e)===ra;function kc(e,t,n,s=!1){const r={},o=oa();e.propsDefaults=Object.create(null),la(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:Rl(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function Dc(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=me(r),[a]=e.propsOptions;let c=!1;if((s||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[p,m]=aa(f,t,!0);Le(i,p),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return _e(e)&&s.set(e,gn),gn;if(Z(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",lo=e=>Z(e)?e.map(Et):[Et(e)],Lc=(e,t,n)=>{if(t._n)return t;const s=ft((...r)=>lo(t(...r)),n);return s._c=!1,s},ua=(e,t,n)=>{const s=e._ctx;for(const r in e){if(io(r))continue;const o=e[r];if(oe(o))t[r]=Lc(r,o,s);else if(o!=null){const i=lo(o);t[r]=()=>i}}},ca=(e,t)=>{const n=lo(t);e.slots.default=()=>n},fa=(e,t,n)=>{for(const s in t)(n||!io(s))&&(e[s]=t[s])},Uc=(e,t,n)=>{const s=e.slots=oa();if(e.vnode.shapeFlag&32){const r=t._;r?(fa(s,t,n),n&&il(s,"_",r,!0)):ua(t,s)}else t&&ca(e,t)},Fc=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=Re;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:fa(r,t,n):(o=!t.$stable,ua(t,r)),i=t}else t&&(ca(e,t),i={default:1});if(o)for(const l in r)!io(l)&&i[l]==null&&delete r[l]},Xe=Hc;function Mc(e){return Vc(e)}function Vc(e,t){const n=Hs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:p,setScopeId:m=Rt,insertStaticContent:A}=e,P=(h,g,b,N=null,E=null,T=null,V=void 0,F=null,M=!!g.dynamicChildren)=>{if(h===g)return;h&&!nn(h,g)&&(N=C(h),I(h,E,T,!0),h=null),g.patchFlag===-2&&(M=!1,g.dynamicChildren=null);const{type:$,ref:J,shapeFlag:z}=g;switch($){case Js:w(h,g,b,N);break;case Ke:v(h,g,b,N);break;case fr:h==null&&R(g,b,N,V);break;case ve:H(h,g,b,N,E,T,V,F,M);break;default:z&1?x(h,g,b,N,E,T,V,F,M):z&6?ie(h,g,b,N,E,T,V,F,M):(z&64||z&128)&&$.process(h,g,b,N,E,T,V,F,M,X)}J!=null&&E?Wn(J,h&&h.ref,T,g||h,!g):J==null&&h&&h.ref!=null&&Wn(h.ref,null,T,h,!0)},w=(h,g,b,N)=>{if(h==null)s(g.el=l(g.children),b,N);else{const E=g.el=h.el;g.children!==h.children&&c(E,g.children)}},v=(h,g,b,N)=>{h==null?s(g.el=a(g.children||""),b,N):g.el=h.el},R=(h,g,b,N)=>{[h.el,h.anchor]=A(h.children,g,b,N,h.el,h.anchor)},k=({el:h,anchor:g},b,N)=>{let E;for(;h&&h!==g;)E=p(h),s(h,b,N),h=E;s(g,b,N)},S=({el:h,anchor:g})=>{let b;for(;h&&h!==g;)b=p(h),r(h),h=b;r(g)},x=(h,g,b,N,E,T,V,F,M)=>{if(g.type==="svg"?V="svg":g.type==="math"&&(V="mathml"),h==null)_(g,b,N,E,T,V,F,M);else{const $=h.el&&h.el._isVueCE?h.el:null;try{$&&$._beginPatch(),B(h,g,E,T,V,F,M)}finally{$&&$._endPatch()}}},_=(h,g,b,N,E,T,V,F)=>{let M,$;const{props:J,shapeFlag:z,transition:Q,dirs:se}=h;if(M=h.el=i(h.type,T,J&&J.is,J),z&8?u(M,h.children):z&16&&te(h.children,M,null,N,E,cr(h,T),V,F),se&&Xt(h,null,N,"created"),O(M,h,h.scopeId,V,N),J){for(const Se in J)Se!=="value"&&!Hn(Se)&&o(M,Se,null,J[Se],T,N);"value"in J&&o(M,"value",null,J.value,T),($=J.onVnodeBeforeMount)&&vt($,N,h)}se&&Xt(h,null,N,"beforeMount");const de=Bc(E,Q);de&&Q.beforeEnter(M),s(M,g,b),(($=J&&J.onVnodeMounted)||de||se)&&Xe(()=>{try{$&&vt($,N,h),de&&Q.enter(M),se&&Xt(h,null,N,"mounted")}finally{}},E)},O=(h,g,b,N,E)=>{if(b&&m(h,b),N)for(let T=0;T{for(let $=M;${const F=g.el=h.el;let{patchFlag:M,dynamicChildren:$,dirs:J}=g;M|=h.patchFlag&16;const z=h.props||Re,Q=g.props||Re;let se;if(b&&Qt(b,!1),(se=Q.onVnodeBeforeUpdate)&&vt(se,b,g,h),J&&Xt(g,h,b,"beforeUpdate"),b&&Qt(b,!0),$&&(!h.dynamicChildren||h.dynamicChildren.length!==$.length)&&(M=0,V=!1,$=null),(z.innerHTML&&Q.innerHTML==null||z.textContent&&Q.textContent==null)&&u(F,""),$?ee(h.dynamicChildren,$,F,b,N,cr(g,E),T):V||ue(h,g,F,null,b,N,cr(g,E),T,!1),M>0){if(M&16)re(F,z,Q,b,E);else if(M&2&&z.class!==Q.class&&o(F,"class",null,Q.class,E),M&4&&o(F,"style",z.style,Q.style,E),M&8){const de=g.dynamicProps;for(let Se=0;Se{se&&vt(se,b,g,h),J&&Xt(g,h,b,"updated")},N)},ee=(h,g,b,N,E,T,V)=>{for(let F=0;F{if(g!==b){if(g!==Re)for(const T in g)!Hn(T)&&!(T in b)&&o(h,T,g[T],null,E,N);for(const T in b){if(Hn(T))continue;const V=b[T],F=g[T];V!==F&&T!=="value"&&o(h,T,F,V,E,N)}"value"in b&&o(h,"value",g.value,b.value,E)}},H=(h,g,b,N,E,T,V,F,M)=>{const $=g.el=h?h.el:l(""),J=g.anchor=h?h.anchor:l("");let{patchFlag:z,dynamicChildren:Q,slotScopeIds:se}=g;se&&(F=F?F.concat(se):se),h==null?(s($,b,N),s(J,b,N),te(g.children||[],b,J,E,T,V,F,M)):z>0&&z&64&&Q&&h.dynamicChildren&&h.dynamicChildren.length===Q.length?(ee(h.dynamicChildren,Q,b,E,T,V,F),(g.key!=null||E&&g===E.subTree)&&ao(h,g,!0)):ue(h,g,b,J,E,T,V,F,M)},ie=(h,g,b,N,E,T,V,F,M)=>{g.slotScopeIds=F,h==null?g.shapeFlag&512?E.ctx.activate(g,b,N,V,M):ce(g,b,N,E,T,V,M):Ie(h,g,M)},ce=(h,g,b,N,E,T,V)=>{const F=h.component=Jc(h,N,E);if(Ws(h)&&(F.ctx.renderer=X),Xc(F,!1,V),F.asyncDep){if(E&&E.registerDep(F,we,V),!h.el){const M=F.subTree=Ae(Ke);v(null,M,g,b),h.placeholder=M.el}}else we(F,h,g,b,E,T,V)},Ie=(h,g,b)=>{const N=g.component=h.component;if(Nc(h,g,b))if(N.asyncDep&&!N.asyncResolved){fe(N,g,b);return}else N.next=g,N.update();else g.el=h.el,N.vnode=g},we=(h,g,b,N,E,T,V)=>{const F=()=>{if(h.isMounted){let{next:z,bu:Q,u:se,parent:de,vnode:Se}=h;{const bt=da(h);if(bt){z&&(z.el=Se.el,fe(h,z,V)),bt.asyncDep.then(()=>{Xe(()=>{h.isUnmounted||$()},E)});return}}let Ee=z,ke;Qt(h,!1),z?(z.el=Se.el,fe(h,z,V)):z=Se,Q&&bs(Q),(ke=z.props&&z.props.onVnodeBeforeUpdate)&&vt(ke,de,z,Se),Qt(h,!0);const Ue=Go(h),yt=h.subTree;h.subTree=Ue,P(yt,Ue,f(yt.el),C(yt),h,E,T),z.el=Ue.el,Ee===null&&Ic(h,Ue.el),se&&Xe(se,E),(ke=z.props&&z.props.onVnodeUpdated)&&Xe(()=>vt(ke,de,z,Se),E)}else{let z;const{el:Q,props:se}=g,{bm:de,m:Se,parent:Ee,root:ke,type:Ue}=h,yt=vn(g);Qt(h,!1),de&&bs(de),!yt&&(z=se&&se.onVnodeBeforeMount)&&vt(z,Ee,g),Qt(h,!0);{ke.ce&&ke.ce._hasShadowRoot()&&ke.ce._injectChildStyle(Ue,h.parent?h.parent.type:void 0);const bt=h.subTree=Go(h);P(null,bt,b,N,h,E,T),g.el=bt.el}if(Se&&Xe(Se,E),!yt&&(z=se&&se.onVnodeMounted)){const bt=g;Xe(()=>vt(z,Ee,bt),E)}(g.shapeFlag&256||Ee&&vn(Ee.vnode)&&Ee.vnode.shapeFlag&256)&&h.a&&Xe(h.a,E),h.isMounted=!0,g=b=N=null}};h.scope.on();const M=h.effect=new fl(F);h.scope.off();const $=h.update=M.run.bind(M),J=h.job=M.runIfDirty.bind(M);J.i=h,J.id=h.uid,M.scheduler=()=>oo(J),Qt(h,!0),$()},fe=(h,g,b)=>{g.component=h;const N=h.vnode.props;h.vnode=g,h.next=null,Dc(h,g.props,N,b),Fc(h,g.children,b),Lt(),$o(h),Ut()},ue=(h,g,b,N,E,T,V,F,M=!1)=>{const $=h&&h.children,J=h?h.shapeFlag:0,z=g.children,{patchFlag:Q,shapeFlag:se}=g;if(Q>0){if(Q&128){De($,z,b,N,E,T,V,F,M);return}else if(Q&256){et($,z,b,N,E,T,V,F,M);return}}se&8?(J&16&&ne($,E,T),z!==$&&u(b,z)):J&16?se&16?De($,z,b,N,E,T,V,F,M):ne($,E,T,!0):(J&8&&u(b,""),se&16&&te(z,b,N,E,T,V,F,M))},et=(h,g,b,N,E,T,V,F,M)=>{h=h||gn,g=g||gn;const $=h.length,J=g.length,z=Math.min($,J);let Q;for(Q=0;QJ?ne(h,E,T,!0,!1,z):te(g,b,N,E,T,V,F,M,z)},De=(h,g,b,N,E,T,V,F,M)=>{let $=0;const J=g.length;let z=h.length-1,Q=J-1;for(;$<=z&&$<=Q;){const se=h[$],de=g[$]=M?Nt(g[$]):Et(g[$]);if(nn(se,de))P(se,de,b,null,E,T,V,F,M);else break;$++}for(;$<=z&&$<=Q;){const se=h[z],de=g[Q]=M?Nt(g[Q]):Et(g[Q]);if(nn(se,de))P(se,de,b,null,E,T,V,F,M);else break;z--,Q--}if($>z){if($<=Q){const se=Q+1,de=seQ)for(;$<=z;)I(h[$],E,T,!0),$++;else{const se=$,de=$,Se=new Map;for($=de;$<=Q;$++){const st=g[$]=M?Nt(g[$]):Et(g[$]);st.key!=null&&Se.set(st.key,$)}let Ee,ke=0;const Ue=Q-de+1;let yt=!1,bt=0;const kn=new Array(Ue);for($=0;$=Ue){I(st,E,T,!0);continue}let xt;if(st.key!=null)xt=Se.get(st.key);else for(Ee=de;Ee<=Q;Ee++)if(kn[Ee-de]===0&&nn(st,g[Ee])){xt=Ee;break}xt===void 0?I(st,E,T,!0):(kn[xt-de]=$+1,xt>=bt?bt=xt:yt=!0,P(st,g[xt],b,null,E,T,V,F,M),ke++)}const Oo=yt?jc(kn):gn;for(Ee=Oo.length-1,$=Ue-1;$>=0;$--){const st=de+$,xt=g[st],To=g[st+1],Po=st+1{const{el:T,type:V,transition:F,children:M,shapeFlag:$}=h;if($&6){D(h.component.subTree,g,b,N);return}if($&128){h.suspense.move(g,b,N);return}if($&64){V.move(h,g,b,X);return}if(V===ve){s(T,g,b);for(let z=0;zF.enter(T),E));else{const{leave:z,delayLeave:Q,afterLeave:se}=F,de=()=>{h.ctx.isUnmounted?r(T):s(T,g,b)},Se=()=>{const Ee=T._isLeaving||!!T[it];T._isLeaving&&T[it](!0),F.persisted&&!Ee?de():z(T,()=>{de(),se&&se()})};Q?Q(T,de,Se):Se()}else s(T,g,b)},I=(h,g,b,N=!1,E=!1)=>{const{type:T,props:V,ref:F,children:M,dynamicChildren:$,shapeFlag:J,patchFlag:z,dirs:Q,cacheIndex:se,memo:de}=h;if(z===-2&&(E=!1),F!=null&&(Lt(),Wn(F,null,b,h,!0),Ut()),se!=null&&(g.renderCache[se]=void 0),J&256){g.ctx.deactivate(h);return}const Se=J&1&&Q,Ee=!vn(h);let ke;if(Ee&&(ke=V&&V.onVnodeBeforeUnmount)&&vt(ke,g,h),J&6)ye(h.component,b,N);else{if(J&128){h.suspense.unmount(b,N);return}Se&&Xt(h,null,g,"beforeUnmount"),J&64?h.type.remove(h,g,b,X,N):$&&!$.hasOnce&&(T!==ve||z>0&&z&64)?ne($,g,b,!1,!0):(T===ve&&z&384||!E&&J&16)&&ne(M,g,b),N&&j(h)}const Ue=de!=null&&se==null;(Ee&&(ke=V&&V.onVnodeUnmounted)||Se||Ue)&&Xe(()=>{ke&&vt(ke,g,h),Se&&Xt(h,null,g,"unmounted"),Ue&&(h.el=null)},b)},j=h=>{const{type:g,el:b,anchor:N,transition:E}=h;if(g===ve){pe(b,N);return}if(g===fr){S(h);return}const T=()=>{r(b),E&&!E.persisted&&E.afterLeave&&E.afterLeave()};if(h.shapeFlag&1&&E&&!E.persisted){const{leave:V,delayLeave:F}=E,M=()=>V(b,T);F?F(h.el,T,M):M()}else T()},pe=(h,g)=>{let b;for(;h!==g;)b=p(h),r(h),h=b;r(g)},ye=(h,g,b)=>{const{bum:N,scope:E,job:T,subTree:V,um:F,m:M,a:$}=h;Xo(M),Xo($),N&&bs(N),E.stop(),T&&(T.flags|=8,I(V,h,g,b)),F&&Xe(F,g),Xe(()=>{h.isUnmounted=!0},g)},ne=(h,g,b,N=!1,E=!1,T=0)=>{for(let V=T;V{if(h.shapeFlag&6)return C(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const g=p(h.anchor||h.el),b=g&&g[Ll];return b?p(b):g};let W=!1;const q=(h,g,b)=>{let N;h==null?g._vnode&&(I(g._vnode,null,null,!0),N=g._vnode.component):P(g._vnode||null,h,g,null,null,null,b),g._vnode=h,W||(W=!0,$o(N),Nl(),W=!1)},X={p:P,um:I,m:D,r:j,mt:ce,mc:te,pc:ue,pbc:ee,n:C,o:e};return{render:q,hydrate:void 0,createApp:Rc(q)}}function cr({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 Qt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Bc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ao(e,t,n=!1){const s=e.children,r=t.children;if(Z(s)&&Z(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 da(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:da(t)}function Xo(e){if(e)for(let t=0;te.__isSuspense;function Hc(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):Qu(e)}const ve=Symbol.for("v-fgt"),Js=Symbol.for("v-txt"),Ke=Symbol.for("v-cmt"),fr=Symbol.for("v-stc"),$t=[];let rt=null;function L(e=!1){$t.push(rt=e?null:[])}function uo(){$t.pop(),rt=$t[$t.length-1]||null}let Zn=1;function Ps(e,t=!1){Zn+=e,e<0&&rt&&t&&(rt.hasOnce=!0)}function ma(e){return e.dynamicChildren=Zn>0?rt||gn:null,uo(),Zn>0&&rt&&rt.push(e),e}function U(e,t,n,s,r,o){return ma(d(e,t,n,s,r,o,!0))}function un(e,t,n,s,r){return ma(Ae(e,t,n,s,r,!0))}function es(e){return e?e.__v_isVNode===!0:!1}function nn(e,t){return e.type===t.type&&e.key===t.key}const ga=({key:e})=>e??null,_s=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Oe(e)||Ge(e)||oe(e)?{i:je,r:e,k:t,f:!!n}:e:null);function d(e,t=null,n=null,s=0,r=null,o=e===ve?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ga(t),ref:t&&_s(t),scopeId:kl,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:je};return l?(Ns(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=Oe(n)?8:16),Zn>0&&!i&&rt&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&rt.push(a),a}const Ae=qc;function qc(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===Xl)&&(e=Ke),es(e)){const l=Gt(e,t,!0);return n&&Ns(l,n),Zn>0&&!o&&rt&&(l.shapeFlag&6?rt[rt.indexOf(e)]=l:rt.push(l)),l.patchFlag=-2,l}if(tf(e)&&(e=e.__vccOpts),t){t=Kc(t);let{class:l,style:a}=t;l&&!Oe(l)&&(t.class=Be(l)),_e(a)&&(so(a)&&!Z(a)&&(a=Le({},a)),t.style=Jr(a))}const i=Oe(e)?1:ha(e)?128:Ul(e)?64:_e(e)?4:oe(e)?2:0;return d(e,t,n,s,r,i,o,!0)}function Kc(e){return e?so(e)||ia(e)?Le({},e):e:null}function Gt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,c=t?Wc(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ga(c),ref:t&&t.ref?n&&o?Z(o)?o.concat(_s(t)):[o,_s(t)]:_s(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!==ve?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Gt(e.ssContent),ssFallback:e.ssFallback&&Gt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Yn(u,a.clone(u)),u}function ts(e=" ",t=0){return Ae(Js,null,e,t)}function he(e="",t=!1){return t?(L(),un(Ke,null,e)):Ae(Ke,null,e)}function Et(e){return e==null||typeof e=="boolean"?Ae(Ke):Z(e)?Ae(ve,null,e.slice()):es(e)?Nt(e):Ae(Js,null,String(e))}function Nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Gt(e)}function Ns(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ns(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!ia(t)?t._ctx=je:r===3&&je&&(je.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(oe(t)){if(s&65){Ns(e,{default:t});return}t={default:t,_ctx:je},n=32}else t=String(t),s&64?(n=16,t=[ts(t)]):n=8;e.children=t,e.shapeFlag|=n}function Wc(...e){const t={};for(let n=0;nWe||je;let Is,Lr;{const e=Hs(),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)}};Is=t("__VUE_INSTANCE_SETTERS__",n=>We=n),Lr=t("__VUE_SSR_SETTERS__",n=>ns=n)}const as=e=>{const t=We;return Is(e),e.scope.on(),()=>{e.scope.off(),Is(t)}},Qo=()=>{We&&We.scope.off(),Is(null)};function ba(e){return e.vnode.shapeFlag&4}let ns=!1;function Xc(e,t=!1,n=!1){t&&Lr(t);const{props:s,children:r}=e.vnode,o=ba(e);kc(e,s,o,t),Uc(e,r,n||t);const i=o?Qc(e,t):void 0;return t&&Lr(!1),i}function Qc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,bc);const{setup:s}=n;if(s){Lt();const r=e.setupContext=s.length>1?Zc(e):null,o=as(e),i=ls(s,e,0,[e.props,r]),l=sl(i);if(Ut(),o(),(l||e.sp)&&!vn(e)&&Kl(e),l){if(i.then(Qo,Qo),t)return i.then(a=>{Yo(e,a)}).catch(a=>{Ks(a,e,0)});e.asyncDep=i}else Yo(e,i)}else xa(e)}function Yo(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:_e(t)&&(e.setupState=Ol(t)),xa(e)}function xa(e,t,n){const s=e.type;e.render||(e.render=s.render||Rt);{const r=as(e);Lt();try{xc(e)}finally{Ut(),r()}}}const Yc={get(e,t){return qe(e,"get",""),e[t]}};function Zc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Yc),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ol(Cl(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 ef(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function tf(e){return oe(e)&&"__vccOpts"in e}const tt=(e,t)=>Wu(e,t,ns);function co(e,t,n){try{Ps(-1);const s=arguments.length;return s===2?_e(t)&&!Z(t)?es(t)?Ae(e,null,[t]):Ae(e,t):Ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&es(n)&&(n=[n]),Ae(e,t,n))}finally{Ps(1)}}const nf="3.5.40";/** -* @vue/runtime-dom v3.5.40 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Ur;const Zo=typeof window<"u"&&window.trustedTypes;if(Zo)try{Ur=Zo.createPolicy("vue",{createHTML:e=>e})}catch{}const va=Ur?e=>Ur.createHTML(e):e=>e,sf="http://www.w3.org/2000/svg",rf="http://www.w3.org/1998/Math/MathML",Pt=typeof document<"u"?document:null,ei=Pt&&Pt.createElement("template"),of={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"?Pt.createElementNS(sf,e):t==="mathml"?Pt.createElementNS(rf,e):n?Pt.createElement(e,{is:n}):Pt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Pt.createTextNode(e),createComment:e=>Pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Pt.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{ei.innerHTML=va(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=ei.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Bt="transition",Ln="animation",ss=Symbol("_vtc"),_a={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},lf=Le({},Ml,_a),af=e=>(e.displayName="Transition",e.props=lf,e),uf=af((e,{slots:t})=>co(ic,cf(e),t)),Yt=(e,t=[])=>{Z(e)?e.forEach(n=>n(...t)):e&&e(...t)},ti=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function cf(e){const t={};for(const H in e)H in _a||(t[H]=e[H]);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:a=o,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,A=ff(r),P=A&&A[0],w=A&&A[1],{onBeforeEnter:v,onEnter:R,onEnterCancelled:k,onLeave:S,onLeaveCancelled:x,onBeforeAppear:_=v,onAppear:O=R,onAppearCancelled:te=k}=t,B=(H,ie,ce,Ie)=>{H._enterCancelled=Ie,Zt(H,ie?u:l),Zt(H,ie?c:i),ce&&ce()},ee=(H,ie)=>{H._isLeaving=!1,Zt(H,f),Zt(H,m),Zt(H,p),ie&&ie()},re=H=>(ie,ce)=>{const Ie=H?O:R,we=()=>B(ie,H,ce);Yt(Ie,[ie,we]),ni(()=>{Zt(ie,H?a:o),Ot(ie,H?u:l),ti(Ie)||si(ie,s,P,we)})};return Le(t,{onBeforeEnter(H){Yt(v,[H]),Ot(H,o),Ot(H,i)},onBeforeAppear(H){Yt(_,[H]),Ot(H,a),Ot(H,c)},onEnter:re(!1),onAppear:re(!0),onLeave(H,ie){H._isLeaving=!0;const ce=()=>ee(H,ie);Ot(H,f),H._enterCancelled?(Ot(H,p),ii(H)):(ii(H),Ot(H,p)),ni(()=>{H._isLeaving&&(Zt(H,f),Ot(H,m),ti(S)||si(H,s,w,ce))}),Yt(S,[H,ce])},onEnterCancelled(H){B(H,!1,void 0,!0),Yt(k,[H])},onAppearCancelled(H){B(H,!0,void 0,!0),Yt(te,[H])},onLeaveCancelled(H){ee(H),Yt(x,[H])}})}function ff(e){if(e==null)return null;if(_e(e))return[dr(e.enter),dr(e.leave)];{const t=dr(e);return[t,t]}}function dr(e){return mu(e)}function Ot(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ss]||(e[ss]=new Set)).add(t)}function Zt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[ss];n&&(n.delete(t),n.size||(e[ss]=void 0))}function ni(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let df=0;function si(e,t,n,s){const r=e._endId=++df,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=pf(e,t);if(!i)return s();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,p),o()},p=m=>{m.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[A]||"").split(", "),r=s(`${Bt}Delay`),o=s(`${Bt}Duration`),i=ri(r,o),l=s(`${Ln}Delay`),a=s(`${Ln}Duration`),c=ri(l,a);let u=null,f=0,p=0;t===Bt?i>0&&(u=Bt,f=i,p=o.length):t===Ln?c>0&&(u=Ln,f=c,p=a.length):(f=Math.max(i,c),u=f>0?i>c?Bt:Ln:null,p=u?u===Bt?o.length:a.length:0);const m=u===Bt&&/\b(?:transform|all)(?:,|$)/.test(s(`${Bt}Property`).toString());return{type:u,timeout:f,propCount:p,hasTransform:m}}function ri(e,t){for(;e.lengthoi(n)+oi(e[s])))}function oi(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ii(e){return(e?e.ownerDocument:document).body.offsetHeight}function hf(e,t,n){const s=e[ss];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const li=Symbol("_vod"),mf=Symbol("_vsh"),gf=Symbol(""),yf=/(?:^|;)\s*display\s*:/;function bf(e,t,n){const s=e.style,r=Oe(n);let o=!1;if(n&&!r){if(t)if(Oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Bn(s,l,"")}else for(const i in t)n[i]==null&&Bn(s,i,"");for(const i in n){i==="display"&&(o=!0);const l=n[i];l!=null?vf(e,i,!Oe(t)&&t?t[i]:void 0,l)||Bn(s,i,l):Bn(s,i,"")}}else if(r){if(t!==n){const i=s[gf];i&&(n+=";"+i),s.cssText=n,o=yf.test(n)}}else t&&e.removeAttribute("style");li in e&&(e[li]=o?s.display:"",e[mf]&&(s.display="none"))}const ai=/\s*!important$/;function Bn(e,t,n){if(Z(n))n.forEach(s=>Bn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=xf(e,t);ai.test(n)?e.setProperty(Jt(s),n.replace(ai,""),"important"):e[s]=n}}const ui=["Webkit","Moz","ms"],pr={};function xf(e,t){const n=pr[t];if(n)return n;let s=Ze(t);if(s!=="filter"&&s in e)return pr[t]=s;s=Bs(s);for(let r=0;rhr||(Cf.then(()=>hr=0),hr=Date.now());function Of(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(Z(r)){const o=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{o.call(s),s._stopped=!0};const i=r.slice(),l=[s];for(let a=0;ae.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Tf=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?hf(e,s,i):t==="style"?bf(e,n,s):Fs(t)?Ms(t)||wf(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Pf(e,t,s,i))?(di(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&fi(e,t,s,i,o,t!=="value")):e._isVueCE&&(Nf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Oe(s)))?di(e,Ze(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),fi(e,t,s,i))};function Pf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&hi(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||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 hi(t)&&Oe(n)?!1:t in e}function Nf(e,t){const n=e._def.props;if(!n)return!1;const s=Ze(t);return Array.isArray(n)?n.some(r=>Ze(r)===s):Object.keys(n).some(r=>Ze(r)===s)}const zt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Z(t)?n=>bs(t,n):t};function If(e){e.target.composing=!0}function mi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const at=Symbol("_assign");function gi(e,t,n){return t&&(e=e.trim()),n&&(e=js(e)),e}const Te={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[at]=zt(r);const o=s||r.props&&r.props.type==="number";Dt(e,t?"change":"input",i=>{i.target.composing||e[at](gi(e.value,n,o))}),(n||o)&&Dt(e,"change",()=>{e.value=gi(e.value,n,o)}),t||(Dt(e,"compositionstart",If),Dt(e,"compositionend",mi),Dt(e,"change",mi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[at]=zt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?js(e.value):e.value,a=t??"";if(l===a)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a)}},wn={deep:!0,created(e,t,n){e[at]=zt(n),Dt(e,"change",()=>{const s=e._modelValue,r=Rn(e),o=e.checked,i=e[at];if(Z(s)){const l=Xr(s,r),a=l!==-1;if(o&&!a)i(s.concat(r));else if(!o&&a){const c=[...s];c.splice(l,1),i(c)}}else if(Pn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(wa(e,o))})},mounted:yi,beforeUpdate(e,t,n){e[at]=zt(n),yi(e,t,n)}};function yi(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(Z(t))r=Xr(t,s.props.value)>-1;else if(Pn(t))r=t.has(s.props.value);else{if(t===n)return;r=Wt(t,wa(e,!0))}e.checked!==r&&(e.checked=r)}const bi={created(e,{value:t},n){e.checked=Wt(t,n.props.value),e[at]=zt(n),Dt(e,"change",()=>{e[at](Rn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[at]=zt(s),t!==n&&(e.checked=Wt(t,s.props.value))}},Sn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,Dt(e,"change",()=>{const r=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?js(Rn(o)):Rn(o));e[at](e.multiple?Pn(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,ro(()=>{e._assigning=!1})}),e[at]=zt(s)},mounted(e,{value:t}){xi(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[at]=zt(n)},updated(e,{value:t}){e._assigning||xi(e,t)}};function xi(e,t){const n=e.multiple,s=Z(t);if(!(n&&!s&&!Pn(t))){for(let r=0,o=e.options.length;rString(c)===String(l)):i.selected=Xr(t,l)>-1}else i.selected=t.has(l);else if(Wt(Rn(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Rn(e){return"_value"in e?e._value:e.value}function wa(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const kf=["ctrl","shift","alt","meta"],Df={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)=>kf.some(n=>e[`${n}Key`]&&!t.includes(n))},jn=(e,t)=>{if(!e)return e;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=Jt(r.key);if(t.some(i=>i===o||$f[i]===o))return e(r)}))},Uf=Le({patchProp:Tf},of);let vi;function Ff(){return vi||(vi=Mc(Uf))}const Mf=((...e)=>{const t=Ff().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Bf(s);if(!r)return;const o=t._component;!oe(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Vf(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function Vf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Bf(e){return Oe(e)?document.querySelector(e):e}/*! - * pinia v2.3.1 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const jf=Symbol();var _i;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(_i||(_i={}));function Hf(){const e=Eu(!0),t=e.run(()=>Y({}));let n=[],s=[];const r=Cl({install(o){r._a=o,o.provide(jf,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 qf={__name:"App",setup(e){return(t,n)=>{const s=Nr("router-view");return L(),un(s,null,{default:ft(({Component:r})=>[Ae(uf,{name:"fade",mode:"out-in"},{default:ft(()=>[(L(),un(yc(r)))]),_:2},1024)]),_:1})}}};/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const mn=typeof document<"u";function Ea(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Kf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Ea(e.default)}const be=Object.assign;function mr(e,t){const n={};for(const s in t){const r=t[s];n[s]=mt(r)?r.map(e):e(r)}return n}const zn=()=>{},mt=Array.isArray;function wi(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const Sa=/#/g,Wf=/&/g,Gf=/\//g,zf=/=/g,Jf=/\?/g,Ra=/\+/g,Xf=/%5B/g,Qf=/%5D/g,Ca=/%5E/g,Yf=/%60/g,Aa=/%7B/g,Zf=/%7C/g,Oa=/%7D/g,ed=/%20/g;function fo(e){return e==null?"":encodeURI(""+e).replace(Zf,"|").replace(Xf,"[").replace(Qf,"]")}function td(e){return fo(e).replace(Aa,"{").replace(Oa,"}").replace(Ca,"^")}function Fr(e){return fo(e).replace(Ra,"%2B").replace(ed,"+").replace(Sa,"%23").replace(Wf,"%26").replace(Yf,"`").replace(Aa,"{").replace(Oa,"}").replace(Ca,"^")}function nd(e){return Fr(e).replace(zf,"%3D")}function sd(e){return fo(e).replace(Sa,"%23").replace(Jf,"%3F")}function rd(e){return sd(e).replace(Gf,"%2F")}function rs(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const od=/\/$/,id=e=>e.replace(od,"");function gr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=cd(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:rs(i)}}function ld(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ei(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ad(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Cn(t.matched[s],n.matched[r])&&Ta(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Cn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ta(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!ud(e[n],t[n]))return!1;return!0}function ud(e,t){return mt(e)?Si(e,t):mt(t)?Si(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Si(e,t){return mt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function cd(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 jt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Mr=(function(e){return e.pop="pop",e.push="push",e})({}),yr=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function fd(e){if(!e)if(mn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),id(e)}const dd=/^[^#]+#/;function pd(e,t){return e.replace(dd,"#")+t}function hd(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 Qs=()=>({left:window.scrollX,top:window.scrollY});function md(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=hd(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 Ri(e,t){return(history.state?history.state.position-t:-1)+e}const Vr=new Map;function gd(e,t){Vr.set(e,t)}function yd(e){const t=Vr.get(e);return Vr.delete(e),t}function bd(e){return typeof e=="string"||e&&typeof e=="object"}function Pa(e){return typeof e=="string"||typeof e=="symbol"}let Pe=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Na=Symbol("");Pe.MATCHER_NOT_FOUND+"",Pe.NAVIGATION_GUARD_REDIRECT+"",Pe.NAVIGATION_ABORTED+"",Pe.NAVIGATION_CANCELLED+"",Pe.NAVIGATION_DUPLICATED+"";function An(e,t){return be(new Error,{type:e,[Na]:!0},t)}function Tt(e,t){return e instanceof Error&&Na in e&&(t==null||!!(e.type&t))}const xd=["params","query","hash"];function vd(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of xd)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function _d(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Fr(r)):[s&&Fr(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function wd(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=mt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Ed=Symbol(""),Ai=Symbol(""),Ys=Symbol(""),po=Symbol(""),Br=Symbol("");function Un(){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 Kt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const c=p=>{p===!1?a(An(Pe.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?a(p):bd(p)?a(An(Pe.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(i&&s.enterCallbacks[r]===i&&typeof p=="function"&&i.push(p),l())},u=o(()=>e.call(s&&s.instances[r],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(p=>a(p))})}function br(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Ea(a)){const c=(a.__vccOpts||a)[t];c&&o.push(Kt(c,n,s,i,l,r))}else{let c=a();o.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=Kf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const p=(f.__vccOpts||f)[t];return p&&Kt(p,n,s,i,l,r)()}))}}return o}function Sd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iCn(c,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>Cn(c,a))||r.push(a))}return[n,s,r]}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let Rd=()=>location.protocol+"//"+location.host;function Ia(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),Ei(l,"")}return Ei(n,e)+s+r}function Cd(e,t,n,s){let r=[],o=[],i=null;const l=({state:p})=>{const m=Ia(e,location),A=n.value,P=t.value;let w=0;if(p){if(n.value=m,t.value=p,i&&i===A){i=null;return}w=P?p.position-P.position:0}else s(m);r.forEach(v=>{v(n.value,A,{delta:w,type:Mr.pop,direction:w?w>0?yr.forward:yr.back:yr.unknown})})};function a(){i=n.value}function c(p){r.push(p);const m=()=>{const A=r.indexOf(p);A>-1&&r.splice(A,1)};return o.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(be({},p.state,{scroll:Qs()}),"")}}function f(){for(const p of o)p();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:f}}function Oi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Qs():null}}function Ad(e){const{history:t,location:n}=window,s={value:Ia(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(a,c,u){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Rd()+e+a;try{t[u?"replaceState":"pushState"](c,"",p),r.value=c}catch(m){console.error(m),n[u?"replace":"assign"](p)}}function i(a,c){o(a,be({},t.state,Oi(r.value.back,a,r.value.forward,!0),c,{position:r.value.position}),!0),s.value=a}function l(a,c){const u=be({},r.value,t.state,{forward:a,scroll:Qs()});o(u.current,u,!0),o(a,be({},Oi(s.value,a,null),{position:u.position+1},c),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function Od(e){e=fd(e);const t=Ad(e),n=Cd(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=be({location:"",base:e,go:s,createHref:pd.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}let sn=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var $e=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})($e||{});const Td={type:sn.Static,value:""},Pd=/[a-zA-Z0-9_]/;function Nd(e){if(!e)return[[]];if(e==="/")return[[Td]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=$e.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,c="",u="";function f(){c&&(n===$e.Static?o.push({type:sn.Static,value:c}):n===$e.Param||n===$e.ParamRegExp||n===$e.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:sn.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=a}for(;lt.length?t.length===1&&t[0]===Qe.Static+Qe.Segment?1:-1:0}function ka(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Ld={strict:!1,end:!0,sensitive:!1};function Ud(e,t,n){const s=Dd(Nd(e.path),n),r=be(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Fd(e,t){const n=[],s=new Map;t=wi(Ld,t);function r(f){return s.get(f)}function o(f,p,m){const A=!m,P=Ii(f);P.aliasOf=m&&m.record;const w=wi(t,f),v=[P];if("alias"in f){const S=typeof f.alias=="string"?[f.alias]:f.alias;for(const x of S)v.push(Ii(be({},P,{components:m?m.record.components:P.components,path:x,aliasOf:m?m.record:P})))}let R,k;for(const S of v){const{path:x}=S;if(p&&x[0]!=="/"){const _=p.record.path,O=_[_.length-1]==="/"?"":"/";S.path=p.record.path+(x&&O+x)}if(R=Ud(S,p,w),m?m.alias.push(R):(k=k||R,k!==R&&k.alias.push(R),A&&f.name&&!ki(R)&&i(f.name)),Da(R)&&a(R),P.children){const _=P.children;for(let O=0;O<_.length;O++)o(_[O],R,m&&m.children[O])}m=m||R}return k?()=>{i(k)}:zn}function i(f){if(Pa(f)){const p=s.get(f);p&&(s.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const p=Bd(f,n);n.splice(p,0,f),f.record.name&&!ki(f)&&s.set(f.record.name,f)}function c(f,p){let m,A={},P,w;if("name"in f&&f.name){if(m=s.get(f.name),!m)throw An(Pe.MATCHER_NOT_FOUND,{location:f});w=m.record.name,A=be(Ni(p.params,m.keys.filter(k=>!k.optional).concat(m.parent?m.parent.keys.filter(k=>k.optional):[]).map(k=>k.name)),f.params&&Ni(f.params,m.keys.map(k=>k.name))),P=m.stringify(A)}else if(f.path!=null)P=f.path,m=n.find(k=>k.re.test(P)),m&&(A=m.parse(P),w=m.record.name);else{if(m=p.name?s.get(p.name):n.find(k=>k.re.test(p.path)),!m)throw An(Pe.MATCHER_NOT_FOUND,{location:f,currentLocation:p});w=m.record.name,A=be({},p.params,f.params),P=m.stringify(A)}const v=[];let R=m;for(;R;)v.unshift(R.record),R=R.parent;return{name:w,path:P,params:A,matched:v,meta:Vd(v)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Ni(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Ii(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Md(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 Md(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 ki(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Vd(e){return e.reduce((t,n)=>be(t,n.meta),{})}function Bd(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;ka(e,t[o])<0?s=o:n=o+1}const r=jd(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function jd(e){let t=e;for(;t=t.parent;)if(Da(t)&&ka(e,t)===0)return t}function Da({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Di(e){const t=dt(Ys),n=dt(po),s=tt(()=>{const a=bn(e.to);return t.resolve(a)}),r=tt(()=>{const{matched:a}=s.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const p=f.findIndex(Cn.bind(null,u));if(p>-1)return p;const m=$i(a[c-2]);return c>1&&$i(u)===m&&f[f.length-1].path!==m?f.findIndex(Cn.bind(null,a[c-2])):p}),o=tt(()=>r.value>-1&&Gd(n.params,s.value.params)),i=tt(()=>r.value>-1&&r.value===n.matched.length-1&&Ta(n.params,s.value.params));function l(a={}){if(Wd(a)){const c=t[bn(e.replace)?"replace":"push"](bn(e.to)).catch(zn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:s,href:tt(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Hd(e){return e.length===1?e[0]:e}const qd=ql({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:Di,setup(e,{slots:t}){const n=Ct(Di(e)),{options:s}=dt(Ys),r=tt(()=>({[Li(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Li(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Hd(t.default(n));return e.custom?o:co("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Kd=qd;function Wd(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 Gd(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(!mt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function $i(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Li=(e,t,n)=>e??t??n,zd=ql({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=dt(Br),r=tt(()=>e.route||s.value),o=dt(Ai,0),i=tt(()=>{let c=bn(o);const{matched:u}=r.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=tt(()=>r.value.matched[i.value]);xs(Ai,tt(()=>i.value+1)),xs(Ed,l),xs(Br,r);const a=Y();return vs(()=>[a.value,l.value,e.name],([c,u,f],[p,m,A])=>{u&&(u.instances[f]=c,m&&m!==u&&c&&c===p&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!Cn(u,m)||!p)&&(u.enterCallbacks[f]||[]).forEach(P=>P(c))},{flush:"post"}),()=>{const c=r.value,u=e.name,f=l.value,p=f&&f.components[u];if(!p)return Ui(n.default,{Component:p,route:c});const m=f.props[u],A=m?m===!0?c.params:typeof m=="function"?m(c):m:null,w=co(p,be({},A,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Ui(n.default,{Component:w,route:c})||w}}});function Ui(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Jd=zd;function Xd(e){const t=Fd(e.routes,e),n=e.parseQuery||_d,s=e.stringifyQuery||Ci,r=e.history,o=Un(),i=Un(),l=Un(),a=ju(jt);let c=jt;mn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=mr.bind(null,C=>""+C),f=mr.bind(null,rd),p=mr.bind(null,rs);function m(C,W){let q,X;return Pa(C)?(q=t.getRecordMatcher(C),X=W):X=C,t.addRoute(X,q)}function A(C){const W=t.getRecordMatcher(C);W&&t.removeRoute(W)}function P(){return t.getRoutes().map(C=>C.record)}function w(C){return!!t.getRecordMatcher(C)}function v(C,W){if(W=be({},W||a.value),typeof C=="string"){const b=gr(n,C,W.path),N=t.resolve({path:b.path},W),E=r.createHref(b.fullPath);return be(b,N,{params:p(N.params),hash:rs(b.hash),redirectedFrom:void 0,href:E})}let q;if(C.path!=null)q=be({},C,{path:gr(n,C.path,W.path).path});else{const b=be({},C.params);for(const N in b)b[N]==null&&delete b[N];q=be({},C,{params:f(b)}),W.params=f(W.params)}const X=t.resolve(q,W),le=C.hash||"";X.params=u(p(X.params));const h=ld(s,be({},C,{hash:td(le),path:X.path})),g=r.createHref(h);return be({fullPath:h,hash:le,query:s===Ci?wd(C.query):C.query||{}},X,{redirectedFrom:void 0,href:g})}function R(C){return typeof C=="string"?gr(n,C,a.value.path):be({},C)}function k(C,W){if(c!==C)return An(Pe.NAVIGATION_CANCELLED,{from:W,to:C})}function S(C){return O(C)}function x(C){return S(be(R(C),{replace:!0}))}function _(C,W){const q=C.matched[C.matched.length-1];if(q&&q.redirect){const{redirect:X}=q;let le=typeof X=="function"?X(C,W):X;return typeof le=="string"&&(le=le.includes("?")||le.includes("#")?le=R(le):{path:le},le.params={}),be({query:C.query,hash:C.hash,params:le.path!=null?{}:C.params},le)}}function O(C,W){const q=c=v(C),X=a.value,le=C.state,h=C.force,g=C.replace===!0,b=_(q,X);if(b)return O(be(R(b),{state:typeof b=="object"?be({},le,b.state):le,force:h,replace:g}),W||q);const N=q;N.redirectedFrom=W;let E;return!h&&ad(s,X,q)&&(E=An(Pe.NAVIGATION_DUPLICATED,{to:N,from:X}),D(X,X,!0,!1)),(E?Promise.resolve(E):ee(N,X)).catch(T=>Tt(T)?Tt(T,Pe.NAVIGATION_GUARD_REDIRECT)?T:De(T):ue(T,N,X)).then(T=>{if(T){if(Tt(T,Pe.NAVIGATION_GUARD_REDIRECT))return O(be({replace:g},R(T.to),{state:typeof T.to=="object"?be({},le,T.to.state):le,force:h}),W||N)}else T=H(N,X,!0,g,le);return re(N,X,T),T})}function te(C,W){const q=k(C,W);return q?Promise.reject(q):Promise.resolve()}function B(C){const W=pe.values().next().value;return W&&typeof W.runWithContext=="function"?W.runWithContext(C):C()}function ee(C,W){let q;const[X,le,h]=Sd(C,W);q=br(X.reverse(),"beforeRouteLeave",C,W);for(const b of X)b.leaveGuards.forEach(N=>{q.push(Kt(N,C,W))});const g=te.bind(null,C,W);return q.push(g),ne(q).then(()=>{q=[];for(const b of o.list())q.push(Kt(b,C,W));return q.push(g),ne(q)}).then(()=>{q=br(le,"beforeRouteUpdate",C,W);for(const b of le)b.updateGuards.forEach(N=>{q.push(Kt(N,C,W))});return q.push(g),ne(q)}).then(()=>{q=[];for(const b of h)if(b.beforeEnter)if(mt(b.beforeEnter))for(const N of b.beforeEnter)q.push(Kt(N,C,W));else q.push(Kt(b.beforeEnter,C,W));return q.push(g),ne(q)}).then(()=>(C.matched.forEach(b=>b.enterCallbacks={}),q=br(h,"beforeRouteEnter",C,W,B),q.push(g),ne(q))).then(()=>{q=[];for(const b of i.list())q.push(Kt(b,C,W));return q.push(g),ne(q)}).catch(b=>Tt(b,Pe.NAVIGATION_CANCELLED)?b:Promise.reject(b))}function re(C,W,q){l.list().forEach(X=>B(()=>X(C,W,q)))}function H(C,W,q,X,le){const h=k(C,W);if(h)return h;const g=W===jt,b=mn?history.state:{};q&&(X||g?r.replace(C.fullPath,be({scroll:g&&b&&b.scroll},le)):r.push(C.fullPath,le)),a.value=C,D(C,W,q,g),De()}let ie;function ce(){ie||(ie=r.listen((C,W,q)=>{if(!ye.listening)return;const X=v(C),le=_(X,ye.currentRoute.value);if(le){O(be(le,{replace:!0,force:!0}),X).catch(zn);return}c=X;const h=a.value;mn&&gd(Ri(h.fullPath,q.delta),Qs()),ee(X,h).catch(g=>Tt(g,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_CANCELLED)?g:Tt(g,Pe.NAVIGATION_GUARD_REDIRECT)?(O(be(R(g.to),{force:!0}),X).then(b=>{Tt(b,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_DUPLICATED)&&!q.delta&&q.type===Mr.pop&&r.go(-1,!1)}).catch(zn),Promise.reject()):(q.delta&&r.go(-q.delta,!1),ue(g,X,h))).then(g=>{g=g||H(X,h,!1),g&&(q.delta&&!Tt(g,Pe.NAVIGATION_CANCELLED)?r.go(-q.delta,!1):q.type===Mr.pop&&Tt(g,Pe.NAVIGATION_ABORTED|Pe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),re(X,h,g)}).catch(zn)}))}let Ie=Un(),we=Un(),fe;function ue(C,W,q){De(C);const X=we.list();return X.length?X.forEach(le=>le(C,W,q)):console.error(C),Promise.reject(C)}function et(){return fe&&a.value!==jt?Promise.resolve():new Promise((C,W)=>{Ie.add([C,W])})}function De(C){return fe||(fe=!C,ce(),Ie.list().forEach(([W,q])=>C?q(C):W()),Ie.reset()),C}function D(C,W,q,X){const{scrollBehavior:le}=e;if(!mn||!le)return Promise.resolve();const h=!q&&yd(Ri(C.fullPath,0))||(X||!q)&&history.state&&history.state.scroll||null;return ro().then(()=>le(C,W,h)).then(g=>g&&md(g)).catch(g=>ue(g,C,W))}const I=C=>r.go(C);let j;const pe=new Set,ye={currentRoute:a,listening:!0,addRoute:m,removeRoute:A,clearRoutes:t.clearRoutes,hasRoute:w,getRoutes:P,resolve:v,options:e,push:S,replace:x,go:I,back:()=>I(-1),forward:()=>I(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:we.add,isReady:et,install(C){C.component("RouterLink",Kd),C.component("RouterView",Jd),C.config.globalProperties.$router=ye,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>bn(a)}),mn&&!j&&a.value===jt&&(j=!0,S(r.location).catch(X=>{}));const W={};for(const X in jt)Object.defineProperty(W,X,{get:()=>a.value[X],enumerable:!0});C.provide(Ys,ye),C.provide(po,Rl(W)),C.provide(Br,a);const q=C.unmount;pe.add(C),C.unmount=function(){pe.delete(C),pe.size<1&&(c=jt,ie&&ie(),ie=null,a.value=jt,j=!1,fe=!1),q()}}};function ne(C){return C.reduce((W,q)=>W.then(()=>B(q)),Promise.resolve())}return ye}function Qd(){return dt(Ys)}function Yd(e){return dt(po)}const ho="sub_store_remote_uri",mo="sub_store_admin_token",go="sub_store_token_validated";function $a(e){const t=(e||"").trim().replace(/\/+$/,"").replace(/\/api$/,"");if(!t)return"";const n=new URL(t);if(!["http:","https:"].includes(n.protocol))throw new Error("Remote URI must use http or https");return n.toString().replace(/\/+$/,"")}function Zd(e,t){const n=$a(e);n&&t&&(localStorage.setItem(ho,n),localStorage.setItem(mo,t),localStorage.setItem(go,"true"))}function yo(){return localStorage.getItem(ho)||""}function La(){return localStorage.getItem(mo)||""}function ep(){return localStorage.getItem(go)==="true"}function tp(){localStorage.removeItem(ho),localStorage.removeItem(mo),localStorage.removeItem(go)}async function np(e,t){if(!e)return!1;try{const n=$a(t),s=await fetch(`${n}/api/env`,{headers:{Authorization:`Bearer ${e}`}});return s.ok?(await s.json()).status==="success":!1}catch{return!1}}function sp(){return La()}function rp(){var e;return yo()||((e=window.SUB_STORE_CONFIG)==null?void 0:e.apiBaseUrl)||""}function Ua(e,t){return function(){return e.apply(t,arguments)}}const{toString:op}=Object.prototype,{getPrototypeOf:On}=Object,{iterator:us,toStringTag:Fa}=Symbol,ks=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),os=(e,t)=>{let n=e;const s=[];for(;n!=null&&n!==Object.prototype;){if(s.indexOf(n)!==-1)return!1;if(s.push(n),ks(n,t))return!0;n=On(n)}return!1},ip=(e,t)=>e!=null&&os(e,t)?e[t]:void 0,bo=(e=>t=>{const n=op.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),gt=e=>(e=e.toLowerCase(),t=>bo(t)===e),Zs=e=>t=>typeof t===e,{isArray:cn}=Array,Tn=Zs("undefined");function Nn(e){return e!==null&&!Tn(e)&&e.constructor!==null&&!Tn(e.constructor)&&nt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ma=gt("ArrayBuffer");function lp(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ma(e.buffer),t}const ap=Zs("string"),nt=Zs("function"),Va=Zs("number"),In=e=>e!==null&&typeof e=="object",up=e=>e===!0||e===!1,ws=e=>{if(!In(e))return!1;const t=On(e);return(t===null||t===Object.prototype||On(t)===null)&&!os(e,Fa)&&!os(e,us)},cp=e=>{if(!In(e)||Nn(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},fp=gt("Date"),dp=gt("File"),pp=e=>!!(e&&typeof e.uri<"u"),hp=e=>e&&typeof e.getParts<"u",mp=gt("Blob"),gp=gt("FileList"),yp=e=>In(e)&&nt(e.pipe);function bp(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Fi=bp(),Mi=typeof Fi.FormData<"u"?Fi.FormData:void 0,xp=e=>{if(!e)return!1;if(Mi&&e instanceof Mi)return!0;const t=On(e);if(!t||t===Object.prototype||!nt(e.append))return!1;const n=bo(e);return n==="formdata"||n==="object"&&nt(e.toString)&&e.toString()==="[object FormData]"},vp=gt("URLSearchParams"),[_p,wp,Ep,Sp]=["ReadableStream","Request","Response","Headers"].map(gt),Rp=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function cs(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),cn(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const rn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ja=e=>!Tn(e)&&e!==rn;function jr(...e){const{caseless:t,skipUndefined:n}=ja(this)&&this||{},s={},r=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const l=t&&typeof i=="string"&&Ba(s,i)||i,a=ks(s,l)?s[l]:void 0;ws(a)&&ws(o)?s[l]=jr(a,o):ws(o)?s[l]=jr({},o):cn(o)?s[l]=o.slice():(!n||!Tn(o))&&(s[l]=o)};for(let o=0,i=e.length;o(cs(t,(r,o)=>{n&&nt(r)?Object.defineProperty(e,o,{__proto__:null,value:Ua(r,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),e),Ap=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Op=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},Tp=(e,t,n,s)=>{let r,o,i;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)i=r[o],(!s||s(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=n!==!1&&On(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Pp=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Np=e=>{if(!e)return null;if(cn(e))return e;let t=e.length;if(!Va(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Ip=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&On(Uint8Array)),kp=(e,t)=>{const s=(e&&e[us]).call(e);let r;for(;(r=s.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},Dp=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},$p=gt("HTMLFormElement"),Lp=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),{propertyIsEnumerable:Up}=Object.prototype,Fp=gt("RegExp"),Ha=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};cs(n,(r,o)=>{let i;(i=t(r,o,e))!==!1&&(s[o]=i||r)}),Object.defineProperties(e,s)},Mp=e=>{Ha(e,(t,n)=>{if(nt(e)&&["arguments","caller","callee"].includes(n))return!1;const s=e[n];if(nt(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Vp=(e,t)=>{const n={},s=r=>{r.forEach(o=>{n[o]=!0})};return cn(e)?s(e):s(String(e).split(t)),n},Bp=()=>{},jp=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Hp(e){return!!(e&&nt(e.append)&&e[Fa]==="FormData"&&e[us])}const qp=e=>{const t=new WeakSet,n=s=>{if(In(s)){if(t.has(s))return;if(Nn(s))return s;if(!("toJSON"in s)){t.add(s);const r=cn(s)?[]:{};return cs(s,(o,i)=>{const l=n(o);!Tn(l)&&(r[i]=l)}),t.delete(s),r}}return s};return n(e)},Kp=gt("AsyncFunction"),Wp=e=>e&&(In(e)||nt(e))&&nt(e.then)&&nt(e.catch),qa=((e,t)=>e?setImmediate:t?((n,s)=>(rn.addEventListener("message",({source:r,data:o})=>{r===rn&&o===n&&s.length&&s.shift()()},!1),r=>{s.push(r),rn.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",nt(rn.postMessage)),Gp=typeof queueMicrotask<"u"?queueMicrotask.bind(rn):typeof process<"u"&&process.nextTick||qa,Ka=e=>e!=null&&nt(e[us]),zp=e=>e!=null&&os(e,us)&&Ka(e),y={isArray:cn,isArrayBuffer:Ma,isBuffer:Nn,isFormData:xp,isArrayBufferView:lp,isString:ap,isNumber:Va,isBoolean:up,isObject:In,isPlainObject:ws,isEmptyObject:cp,isReadableStream:_p,isRequest:wp,isResponse:Ep,isHeaders:Sp,isUndefined:Tn,isDate:fp,isFile:dp,isReactNativeBlob:pp,isReactNative:hp,isBlob:mp,isRegExp:Fp,isFunction:nt,isStream:yp,isURLSearchParams:vp,isTypedArray:Ip,isFileList:gp,forEach:cs,merge:jr,extend:Cp,trim:Rp,stripBOM:Ap,inherits:Op,toFlatObject:Tp,kindOf:bo,kindOfTest:gt,endsWith:Pp,toArray:Np,forEachEntry:kp,matchAll:Dp,isHTMLForm:$p,hasOwnProperty:ks,hasOwnProp:ks,hasOwnInPrototypeChain:os,getSafeProp:ip,reduceDescriptors:Ha,freezeMethods:Mp,toObjectSet:Vp,toCamelCase:Lp,noop:Bp,toFiniteNumber:jp,findKey:Ba,global:rn,isContextDefined:ja,isSpecCompliantForm:Hp,toJSONObject:qp,isAsyncFn:Kp,isThenable:Wp,setImmediate:qa,asap:Gp,isIterable:Ka,isSafeIterable:zp},Jp=y.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Xp=e=>{const t={};let n,s,r;return e&&e.split(` -`).forEach(function(i){r=i.indexOf(":"),n=i.substring(0,r).trim().toLowerCase(),s=i.substring(r+1).trim(),!(!n||t[n]&&Jp[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t};function Qp(e){let t=0,n=e.length;for(;tt;){const s=e.charCodeAt(n-1);if(s!==9&&s!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const Yp=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),Zp=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function xo(e,t){return y.isArray(e)?e.map(n=>xo(n,t)):Qp(String(e).replace(t,""))}const eh=e=>xo(e,Yp),th=e=>xo(e,Zp);function Wa(e){const t=Object.create(null);return y.forEach(e.toJSON(),(n,s)=>{t[s]=th(n)}),t}const Vi=Symbol("internals");function Fn(e){return e&&String(e).trim().toLowerCase()}function Es(e){return e===!1||e==null?e:y.isArray(e)?e.map(Es):eh(String(e))}function nh(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const sh=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function xr(e,t,n,s,r){if(y.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!y.isString(t)){if(y.isString(s))return t.indexOf(s)!==-1;if(y.isRegExp(s))return s.test(t)}}function rh(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function oh(e,t){const n=y.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{__proto__:null,value:function(r,o,i){return this[s].call(this,t,r,o,i)},configurable:!0})})}let ze=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function o(l,a,c){const u=Fn(a);if(!u)return;const f=y.findKey(r,u);(!f||r[f]===void 0||c===!0||c===void 0&&r[f]!==!1)&&(r[f||a]=Es(l))}const i=(l,a)=>y.forEach(l,(c,u)=>o(c,u,a));if(y.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(y.isString(t)&&(t=t.trim())&&!sh(t))i(Xp(t),n);else if(y.isObject(t)&&y.isSafeIterable(t)){let l=Object.create(null),a,c;for(const u of t){if(!y.isArray(u))throw new TypeError("Object iterator must return a key-value pair");c=u[0],y.hasOwnProp(l,c)?(a=l[c],l[c]=y.isArray(a)?[...a,u[1]]:[a,u[1]]):l[c]=u[1]}i(l,n)}else t!=null&&o(n,t,s);return this}get(t,n){if(t=Fn(t),t){const s=y.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return nh(r);if(y.isFunction(n))return n.call(this,r,s);if(y.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Fn(t),t){const s=y.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||xr(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function o(i){if(i=Fn(i),i){const l=y.findKey(s,i);l&&(!n||xr(s,s[l],l,n))&&(delete s[l],r=!0)}}return y.isArray(t)?t.forEach(o):o(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const o=n[s];(!t||xr(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const n=this,s={};return y.forEach(this,(r,o)=>{const i=y.findKey(s,o);if(i){n[i]=Es(r),delete n[o];return}const l=t?rh(o):String(o).trim();l!==o&&delete n[o],n[l]=Es(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return y.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&y.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[Vi]=this[Vi]={accessors:{}}).accessors,r=this.prototype;function o(i){const l=Fn(i);s[l]||(oh(r,i),s[l]=!0)}return y.isArray(t)?t.forEach(o):o(t),this}};ze.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);y.reduceDescriptors(ze.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});y.freezeMethods(ze);const ih="[REDACTED ****]";function lh(e){if(y.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(y.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function ah(e,t){const n=new Set(t.map(o=>String(o).toLowerCase())),s=[],r=o=>{if(o===null||typeof o!="object"||y.isBuffer(o))return o;if(s.indexOf(o)!==-1)return;o instanceof ze&&(o=o.toJSON()),s.push(o);let i;if(y.isArray(o))i=[],o.forEach((l,a)=>{const c=r(l);y.isUndefined(c)||(i[a]=c)});else{if(!y.isPlainObject(o)&&lh(o))return s.pop(),o;i=Object.create(null);for(const[l,a]of Object.entries(o)){const c=n.has(l.toLowerCase())?ih:r(a);y.isUndefined(c)||(i[l]=c)}}return s.pop(),i};return r(e)}let K=class Ga extends Error{static from(t,n,s,r,o,i){const l=new Ga(t.message,n||t.code,s,r,o);return Object.defineProperty(l,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,n,s,r,o){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),s&&(this.config=s),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const t=this.config,n=t&&y.hasOwnProp(t,"redact")?t.redact:void 0,s=y.isArray(n)&&n.length>0?ah(t,n):y.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:s,code:this.code,status:this.status}}};K.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";K.ERR_BAD_OPTION="ERR_BAD_OPTION";K.ECONNABORTED="ECONNABORTED";K.ETIMEDOUT="ETIMEDOUT";K.ECONNREFUSED="ECONNREFUSED";K.ERR_NETWORK="ERR_NETWORK";K.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";K.ERR_DEPRECATED="ERR_DEPRECATED";K.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";K.ERR_BAD_REQUEST="ERR_BAD_REQUEST";K.ERR_CANCELED="ERR_CANCELED";K.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";K.ERR_INVALID_URL="ERR_INVALID_URL";K.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const uh=null,za=100;function Hr(e){return y.isPlainObject(e)||y.isArray(e)}function Ja(e){return y.endsWith(e,"[]")?e.slice(0,-2):e}function vr(e,t,n){return e?e.concat(t).map(function(r,o){return r=Ja(r),!n&&o?"["+r+"]":r}).join(n?".":""):t}function ch(e){return y.isArray(e)&&!e.some(Hr)}const fh=y.toFlatObject(y,{},null,function(t){return/^is[A-Z]/.test(t)});function er(e,t,n){if(!y.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=y.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(R,k){return!y.isUndefined(k[R])});const s=n.metaTokens,r=n.visitor||A,o=n.dots,i=n.indexes,l=n.Blob||typeof Blob<"u"&&Blob,a=n.maxDepth===void 0?za:n.maxDepth,c=l&&y.isSpecCompliantForm(t),u=[];if(!y.isFunction(r))throw new TypeError("visitor must be a function");function f(v){if(v===null)return"";if(y.isDate(v))return v.toISOString();if(y.isBoolean(v))return v.toString();if(!c&&y.isBlob(v))throw new K("Blob is not supported. Use a Buffer instead.");if(y.isArrayBuffer(v)||y.isTypedArray(v)){if(c&&typeof l=="function")return new l([v]);if(typeof Buffer<"u")return Buffer.from(v);throw new K("Blob is not supported. Use a Buffer instead.",K.ERR_NOT_SUPPORT)}return v}function p(v){if(v>a)throw new K("Object is too deeply nested ("+v+" levels). Max depth: "+a,K.ERR_FORM_DATA_DEPTH_EXCEEDED)}function m(v,R){if(a===1/0)return JSON.stringify(v);const k=[];return JSON.stringify(v,function(x,_){if(!y.isObject(_))return _;for(;k.length&&k[k.length-1]!==this;)k.pop();return k.push(_),p(R+k.length-1),_})}function A(v,R,k){let S=v;if(y.isReactNative(t)&&y.isReactNativeBlob(v))return t.append(vr(k,R,o),f(v)),!1;if(v&&!k&&typeof v=="object"){if(y.endsWith(R,"{}"))R=s?R:R.slice(0,-2),v=m(v,1);else if(y.isArray(v)&&ch(v)||(y.isFileList(v)||y.endsWith(R,"[]"))&&(S=y.toArray(v)))return R=Ja(R),S.forEach(function(_,O){!(y.isUndefined(_)||_===null)&&t.append(i===!0?vr([R],O,o):i===null?R:R+"[]",f(_))}),!1}return Hr(v)?!0:(t.append(vr(k,R,o),f(v)),!1)}const P=Object.assign(fh,{defaultVisitor:A,convertValue:f,isVisitable:Hr});function w(v,R,k=0){if(!y.isUndefined(v)){if(p(k),u.indexOf(v)!==-1)throw new Error("Circular reference detected in "+R.join("."));u.push(v),y.forEach(v,function(x,_){(!(y.isUndefined(x)||x===null)&&r.call(t,x,y.isString(_)?_.trim():_,R,P))===!0&&w(x,R?R.concat(_):[_],k+1)}),u.pop()}}if(!y.isObject(e))throw new TypeError("data must be an object");return w(e),t}function Bi(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(s){return t[s]})}function vo(e,t){this._pairs=[],e&&er(e,this,t)}const Xa=vo.prototype;Xa.append=function(t,n){this._pairs.push([t,n])};Xa.toString=function(t){const n=t?s=>t.call(this,s,Bi):Bi;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function dh(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Qa(e,t,n){if(!t)return e;e=e||"";const s=y.isFunction(n)?{serialize:n}:n,r=y.getSafeProp(s,"encode")||dh,o=y.getSafeProp(s,"serialize");let i;if(o?i=o(t,s):i=y.isURLSearchParams(t)?t.toString():new vo(t,s).toString(r),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class ji{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){y.forEach(this.handlers,function(s){s!==null&&t(s)})}}const _o={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},ph=typeof URLSearchParams<"u"?URLSearchParams:vo,hh=typeof FormData<"u"?FormData:null,mh=typeof Blob<"u"?Blob:null,gh={isBrowser:!0,classes:{URLSearchParams:ph,FormData:hh,Blob:mh},protocols:["http","https","file","blob","url","data"]},wo=typeof window<"u"&&typeof document<"u",qr=typeof navigator=="object"&&navigator||void 0,yh=wo&&(!qr||["ReactNative","NativeScript","NS"].indexOf(qr.product)<0),bh=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",xh=wo&&window.location.href||"http://localhost",vh=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:wo,hasStandardBrowserEnv:yh,hasStandardBrowserWebWorkerEnv:bh,navigator:qr,origin:xh},Symbol.toStringTag,{value:"Module"})),Ve={...vh,...gh};function _h(e,t){return er(e,new Ve.classes.URLSearchParams,{visitor:function(n,s,r,o){return Ve.isNode&&y.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}const Hi=za;function Ya(e){if(e>Hi)throw new K("FormData field is too deeply nested ("+e+" levels). Max depth: "+Hi,K.ERR_FORM_DATA_DEPTH_EXCEEDED)}function wh(e){const t=[],n=/\w+|\[(\w*)]/g;let s;for(;(s=n.exec(e))!==null;)Ya(t.length),t.push(s[0]==="[]"?"":s[1]||s[0]);return t}function Eh(e){const t={},n=Object.keys(e);let s;const r=n.length;let o;for(s=0;s=n.length;return i=!i&&y.isArray(r)?r.length:i,a?(y.hasOwnProp(r,i)?r[i]=y.isArray(r[i])?r[i].concat(s):[r[i],s]:r[i]=s,!l):((!y.hasOwnProp(r,i)||!y.isObject(r[i]))&&(r[i]=[]),t(n,s,r[i],o)&&y.isArray(r[i])&&(r[i]=Eh(r[i])),!l)}if(y.isFormData(e)&&y.isFunction(e.entries)){const n={};return y.forEachEntry(e,(s,r)=>{t(wh(s),r,n,0)}),n}return null}const pn=(e,t)=>e!=null&&y.hasOwnProp(e,t)?e[t]:void 0;function Sh(e,t,n){if(y.isString(e))try{return(t||JSON.parse)(e),y.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const fs={transitional:_o,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,o=y.isObject(t);if(o&&y.isHTMLForm(t)&&(t=new FormData(t)),y.isFormData(t))return r?JSON.stringify(Za(t)):t;if(y.isArrayBuffer(t)||y.isBuffer(t)||y.isStream(t)||y.isFile(t)||y.isBlob(t)||y.isReadableStream(t))return t;if(y.isArrayBufferView(t))return t.buffer;if(y.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){const a=pn(this,"formSerializer");if(s.indexOf("application/x-www-form-urlencoded")>-1)return _h(t,a).toString();if((l=y.isFileList(t))||s.indexOf("multipart/form-data")>-1){const c=pn(this,"env"),u=c&&c.FormData;return er(l?{"files[]":t}:t,u&&new u,a)}}return o||r?(n.setContentType("application/json",!1),Sh(t)):t}],transformResponse:[function(t){const n=pn(this,"transitional")||fs.transitional,s=n&&n.forcedJSONParsing,r=pn(this,"responseType"),o=r==="json";if(y.isResponse(t)||y.isReadableStream(t))return t;if(t&&y.isString(t)&&(s&&!r||o)){const l=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t,pn(this,"parseReviver"))}catch(a){if(l)throw a.name==="SyntaxError"?K.from(a,K.ERR_BAD_RESPONSE,this,null,pn(this,"response")):a}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ve.classes.FormData,Blob:Ve.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};y.forEach(["delete","get","head","post","put","patch","query"],e=>{fs.headers[e]={}});function _r(e,t){const n=this||fs,s=t||n,r=ze.from(s.headers);let o=s.data;return y.forEach(e,function(l){o=l.call(n,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function eu(e){return!!(e&&e.__CANCEL__)}let ds=class extends K{constructor(t,n,s){super(t??"canceled",K.ERR_CANCELED,n,s),this.name="CanceledError",this.__CANCEL__=!0}};function tu(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new K("Request failed with status code "+n.status,n.status>=400&&n.status<500?K.ERR_BAD_REQUEST:K.ERR_BAD_RESPONSE,n.config,n.request,n))}function Rh(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}function Ch(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,o=0,i;return t=t!==void 0?t:1e3,function(a){const c=Date.now(),u=s[o];i||(i=c),n[r]=a,s[r]=c;let f=o,p=0;for(;f!==r;)p+=n[f++],f=f%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),c-i{n=u,r=null,o&&(clearTimeout(o),o=null),e(...c)};return[(...c)=>{const u=Date.now(),f=u-n;f>=s?i(c,u):(r=c,o||(o=setTimeout(()=>{o=null,i(r)},s-f)))},()=>r&&i(r)]}const Ds=(e,t,n=3)=>{let s=0;const r=Ch(50,250);return Ah(o=>{if(!o||typeof o.loaded!="number")return;const i=o.loaded,l=o.lengthComputable?o.total:void 0,a=l!=null?Math.min(i,l):i,c=Math.max(0,a-s),u=r(c);s=Math.max(s,a);const f={loaded:a,total:l,progress:l?a/l:void 0,bytes:c,rate:u||void 0,estimated:u&&l?(l-a)/u:void 0,event:o,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(f)},n)},qi=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},Ki=e=>(...t)=>y.asap(()=>e(...t)),Oh=Ve.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Ve.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Ve.origin),Ve.navigator&&/(msie|trident)/i.test(Ve.navigator.userAgent)):()=>!0,Th=Ve.hasStandardBrowserEnv?{write(e,t,n,s,r,o,i){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];y.isNumber(n)&&l.push(`expires=${new Date(n).toUTCString()}`),y.isString(s)&&l.push(`path=${s}`),y.isString(r)&&l.push(`domain=${r}`),o===!0&&l.push("secure"),y.isString(i)&&l.push(`SameSite=${i}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;ne instanceof ze?{...e}:e;function fn(e,t){e=e||{},t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function s(u,f,p,m){return y.isPlainObject(u)&&y.isPlainObject(f)?y.merge.call({caseless:m},u,f):y.isPlainObject(f)?y.merge({},f):y.isArray(f)?f.slice():f}function r(u,f,p,m){if(y.isUndefined(f)){if(!y.isUndefined(u))return s(void 0,u,p,m)}else return s(u,f,p,m)}function o(u,f){if(!y.isUndefined(f))return s(void 0,f)}function i(u,f){if(y.isUndefined(f)){if(!y.isUndefined(u))return s(void 0,u)}else return s(void 0,f)}function l(u){const f=y.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!y.isUndefined(f))if(y.isPlainObject(f)){if(y.hasOwnProp(f,u))return f[u]}else return;const p=y.hasOwnProp(e,"transitional")?e.transitional:void 0;if(y.isPlainObject(p)&&y.hasOwnProp(p,u))return p[u]}function a(u,f,p){if(y.hasOwnProp(t,p))return s(u,f);if(y.hasOwnProp(e,p))return s(void 0,u)}const c={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:a,headers:(u,f,p)=>r(Gi(u),Gi(f),p,!0)};return y.forEach(Object.keys({...e,...t}),function(f){if(f==="__proto__"||f==="constructor"||f==="prototype")return;const p=y.hasOwnProp(c,f)?c[f]:r,m=y.hasOwnProp(e,f)?e[f]:void 0,A=y.hasOwnProp(t,f)?t[f]:void 0,P=p(m,A,f);y.isUndefined(P)&&p!==a||(n[f]=P)}),y.hasOwnProp(t,"validateStatus")&&y.isUndefined(t.validateStatus)&&l("validateStatusUndefinedResolves")===!1&&(y.hasOwnProp(e,"validateStatus")?n.validateStatus=s(void 0,e.validateStatus):delete n.validateStatus),n}const Lh=["content-type","content-length"];function Uh(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([s,r])=>{Lh.includes(s.toLowerCase())&&e.set(s,r)})}const Fh=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function su(e){const t=fn({},e),n=p=>y.hasOwnProp(t,p)?t[p]:void 0,s=n("data");let r=n("withXSRFToken");const o=n("xsrfHeaderName"),i=n("xsrfCookieName");let l=n("headers");const a=n("auth"),c=n("baseURL"),u=n("allowAbsoluteUrls"),f=n("url");if(t.headers=l=ze.from(l),t.url=Qa(nu(c,f,u,t),n("params"),n("paramsSerializer")),a){const p=y.getSafeProp(a,"username")||"",m=y.getSafeProp(a,"password")||"";try{l.set("Authorization","Basic "+btoa(p+":"+(m?Fh(m):"")))}catch(A){throw K.from(A,K.ERR_BAD_OPTION_VALUE,e)}}if(y.isFormData(s)&&(Ve.hasStandardBrowserEnv||Ve.hasStandardBrowserWebWorkerEnv||y.isReactNative(s)?l.setContentType(void 0):y.isFunction(s.getHeaders)&&Uh(l,s.getHeaders(),n("formDataHeaderPolicy"))),Ve.hasStandardBrowserEnv&&(y.isFunction(r)&&(r=r(t)),r===!0||r==null&&Oh(t.url))){const m=o&&i&&Th.read(i);m&&l.set(o,m)}return t}const Mh=typeof XMLHttpRequest<"u",Vh=Mh&&function(e){return new Promise(function(n,s){const r=su(e);let o=r.data;const i=ze.from(r.headers).normalize();let{responseType:l,onUploadProgress:a,onDownloadProgress:c}=r,u,f,p,m,A;function P(){m&&m(),A&&A(),r.cancelToken&&r.cancelToken.unsubscribe(u),r.signal&&r.signal.removeEventListener("abort",u)}let w=new XMLHttpRequest;w.open(r.method.toUpperCase(),r.url,!0),w.timeout=r.timeout;function v(){if(!w)return;const k=ze.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),x={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:k,config:e,request:w};tu(function(O){n(O),P()},function(O){s(O),P()},x),w=null}"onloadend"in w?w.onloadend=v:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.startsWith("file:"))||setTimeout(v)},w.onabort=function(){w&&(s(new K("Request aborted",K.ECONNABORTED,e,w)),P(),w=null)},w.onerror=function(S){const x=S&&S.message?S.message:"Network Error",_=new K(x,K.ERR_NETWORK,e,w);_.event=S||null,s(_),P(),w=null},w.ontimeout=function(){let S=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const x=r.transitional||_o;r.timeoutErrorMessage&&(S=r.timeoutErrorMessage),s(new K(S,x.clarifyTimeoutError?K.ETIMEDOUT:K.ECONNABORTED,e,w)),P(),w=null},o===void 0&&i.setContentType(null),"setRequestHeader"in w&&y.forEach(Wa(i),function(S,x){w.setRequestHeader(x,S)}),y.isUndefined(r.withCredentials)||(w.withCredentials=!!r.withCredentials),l&&l!=="json"&&(w.responseType=r.responseType),c&&([p,A]=Ds(c,!0),w.addEventListener("progress",p)),a&&w.upload&&([f,m]=Ds(a),w.upload.addEventListener("progress",f),w.upload.addEventListener("loadend",m)),(r.cancelToken||r.signal)&&(u=k=>{w&&(s(!k||k.type?new ds(null,e,w):k),w.abort(),P(),w=null)},r.cancelToken&&r.cancelToken.subscribe(u),r.signal&&(r.signal.aborted?u():r.signal.addEventListener("abort",u)));const R=Rh(r.url);if(R&&!Ve.protocols.includes(R)){s(new K("Unsupported protocol "+R+":",K.ERR_BAD_REQUEST,e)),P();return}w.send(o||null)})},Bh=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let s=!1;const r=function(a){if(!s){s=!0,i();const c=a instanceof Error?a:this.reason;n.abort(c instanceof K?c:new ds(c instanceof Error?c.message:c))}};let o=t&&setTimeout(()=>{o=null,r(new K(`timeout of ${t}ms exceeded`,K.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(r):a.removeEventListener("abort",r)}),e=null)};e.forEach(a=>a.addEventListener("abort",r,{once:!0}));const{signal:l}=n;return l.unsubscribe=()=>y.asap(i),l},jh=function*(e,t){let n=e.byteLength;if(n{const r=Hh(e,t);let o=0,i,l=a=>{i||(i=!0,s&&s(a))};return new ReadableStream({async pull(a){try{const{done:c,value:u}=await r.next();if(c){l(),a.close();return}let f=u.byteLength;if(n){let p=o+=f;n(p)}a.enqueue(new Uint8Array(u))}catch(c){throw l(c),c}},cancel(a){return l(a),r.return()}},{highWaterMark:2})},$s=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,Kh=(e,t,n)=>t+2m>=2&&s.charCodeAt(m-2)===37&&s.charCodeAt(m-1)===51&&(s.charCodeAt(m)===68||s.charCodeAt(m)===100);c>=0&&(s.charCodeAt(c)===61?(a++,c--):u(c)&&(a++,c-=3)),a===1&&c>=0&&(s.charCodeAt(c)===61||u(c))&&a++;const p=Math.floor(i/4)*3-(a||0);return p>0?p:0}let o=0;for(let i=0,l=s.length;i=55296&&a<=56319&&i+1=56320&&c<=57343?(o+=4,i++):o+=3}else o+=3}return o}const Eo="1.18.1",Ji=64*1024,{isFunction:ys}=y,Gh=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),Xi=e=>{if(!y.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Qi=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zh=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},Jh=e=>{const t=y.global!==void 0&&y.global!==null?y.global:globalThis,{ReadableStream:n,TextEncoder:s}=t;e=y.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:r,Request:o,Response:i}=e,l=r?ys(r):typeof fetch=="function",a=ys(o),c=ys(i);if(!l)return!1;const u=l&&ys(n),f=l&&(typeof s=="function"?(v=>R=>v.encode(R))(new s):async v=>new Uint8Array(await new o(v).arrayBuffer())),p=a&&u&&Qi(()=>{let v=!1;const R=new o(Ve.origin,{body:new n,method:"POST",get duplex(){return v=!0,"half"}}),k=R.headers.has("Content-Type");return R.body!=null&&R.body.cancel(),v&&!k}),m=c&&u&&Qi(()=>y.isReadableStream(new i("").body)),A={stream:m&&(v=>v.body)};l&&["text","arrayBuffer","blob","formData","stream"].forEach(v=>{!A[v]&&(A[v]=(R,k)=>{let S=R&&R[v];if(S)return S.call(R);throw new K(`Response type '${v}' is not supported`,K.ERR_NOT_SUPPORT,k)})});const P=async v=>{if(v==null)return 0;if(y.isBlob(v))return v.size;if(y.isSpecCompliantForm(v))return(await new o(Ve.origin,{method:"POST",body:v}).arrayBuffer()).byteLength;if(y.isArrayBufferView(v)||y.isArrayBuffer(v))return v.byteLength;if(y.isURLSearchParams(v)&&(v=v+""),y.isString(v))return(await f(v)).byteLength},w=async(v,R)=>{const k=y.toFiniteNumber(v.getContentLength());return k??P(R)};return async v=>{let{url:R,method:k,data:S,signal:x,cancelToken:_,timeout:O,onDownloadProgress:te,onUploadProgress:B,responseType:ee,headers:re,withCredentials:H="same-origin",fetchOptions:ie,maxContentLength:ce,maxBodyLength:Ie}=su(v);const we=y.isNumber(ce)&&ce>-1,fe=y.isNumber(Ie)&&Ie>-1,ue=ne=>y.hasOwnProp(v,ne)?v[ne]:void 0;let et=r||fetch;ee=ee?(ee+"").toLowerCase():"text";let De=Bh([x,_&&_.toAbortSignal()],O),D=null;const I=De&&De.unsubscribe&&(()=>{De.unsubscribe()});let j,pe=null;const ye=()=>new K("Request body larger than maxBodyLength limit",K.ERR_BAD_REQUEST,v,D);try{let ne;const C=ue("auth");if(C){const E=y.getSafeProp(C,"username")||"",T=y.getSafeProp(C,"password")||"";ne={username:E,password:T}}if(zh(R)){const E=new URL(R,Ve.origin);if(!ne&&(E.username||E.password)){const T=Xi(E.username),V=Xi(E.password);ne={username:T,password:V}}(E.username||E.password)&&(E.username="",E.password="",R=E.href)}if(ne&&(re.delete("authorization"),re.set("Authorization","Basic "+btoa(Gh((ne.username||"")+":"+(ne.password||""))))),we&&typeof R=="string"&&R.startsWith("data:")&&Wh(R)>ce)throw new K("maxContentLength size of "+ce+" exceeded",K.ERR_BAD_RESPONSE,v,D);if(fe&&k!=="get"&&k!=="head"){const E=await P(S);if(typeof E=="number"&&isFinite(E)&&(j=E,E>Ie))throw ye()}const W=fe&&(y.isReadableStream(S)||y.isStream(S)),q=(E,T,V)=>zi(E,Ji,F=>{if(fe&&F>Ie)throw pe=ye();T&&T(F)},V);if(p&&k!=="get"&&k!=="head"&&(B||W)){if(j=j??await w(re,S),j!==0||W){let E=new o(R,{method:"POST",body:S,duplex:"half"}),T;if(y.isFormData(S)&&(T=E.headers.get("content-type"))&&re.setContentType(T),E.body){const[V,F]=B&&qi(j,Ds(Ki(B)))||[];S=q(E.body,V,F)}}}else if(W&&!a&&u&&k!=="get"&&k!=="head")S=q(S);else if(W&&a&&!p&&k!=="get"&&k!=="head")throw new K("Stream request bodies are not supported by the current fetch implementation",K.ERR_NOT_SUPPORT,v,D);y.isString(H)||(H=H?"include":"omit");const X=a&&"credentials"in o.prototype;if(y.isFormData(S)){const E=re.getContentType();E&&/^multipart\/form-data/i.test(E)&&!/boundary=/i.test(E)&&re.delete("content-type")}re.set("User-Agent","axios/"+Eo,!1);const le={...ie,signal:De,method:k.toUpperCase(),headers:Wa(re.normalize()),body:S,duplex:"half",credentials:X?H:void 0};D=a&&new o(R,le);let h=await(a?et(D,ie):et(R,le));const g=ze.from(h.headers);if(we){const E=y.toFiniteNumber(g.getContentLength());if(E!=null&&E>ce)throw new K("maxContentLength size of "+ce+" exceeded",K.ERR_BAD_RESPONSE,v,D)}const b=m&&(ee==="stream"||ee==="response");if(m&&h.body&&(te||we||b&&I)){const E={};["status","statusText","headers"].forEach(J=>{E[J]=h[J]});const T=y.toFiniteNumber(g.getContentLength()),[V,F]=te&&qi(T,Ds(Ki(te),!0))||[];let M=0;const $=J=>{if(we&&(M=J,M>ce))throw new K("maxContentLength size of "+ce+" exceeded",K.ERR_BAD_RESPONSE,v,D);V&&V(J)};h=new i(zi(h.body,Ji,$,()=>{F&&F(),I&&I()}),E)}ee=ee||"text";let N=await A[y.findKey(A,ee)||"text"](h,v);if(we&&!m&&!b){let E;if(N!=null&&(typeof N.byteLength=="number"?E=N.byteLength:typeof N.size=="number"?E=N.size:typeof N=="string"&&(E=typeof s=="function"?new s().encode(N).byteLength:N.length)),typeof E=="number"&&E>ce)throw new K("maxContentLength size of "+ce+" exceeded",K.ERR_BAD_RESPONSE,v,D)}return!b&&I&&I(),await new Promise((E,T)=>{tu(E,T,{data:N,headers:ze.from(h.headers),status:h.status,statusText:h.statusText,config:v,request:D})})}catch(ne){if(I&&I(),De&&De.aborted&&De.reason instanceof K){const C=De.reason;throw C.config=v,D&&(C.request=D),ne!==C&&Object.defineProperty(C,"cause",{__proto__:null,value:ne,writable:!0,enumerable:!1,configurable:!0}),C}if(pe)throw D&&!pe.request&&(pe.request=D),pe;if(ne instanceof K)throw D&&!ne.request&&(ne.request=D),ne;if(ne&&ne.name==="TypeError"&&/Load failed|fetch/i.test(ne.message)){const C=new K("Network Error",K.ERR_NETWORK,v,D,ne&&ne.response);throw Object.defineProperty(C,"cause",{__proto__:null,value:ne.cause||ne,writable:!0,enumerable:!1,configurable:!0}),C}throw K.from(ne,ne&&ne.code,v,D,ne&&ne.response)}}},Xh=new Map,ru=e=>{let t=e&&e.env||{};const{fetch:n,Request:s,Response:r}=t,o=[s,r,n];let i=o.length,l=i,a,c,u=Xh;for(;l--;)a=o[l],c=u.get(a),c===void 0&&u.set(a,c=l?new Map:Jh(t)),u=c;return c};ru();const So={http:uh,xhr:Vh,fetch:{get:ru}};y.forEach(So,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const Yi=e=>`- ${e}`,Qh=e=>y.isFunction(e)||e===null||e===!1;function Yh(e,t){e=y.isArray(e)?e:[e];const{length:n}=e;let s,r;const o={};for(let i=0;i`adapter ${a} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=n?i.length>1?`since : -`+i.map(Yi).join(` -`):" "+Yi(i[0]):"as no adapter specified";throw new K("There is no suitable adapter to dispatch the request "+l,K.ERR_NOT_SUPPORT)}return r}const ou={getAdapter:Yh,adapters:So};function wr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ds(null,e)}function Zi(e){return wr(e),e.headers=ze.from(e.headers),e.data=_r.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ou.getAdapter(e.adapter||fs.adapter,e)(e).then(function(s){wr(e),e.response=s;try{s.data=_r.call(e,e.transformResponse,s)}finally{delete e.response}return s.headers=ze.from(s.headers),s},function(s){if(!eu(s)&&(wr(e),s&&s.response)){e.response=s.response;try{s.response.data=_r.call(e,e.transformResponse,s.response)}finally{delete e.response}s.response.headers=ze.from(s.response.headers)}return Promise.reject(s)})}const tr={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{tr[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const el={};tr.transitional=function(t,n,s){function r(o,i){return"[Axios v"+Eo+"] Transitional option '"+o+"'"+i+(s?". "+s:"")}return(o,i,l)=>{if(t===!1)throw new K(r(i," has been removed"+(n?" in "+n:"")),K.ERR_DEPRECATED);return n&&!el[i]&&(el[i]=!0,console.warn(r(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,l):!0}};tr.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function Zh(e,t,n){if(typeof e!="object"||e===null)throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const o=s[r],i=Object.prototype.hasOwnProperty.call(t,o)?t[o]:void 0;if(i){const l=e[o],a=l===void 0||i(l,o,e);if(a!==!0)throw new K("option "+o+" must be "+a,K.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new K("Unknown option "+o,K.ERR_BAD_OPTION)}}const Ss={assertOptions:Zh,validators:tr},He=Ss.validators;let an=class{constructor(t){this.defaults=t||{},this.interceptors={request:new ji,response:new ji}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=(()=>{if(!r.stack)return"";const i=r.stack.indexOf(` -`);return i===-1?"":r.stack.slice(i+1)})();try{if(!s.stack)s.stack=o;else if(o){const i=o.indexOf(` -`),l=i===-1?-1:o.indexOf(` -`,i+1),a=l===-1?"":o.slice(l+1);String(s.stack).endsWith(a)||(s.stack+=` -`+o)}}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=fn(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:o}=n;s!==void 0&&Ss.assertOptions(s,{silentJSONParsing:He.transitional(He.boolean),forcedJSONParsing:He.transitional(He.boolean),clarifyTimeoutError:He.transitional(He.boolean),legacyInterceptorReqResOrdering:He.transitional(He.boolean),advertiseZstdAcceptEncoding:He.transitional(He.boolean),validateStatusUndefinedResolves:He.transitional(He.boolean)},!1),r!=null&&(y.isFunction(r)?n.paramsSerializer={serialize:r}:Ss.assertOptions(r,{encode:He.function,serialize:He.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Ss.assertOptions(n,{baseUrl:He.spelling("baseURL"),withXsrfToken:He.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&y.merge(o.common,o[n.method]);o&&y.forEach(["delete","get","head","post","put","patch","query","common"],A=>{delete o[A]}),n.headers=ze.concat(i,o);const l=[];let a=!0;this.interceptors.request.forEach(function(P){if(typeof P.runWhen=="function"&&P.runWhen(n)===!1)return;a=a&&P.synchronous;const w=n.transitional||_o;w&&w.legacyInterceptorReqResOrdering?l.unshift(P.fulfilled,P.rejected):l.push(P.fulfilled,P.rejected)});const c=[];this.interceptors.response.forEach(function(P){c.push(P.fulfilled,P.rejected)});let u,f=0,p;if(!a){const A=[Zi.bind(this),void 0];for(A.unshift(...l),A.push(...c),p=A.length,u=Promise.resolve(n);f{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](r);s._listeners=null}),this.promise.then=r=>{let o;const i=new Promise(l=>{s.subscribe(l),o=l}).then(r);return i.cancel=function(){s.unsubscribe(o)},i},t(function(o,i,l){s.reason||(s.reason=new ds(o,i,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new iu(function(r){t=r}),cancel:t}}};function tm(e){return function(n){return e.apply(null,n)}}function nm(e){return y.isObject(e)&&e.isAxiosError===!0}const Kr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Kr).forEach(([e,t])=>{Kr[t]=e});function lu(e){const t=new an(e),n=Ua(an.prototype.request,t);return y.extend(n,an.prototype,t,{allOwnKeys:!0}),y.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return lu(fn(e,r))},n}const Ne=lu(fs);Ne.Axios=an;Ne.CanceledError=ds;Ne.CancelToken=em;Ne.isCancel=eu;Ne.VERSION=Eo;Ne.toFormData=er;Ne.AxiosError=K;Ne.Cancel=Ne.CanceledError;Ne.all=function(t){return Promise.all(t)};Ne.spread=tm;Ne.isAxiosError=nm;Ne.mergeConfig=fn;Ne.AxiosHeaders=ze;Ne.formToJSON=e=>Za(y.isHTMLForm(e)?new FormData(e):e);Ne.getAdapter=ou.getAdapter;Ne.HttpStatusCode=Kr;Ne.default=Ne;const{Axios:zb,AxiosError:Jb,CanceledError:Xb,isCancel:Qb,CancelToken:Yb,VERSION:Zb,all:e0,Cancel:t0,isAxiosError:n0,spread:s0,toFormData:r0,AxiosHeaders:o0,HttpStatusCode:i0,formToJSON:l0,getAdapter:a0,mergeConfig:u0,create:c0}=Ne,ge=Ne.create({timeout:3e4});ge.interceptors.request.use(e=>{e.baseURL=`${rp()}/api`;const t=sp();return t&&(e.headers.Authorization=`Bearer ${t}`),e});ge.interceptors.response.use(e=>e.data,e=>{var n,s,r,o;((n=e.response)==null?void 0:n.status)===401&&tp();const t=((o=(r=(s=e.response)==null?void 0:s.data)==null?void 0:r.error)==null?void 0:o.message)||e.message||"Request failed";return Promise.reject(new Error(t))});const au=()=>ge.get("/env"),sm=()=>ge.get("/settings"),rm=e=>ge.patch("/settings",e),om=()=>ge.get("/storage"),im=e=>ge.post("/storage",e),Ro=()=>ge.get("/sources"),lm=e=>ge.post("/sources",e),am=(e,t)=>ge.patch(`/sources/${e}`,t),um=e=>ge.delete(`/sources/${e}`),uu=()=>ge.get("/collections"),cm=e=>ge.post("/collections",e),fm=(e,t)=>ge.patch(`/collections/${e}`,t),dm=e=>ge.delete(`/collections/${e}`),Co=()=>ge.get("/templates"),pm=e=>ge.post("/templates",e),hm=(e,t)=>ge.patch(`/templates/${e}`,t),mm=e=>ge.delete(`/templates/${e}`),gm=()=>ge.get("/recycle-bin"),ym=e=>ge.delete(`/recycle-bin/${e}`),bm=e=>ge.post(`/recycle-bin/${e}/restore`),tl=e=>ge.post("/preview/source",e),xm=e=>ge.post("/preview/collection",e),vm=(e,t)=>ge.get(`/link/source/${e}`,{params:{}}),_m=(e,t)=>ge.get(`/link/collection/${e}`,{params:{}}),wm=e=>ge.get(`/source/flow/${e}`),Em=e=>ge.post("/proxy/parse",e),Sm=e=>ge.post("/rule/parse",e),Rm=e=>ge.post("/utils/proxy-uri",e),Cm=e=>ge.post("/utils/node-info",{server:e}),Am={class:"min-h-screen flex bg-gray-50"},Om={class:"w-60 bg-gray-900 text-gray-300 flex flex-col fixed inset-y-0 left-0 z-30"},Tm={class:"px-5 py-4 border-b border-gray-700"},Pm={key:0,class:"text-xs text-gray-500 mt-0.5"},Nm={class:"flex-1 py-3 overflow-y-auto"},Im={class:"text-base"},km={class:"flex-1 ml-60 min-h-screen"},Dm={class:"px-6 py-5"},$m={__name:"AdminLayout",setup(e){const t=Y(null),n=[{to:"/",icon:"📊",label:"概览"},{to:"/sources",icon:"📡",label:"订阅源"},{to:"/collections",icon:"📁",label:"合集"},{to:"/templates",icon:"📋",label:"模板"},{to:"/recycle-bin",icon:"♻️",label:"回收站"},{to:"/tools",icon:"🔧",label:"工具"},{to:"/settings",icon:"⚙️",label:"设置"}];return Vt(async()=>{try{const s=await au();t.value=s.data}catch{}}),(s,r)=>{const o=Nr("router-link"),i=Nr("router-view");return L(),U("div",Am,[d("aside",Om,[d("div",Tm,[r[0]||(r[0]=d("h1",{class:"text-lg font-bold text-white flex items-center gap-2"},[d("span",{class:"inline-block w-2 h-2 bg-primary-500 rounded-full"}),ts(" Sub-Store ")],-1)),t.value?(L(),U("p",Pm,G(t.value.backend)+" · "+G(t.value.version),1)):he("",!0)]),d("nav",Nm,[(L(),U(ve,null,Me(n,l=>Ae(o,{key:l.to,to:l.to,class:Be(["flex items-center gap-3 px-5 py-2.5 text-sm transition-colors",s.$route.path===l.to||l.to!=="/"&&s.$route.path.startsWith(l.to)?"bg-gray-800 text-white border-l-2 border-primary-500":"hover:bg-gray-800/50 border-l-2 border-transparent"])},{default:ft(()=>[d("span",Im,G(l.icon),1),d("span",null,G(l.label),1)]),_:2},1032,["to","class"])),64))]),r[1]||(r[1]=d("div",{class:"px-5 py-3 border-t border-gray-700 text-xs text-gray-500"},[d("p",null,"SQLite · Go")],-1))]),d("main",km,[d("div",Dm,[Ae(i)])])])}}},Lm={class:"min-h-screen bg-gray-50 flex items-center justify-center px-4"},Um={key:0,class:"mt-4 text-sm text-red-600"},Fm=["disabled"],Mm={__name:"Login",setup(e){const t=Yd(),n=Qd(),s=Y(yo()||window.location.origin),r=Y(""),o=Y(!1),i=Y("");async function l(){i.value="",o.value=!0;try{if(!await np(r.value,s.value)){i.value="远程 URI 或 TOKEN 无效";return}Zd(s.value,r.value),n.replace(typeof t.query.redirect=="string"?t.query.redirect:"/")}catch{i.value="远程 URI 格式无效"}finally{o.value=!1}}return(a,c)=>(L(),U("div",Lm,[d("form",{class:"w-full max-w-sm bg-white border border-gray-200 rounded-lg p-6 shadow-sm",onSubmit:jn(l,["prevent"])},[c[2]||(c[2]=d("label",{class:"block text-sm font-medium text-gray-700",for:"remote-uri"},"远程 URI",-1)),ae(d("input",{id:"remote-uri","onUpdate:modelValue":c[0]||(c[0]=u=>s.value=u),type:"url",required:"",autocomplete:"url",placeholder:"https://sub-store.example.com",class:"mt-2 w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"},null,512),[[Te,s.value,void 0,{trim:!0}]]),c[3]||(c[3]=d("label",{class:"block mt-4 text-sm font-medium text-gray-700",for:"token"},"TOKEN",-1)),ae(d("input",{id:"token","onUpdate:modelValue":c[1]||(c[1]=u=>r.value=u),type:"password",required:"",autocomplete:"current-password",class:"mt-2 w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary-500"},null,512),[[Te,r.value,void 0,{trim:!0}]]),i.value?(L(),U("p",Um,G(i.value),1)):he("",!0),d("button",{type:"submit",disabled:o.value,class:"mt-6 w-full px-4 py-2 rounded-lg bg-primary-600 text-white text-sm font-medium hover:bg-primary-700 disabled:opacity-60 disabled:cursor-not-allowed"},G(o.value?"登录中...":"登录"),9,Fm)],32)]))}},Vm={class:"min-h-screen flex items-center justify-center bg-gray-50"},Bm={__name:"NotFound",setup(e){return(t,n)=>(L(),U("div",Vm,[...n[0]||(n[0]=[d("div",{class:"text-center"},[d("p",{class:"text-7xl font-bold text-gray-300"},"404"),d("p",{class:"mt-4 text-gray-400"},"Page Not Found")],-1)])]))}},jm={class:"grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6"},Hm={class:"text-sm text-gray-500"},qm={class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},Km={class:"bg-white rounded-lg p-4 shadow-sm border"},Wm={key:0,class:"space-y-1.5 text-sm"},Gm={class:"flex justify-between"},zm={class:"flex justify-between"},Jm={class:"flex justify-between"},Xm={class:"flex justify-between"},Qm={class:"flex justify-between"},Ym={key:1,class:"text-gray-400 text-sm"},Zm={class:"bg-white rounded-lg p-4 shadow-sm border"},eg={key:0,class:"flex flex-wrap gap-2"},tg={__name:"Dashboard",setup(e){const t=Y(null),n=Y([]),s=Y([]),r=Y([]),o=tt(()=>[{label:"订阅源",value:n.value.length,color:"text-blue-600"},{label:"合集",value:s.value.length,color:"text-purple-600"},{label:"模板",value:r.value.length,color:"text-green-600"}]),i={buildTimeScripts:"脚本引擎",proxyConversion:"代理转换",ruleConversion:"规则转换",recycleBin:"回收站",nodeInfo:"节点信息",surgeMac:"Surge Mac"};return Vt(async()=>{try{const[l,a,c,u]=await Promise.all([au(),Ro(),uu(),Co()]);t.value=l.data,n.value=a.data||[],s.value=c.data||[],r.value=u.data||[]}catch(l){console.error("Failed to load dashboard",l)}}),(l,a)=>{var c;return L(),U("div",null,[a[7]||(a[7]=d("h2",{class:"text-xl font-bold mb-5"},"概览",-1)),d("div",jm,[(L(!0),U(ve,null,Me(o.value,u=>(L(),U("div",{key:u.label,class:"bg-white rounded-lg p-4 shadow-sm border"},[d("p",Hm,G(u.label),1),d("p",{class:Be(["text-2xl font-bold mt-1",u.color])},G(u.value),3)]))),128))]),d("div",qm,[d("div",Km,[a[5]||(a[5]=d("h3",{class:"font-semibold mb-3"},"环境信息",-1)),t.value?(L(),U("div",Wm,[d("div",Gm,[a[0]||(a[0]=d("span",{class:"text-gray-500"},"应用",-1)),d("span",null,G(t.value.app),1)]),d("div",zm,[a[1]||(a[1]=d("span",{class:"text-gray-500"},"后端",-1)),d("span",null,G(t.value.backend),1)]),d("div",Jm,[a[2]||(a[2]=d("span",{class:"text-gray-500"},"版本",-1)),d("span",null,G(t.value.version),1)]),d("div",Xm,[a[3]||(a[3]=d("span",{class:"text-gray-500"},"运行时",-1)),d("span",null,G(t.value.runtime),1)]),d("div",Qm,[a[4]||(a[4]=d("span",{class:"text-gray-500"},"存储",-1)),d("span",null,G(t.value.storage),1)])])):(L(),U("div",Ym,"加载中..."))]),d("div",Zm,[a[6]||(a[6]=d("h3",{class:"font-semibold mb-3"},"功能特性",-1)),(c=t.value)!=null&&c.feature?(L(),U("div",eg,[(L(!0),U(ve,null,Me(t.value.feature,(u,f)=>(L(),U("span",{key:f,class:Be(["px-2 py-1 rounded text-xs",u?"bg-green-100 text-green-700":"bg-gray-100 text-gray-500"])},G(i[f]||f)+": "+G(u?"✓":"✗"),3))),128))])):he("",!0)])])])}}},ng={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4"},sg={class:"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[85vh] flex flex-col"},rg={class:"flex items-center justify-between px-6 py-3 border-b"},og={class:"text-base font-semibold text-gray-900"},ig={class:"flex-1 overflow-y-auto px-6 py-4"},lg={key:0,class:"px-6 py-3 border-t flex justify-end gap-2"},Ls={__name:"Modal",props:{modelValue:Boolean,title:{type:String,default:""}},emits:["update:modelValue"],setup(e){return(t,n)=>(L(),un(Fl,{to:"body"},[e.modelValue?(L(),U("div",ng,[d("div",{class:"absolute inset-0 bg-black/40",onClick:n[0]||(n[0]=s=>t.$emit("update:modelValue",!1))}),d("div",sg,[d("div",rg,[d("h3",og,G(e.title),1),d("button",{class:"text-gray-400 hover:text-gray-600 text-xl",onClick:n[1]||(n[1]=s=>t.$emit("update:modelValue",!1))},"×")]),d("div",ig,[jo(t.$slots,"default")]),t.$slots.footer?(L(),U("div",lg,[jo(t.$slots,"footer")])):he("",!0)])])):he("",!0)]))}},ag={key:0,class:"fixed inset-0 z-[60] flex items-center justify-center p-4"},ug={class:"relative bg-white rounded-lg shadow-xl w-full max-w-sm p-5"},cg={class:"text-base font-semibold text-gray-900 mb-2"},fg={class:"text-sm text-gray-600 mb-4"},dg={class:"flex justify-end gap-2"},nr={__name:"ConfirmDialog",props:{modelValue:Boolean,title:{type:String,default:"确认"},message:{type:String,default:"确定执行此操作?"},confirmText:{type:String,default:"确定"},danger:{type:Boolean,default:!1}},emits:["update:modelValue","confirm"],setup(e){return(t,n)=>(L(),un(Fl,{to:"body"},[e.modelValue?(L(),U("div",ag,[d("div",{class:"absolute inset-0 bg-black/40",onClick:n[0]||(n[0]=s=>t.$emit("update:modelValue",!1))}),d("div",ug,[d("h3",cg,G(e.title),1),d("p",fg,G(e.message),1),d("div",dg,[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:n[1]||(n[1]=s=>t.$emit("update:modelValue",!1))},"取消"),d("button",{class:Be(["px-4 py-2 text-sm rounded-lg text-white",e.danger?"bg-red-600 hover:bg-red-700":"bg-primary-600 hover:bg-primary-700"]),onClick:n[2]||(n[2]=s=>t.$emit("confirm"))},G(e.confirmText),3)])])])):he("",!0)]))}};async function Us(e){var n;if((n=navigator.clipboard)!=null&&n.writeText){await navigator.clipboard.writeText(e);return}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{if(!document.execCommand("copy"))throw new Error("复制失败")}finally{document.body.removeChild(t)}}const pg={key:0,class:"text-gray-400 text-sm"},hg={key:1,class:"text-gray-400 text-sm py-8 text-center"},mg={key:2,class:"space-y-2"},gg=["onClick"],yg={class:"flex-1 min-w-0"},bg={class:"flex items-center gap-2"},xg={class:"font-medium text-gray-900"},vg={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-red-100 text-red-700"},_g={key:0,class:"text-xs text-gray-500 mt-1"},wg={class:"flex gap-2 mt-1 text-xs text-gray-400"},Eg={key:0},Sg={key:1,class:"text-xs text-gray-500 mt-1 truncate"},Rg={class:"flex gap-1 ml-3"},Cg=["onClick"],Ag=["onClick"],Og=["onClick"],Tg={key:0,class:"text-gray-400 text-sm py-4 text-center"},Pg={key:1},Ng={class:"overflow-x-auto rounded-lg bg-white"},Ig={class:"w-full text-left text-xs"},kg={class:"divide-y divide-gray-100"},Dg={class:"px-3 py-2 text-gray-500"},$g={class:"px-3 py-2 text-blue-600"},Lg={class:"px-3 py-2 font-mono text-gray-500"},Ug={class:"px-3 py-2 font-mono text-gray-500"},Fg={class:"px-3 py-2 text-gray-500"},Mg={class:"px-3 py-2 text-gray-500"},Vg={class:"px-3 py-2 font-mono text-gray-500"},Bg={class:"px-3 py-2 font-mono text-gray-500"},jg={class:"px-3 py-2"},Hg=["onClick"],qg={key:0,class:"text-xs text-gray-400 mt-2"},Kg={class:"space-y-4"},Wg=["disabled"],Gg={class:"flex gap-2"},zg={key:0},Jg={key:1},Xg={class:"flex items-center gap-2"},Qg={class:"mb-2 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-500"},Yg={class:"mt-2"},Zg={class:"mt-2 w-full border-collapse overflow-hidden rounded-lg bg-white text-left"},ey={class:"border border-gray-200 px-2 py-1 text-gray-700"},ty={class:"border border-gray-200 px-2 py-1"},ny=["onUpdate:modelValue"],sy=["value"],ry=["onUpdate:modelValue"],oy=["onUpdate:modelValue"],iy=["onClick"],ly={__name:"Sources",setup(e){const t=Y([]),n=Y(!0),s=Y(!1),r=Y(!1),o=Y(""),i=Y(!1),l=Y(null),a=Ct({}),c=Ct({}),u=Y(null),f=Y({show:!1,title:"",message:"",danger:!1,action:null}),p=["include","exclude","rename","dedupe","sort","delete-field","flag","quick","resolve","custom"],m={include:"包含(include)",exclude:"排除(exclude)",rename:"重命名(rename)",dedupe:"去重(dedupe)",sort:"排序(sort)","delete-field":"删除字段(delete-field)",flag:"旗帜(flag)",quick:"快捷规则(quick)",resolve:"解析域名(resolve)",custom:"自定义(custom)"},A=[{type:"include",label:m.include,help:"只保留 field 匹配 pattern 的节点"},{type:"exclude",label:m.exclude,help:"删除 field 匹配 pattern 的节点"},{type:"rename",label:m.rename,help:"按 pattern 处理名称,简易表单适合清理固定前缀/后缀"},{type:"dedupe",label:m.dedupe,help:"按 field 去重,留空按 name 去重"},{type:"sort",label:m.sort,help:"按名称排序"},{type:"delete-field",label:m["delete-field"],help:"从 field 文本中删除匹配 pattern 的片段"},{type:"flag",label:m.flag,help:"给节点名补充或整理地区旗帜"},{type:"quick",label:m.quick,help:"应用快捷清理规则"},{type:"resolve",label:m.resolve,help:"把 server 域名解析为 IP"},{type:"custom",label:m.custom,help:"高级声明式规则链,适合 API/导入配置使用"}],P=()=>({name:"",type:"remote",url:"",content:"",enabled:!0,filters:[]}),w=Ct(P());function v(D,I="success"){u.value={msg:D,type:I},setTimeout(()=>u.value=null,2500)}function R(D){return D?new Date(D).toLocaleString("zh-CN"):""}function k(D){return D?new Date(D*1e3).toLocaleDateString("zh-CN"):""}function S(D){if(!Number.isFinite(D))return"";const I=["B","KB","MB","GB","TB"];let j=D,pe=0;for(;j>=1024&&pe=10||pe===0?j.toFixed(0):j.toFixed(1)}${I[pe]}`}function x(D,...I){for(const j of I){const pe=D==null?void 0:D[j];if(pe!=null&&pe!=="")return pe}return"-"}function _(D){const I=x(D,"tls","security");return I===!0?"TLS":I===!1?"-":I}function O(D){var ne,C,W;const I=c[D.id];if(!I)return"";const j=[];I.planName&&j.push(`套餐: ${I.planName}`);const pe=Number(((ne=I.usage)==null?void 0:ne.upload)||0)+Number(((C=I.usage)==null?void 0:C.download)||0),ye=Number(I.total||0);return ye>0&&j.push(`流量: ${S(pe)} / ${S(ye)}`),ye>pe&&j.push(`剩余: ${S(ye-pe)}`),I.expires&&j.push(`到期: ${k(I.expires)}`),(W=D.meta)!=null&&W.price&&j.push(`计费: ${D.meta.price}${D.meta.billingCycle?`/${D.meta.billingCycle}`:""}`),j.join(" · ")}function te(D){return{original:(D==null?void 0:D.originalCount)??(Array.isArray(D==null?void 0:D.original)?D.original.length:(D==null?void 0:D.nodes)??0),processed:Array.isArray(D==null?void 0:D.processed)?D.processed.length:0}}function B(D){return{id:D.id,name:D.name,type:D.type,url:D.url,content:D.content,filters:D.filters}}function ee(){Object.assign(w,P()),r.value=!1,s.value=!0}function re(D){Object.assign(w,{name:D.id,type:D.type||"remote",url:D.url||"",content:D.content||"",enabled:D.enabled!==!1,filters:JSON.parse(JSON.stringify(D.filters||[]))}),r.value=!0,s.value=!0}function H(){w.filters.push({type:"include",pattern:"",field:""})}async function ie(){try{const D={name:w.name,type:w.type,url:w.url,content:w.content,enabled:w.enabled,filters:w.filters.filter(I=>I.type)};r.value?await am(w.name,D):await lm(D),s.value=!1,await ue(),v(r.value?"已更新":"已创建")}catch(D){v(D.message,"error")}}async function ce(D){f.value={show:!0,title:"删除订阅源",message:`确定删除 "${D.name}"?`,danger:!0,action:async()=>{try{await um(D.id),await ue(),v("已删除")}catch(I){v(I.message,"error")}}}}async function Ie(D){if(o.value===D.id){o.value="",l.value=null;return}o.value=D.id,i.value=!0,l.value=null;try{const I=await tl(B(D));l.value=I.data,a[D.id]=te(I.data)}catch(I){v(I.message,"error"),o.value=""}finally{i.value=!1}}async function we(D){try{const I=await vm(D.id);await Us(I.data.url),v("链接已复制")}catch(I){v(I.message,"error")}}async function fe(D){try{const I=await Rm(D);await Us(I.data.uri),v("节点链接已复制")}catch(I){v(I.message,"error")}}async function ue(){n.value=!0;try{const D=await Ro();t.value=D.data||[];for(const I of t.value)et(I),De(I)}catch(D){v(D.message,"error")}finally{n.value=!1}}async function et(D){try{const I=await tl(B(D));a[D.id]=te(I.data)}catch{a[D.id]={original:"-",processed:"-"}}}async function De(D){var I;if(!(D.type!=="remote"&&!((I=D.meta)!=null&&I.subUserinfo)))try{const j=await wm(D.id);c[D.id]=j.data}catch{delete c[D.id]}}return Vt(ue),(D,I)=>(L(),U("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[I[11]||(I[11]=d("h2",{class:"text-xl font-bold"},"订阅源",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:ee},"+ 新建")]),n.value?(L(),U("div",pg,"加载中...")):t.value.length===0?(L(),U("div",hg,"暂无订阅源")):(L(),U("div",mg,[(L(!0),U(ve,null,Me(t.value,j=>{var pe,ye,ne;return L(),U("div",{key:j.id,class:"bg-white rounded-lg shadow-sm border overflow-hidden hover:shadow-md transition-shadow"},[d("div",{class:"p-4 flex items-center justify-between cursor-pointer",onClick:C=>Ie(j)},[d("div",yg,[d("div",bg,[d("span",xg,G(j.name),1),d("span",{class:Be(["px-1.5 py-0.5 rounded text-xs",j.type==="remote"?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-600"])},G(j.type),3),j.enabled?he("",!0):(L(),U("span",vg,"已禁用"))]),j.type==="local"?(L(),U("p",_g,"(本地内容)")):he("",!0),d("div",wg,[d("span",null,"原始节点: "+G(((pe=a[j.id])==null?void 0:pe.original)??"-"),1),d("span",null,"处理后: "+G(((ye=a[j.id])==null?void 0:ye.processed)??"-"),1),d("span",null,"过滤器: "+G(((ne=j.filters)==null?void 0:ne.length)||0),1),j.createdAt?(L(),U("span",Eg,"创建: "+G(R(j.createdAt)),1)):he("",!0)]),O(j)?(L(),U("p",Sg,G(O(j)),1)):he("",!0)]),d("div",Rg,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:jn(C=>we(j),["stop"])},"复制链接",8,Cg),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:jn(C=>re(j),["stop"])},"编辑",8,Ag),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:jn(C=>ce(j),["stop"])},"删除",8,Og)])],8,gg),o.value===j.id?(L(),U("div",{key:0,class:"border-t bg-gray-50",onClick:I[0]||(I[0]=jn(()=>{},["stop"]))},[i.value?(L(),U("div",Tg,"解析中...")):l.value?(L(),U("div",Pg,[d("div",Ng,[d("table",Ig,[I[12]||(I[12]=d("thead",{class:"sticky top-0 bg-gray-100 text-gray-600"},[d("tr",null,[d("th",{class:"px-3 py-2 font-medium"},"Type"),d("th",{class:"px-3 py-2 font-medium"},"Name"),d("th",{class:"px-3 py-2 font-medium"},"Server"),d("th",{class:"px-3 py-2 font-medium"},"Port"),d("th",{class:"px-3 py-2 font-medium"},"Transport"),d("th",{class:"px-3 py-2 font-medium"},"Tls"),d("th",{class:"px-3 py-2 font-medium"},"Delay"),d("th",{class:"px-3 py-2 font-medium"},"Speed"),d("th",{class:"px-3 py-2 font-medium"},"Link")])],-1)),d("tbody",kg,[(L(!0),U(ve,null,Me(l.value.processed||l.value.original||[],(C,W)=>(L(),U("tr",{key:W},[d("td",Dg,G(x(C,"type")),1),d("td",$g,G(x(C,"name","remarks")),1),d("td",Lg,G(x(C,"server","address")),1),d("td",Ug,G(x(C,"port")),1),d("td",Fg,G(x(C,"transport","network")),1),d("td",Mg,G(_(C)),1),d("td",Vg,G(x(C,"delay","latency","ping")),1),d("td",Bg,G(x(C,"speed","downloadSpeed")),1),d("td",jg,[d("button",{class:"px-2 py-1 text-xs rounded hover:bg-gray-100 text-blue-600",onClick:q=>fe(C)},"复制",8,Hg)])]))),128))])])]),(l.value.processed||l.value.original||[]).length===0?(L(),U("p",qg,"暂无节点")):he("",!0)])):he("",!0)])):he("",!0)])}),128))])),Ae(Ls,{modelValue:s.value,"onUpdate:modelValue":I[8]||(I[8]=j=>s.value=j),title:r.value?"编辑订阅源":"新建订阅源"},{footer:ft(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:I[7]||(I[7]=j=>s.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:ie},"保存")]),default:ft(()=>[d("div",Kg,[d("div",null,[I[13]||(I[13]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),ae(d("input",{"onUpdate:modelValue":I[1]||(I[1]=j=>w.name=j),disabled:r.value,placeholder:"my-sub",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,Wg),[[Te,w.name]]),I[14]||(I[14]=d("p",{class:"text-xs text-gray-400 mt-0.5"},"仅支持小写字母、数字、下划线、连字符",-1))]),d("div",null,[I[17]||(I[17]=d("label",{class:"block text-sm font-medium mb-1"},"类型",-1)),d("div",Gg,[d("label",{class:Be(["flex-1 flex items-center gap-2 px-3 py-2 border rounded-lg text-sm cursor-pointer",w.type==="remote"?"border-primary-500 bg-primary-50 text-primary-700":"border-gray-200"])},[ae(d("input",{type:"radio","onUpdate:modelValue":I[2]||(I[2]=j=>w.type=j),value:"remote",class:"text-primary-600"},null,512),[[bi,w.type]]),I[15]||(I[15]=d("span",null,"远程 (URL)",-1))],2),d("label",{class:Be(["flex-1 flex items-center gap-2 px-3 py-2 border rounded-lg text-sm cursor-pointer",w.type==="local"?"border-primary-500 bg-primary-50 text-primary-700":"border-gray-200"])},[ae(d("input",{type:"radio","onUpdate:modelValue":I[3]||(I[3]=j=>w.type=j),value:"local",class:"text-primary-600"},null,512),[[bi,w.type]]),I[16]||(I[16]=d("span",null,"本地 (内容)",-1))],2)])]),w.type==="remote"?(L(),U("div",zg,[I[18]||(I[18]=d("label",{class:"block text-sm font-medium mb-1"},"URL",-1)),ae(d("textarea",{"onUpdate:modelValue":I[4]||(I[4]=j=>w.url=j),rows:"3",placeholder:"https://example.com/sub (多个URL换行)",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[Te,w.url]])])):he("",!0),w.type==="local"?(L(),U("div",Jg,[I[19]||(I[19]=d("label",{class:"block text-sm font-medium mb-1"},"内容",-1)),ae(d("textarea",{"onUpdate:modelValue":I[5]||(I[5]=j=>w.content=j),rows:"6",placeholder:"ss://... 或 base64 内容",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[Te,w.content]])])):he("",!0),d("div",Xg,[ae(d("input",{type:"checkbox",id:"src-enabled","onUpdate:modelValue":I[6]||(I[6]=j=>w.enabled=j),class:"rounded"},null,512),[[wn,w.enabled]]),I[20]||(I[20]=d("label",{for:"src-enabled",class:"text-sm"},"启用",-1))]),d("div",null,[d("div",{class:"flex items-center justify-between mb-1"},[I[21]||(I[21]=d("label",{class:"text-sm font-medium"},"过滤器",-1)),d("button",{class:"text-xs text-primary-600 hover:underline",onClick:H},"+ 添加")]),d("details",Qg,[I[24]||(I[24]=d("summary",{class:"cursor-pointer text-gray-700"},"使用说明",-1)),d("div",Yg,[I[23]||(I[23]=d("p",null,"pattern 支持正则;field 留空默认匹配 name。常用字段:name、type、server、port。",-1)),d("table",Zg,[I[22]||(I[22]=d("thead",{class:"bg-gray-100 text-gray-700"},[d("tr",null,[d("th",{class:"border border-gray-200 px-2 py-1 font-medium"},"过滤器"),d("th",{class:"border border-gray-200 px-2 py-1 font-medium"},"说明")])],-1)),d("tbody",null,[(L(),U(ve,null,Me(A,j=>d("tr",{key:j.type},[d("td",ey,G(j.label),1),d("td",ty,G(j.help),1)])),64))])])])]),(L(!0),U(ve,null,Me(w.filters,(j,pe)=>(L(),U("div",{key:pe,class:"flex gap-1 mb-1.5"},[ae(d("select",{"onUpdate:modelValue":ye=>j.type=ye,class:"px-2 py-1 border rounded text-xs w-28"},[(L(),U(ve,null,Me(p,ye=>d("option",{key:ye,value:ye},G(m[ye]||ye),9,sy)),64))],8,ny),[[Sn,j.type]]),ae(d("input",{"onUpdate:modelValue":ye=>j.pattern=ye,placeholder:"pattern",class:"flex-1 px-2 py-1 border rounded text-xs"},null,8,ry),[[Te,j.pattern]]),ae(d("input",{"onUpdate:modelValue":ye=>j.field=ye,placeholder:"field",class:"w-24 px-2 py-1 border rounded text-xs"},null,8,oy),[[Te,j.field]]),d("button",{class:"px-2 py-1 text-xs text-red-500 hover:bg-red-50 rounded",onClick:ye=>w.filters.splice(pe,1)},"×",8,iy)]))),128))])])]),_:1},8,["modelValue","title"]),Ae(nr,{modelValue:f.value.show,"onUpdate:modelValue":I[9]||(I[9]=j=>f.value.show=j),title:f.value.title,message:f.value.message,danger:f.value.danger,onConfirm:I[10]||(I[10]=j=>{f.value.action(),f.value.show=!1})},null,8,["modelValue","title","message","danger"]),u.value?(L(),U("div",{key:3,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",u.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(u.value.msg),3)):he("",!0)]))}},ay={key:0,class:"text-gray-400 text-sm"},uy={key:1,class:"text-gray-400 text-sm py-8 text-center"},cy={key:2,class:"space-y-2"},fy={class:"flex-1 min-w-0"},dy={class:"flex items-center gap-2"},py={class:"font-medium text-gray-900"},hy={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-red-100 text-red-700"},my={class:"flex gap-3 mt-1 text-xs text-gray-400"},gy={key:0},yy={class:"flex gap-1 ml-3"},by=["onClick"],xy=["onClick"],vy=["onClick"],_y={class:"space-y-4"},wy=["disabled"],Ey={class:"max-h-32 overflow-y-auto border rounded-lg p-2 space-y-1"},Sy=["value"],Ry={class:"text-xs text-gray-400"},Cy={key:0,class:"text-xs text-gray-400 py-1"},Ay=["value"],Oy={class:"flex items-center gap-4"},Ty={class:"flex items-center gap-2 text-sm"},Py={class:"flex items-center gap-2 text-sm"},Ny={class:"flex items-center justify-between mb-1"},Iy=["onUpdate:modelValue"],ky=["value"],Dy=["onUpdate:modelValue"],$y=["onClick"],Ly={__name:"Collections",setup(e){const t=Y([]),n=Y([]),s=Y([]),r=Y(!0),o=Y(!1),i=Y(!1),l=Y(null),a=Ct({}),c=Y({show:!1,title:"",message:"",danger:!1,action:null}),u=["include","exclude","rename","dedupe","sort","delete-field","flag","quick","resolve","custom"],f=()=>({name:"",sourceIds:[],filters:[],templateId:"",ignoreFailed:!0,enabled:!0}),p=Ct(f());function m(x,_="success"){l.value={msg:x,type:_},setTimeout(()=>l.value=null,2500)}function A(){Object.assign(p,f()),i.value=!1,o.value=!0}function P(x){Object.assign(p,{name:x.id,sourceIds:[...x.sourceIds||[]],filters:JSON.parse(JSON.stringify(x.filters||[])),templateId:x.templateId||"",ignoreFailed:x.ignoreFailed!==!1,enabled:x.enabled!==!1}),i.value=!0,o.value=!0}async function w(){try{const x={...p};i.value?await fm(p.name,x):await cm(x),o.value=!1,await k(),m(i.value?"已更新":"已创建")}catch(x){m(x.message,"error")}}async function v(x){c.value={show:!0,title:"删除合集",message:`确定删除 "${x.name}"?`,danger:!0,action:async()=>{try{await dm(x.id),await k(),m("已删除")}catch(_){m(_.message,"error")}}}}async function R(x){try{const _=await _m(x.id);await Us(_.data.url),m("链接已复制")}catch(_){m(_.message,"error")}}async function k(){r.value=!0;try{const[x,_,O]=await Promise.all([uu(),Ro(),Co()]);t.value=x.data||[],n.value=_.data||[],s.value=O.data||[];for(const te of t.value)S(te)}catch(x){m(x.message,"error")}finally{r.value=!1}}async function S(x){try{const _=await xm(x);a[x.id]={original:_.data.originalCount??_.data.nodes??0,processed:Array.isArray(_.data.processed)?_.data.processed.length:0}}catch{a[x.id]={original:"-",processed:"-"}}}return Vt(k),(x,_)=>(L(),U("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[_[10]||(_[10]=d("h2",{class:"text-xl font-bold"},"合集",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:A},"+ 新建")]),r.value?(L(),U("div",ay,"加载中...")):t.value.length===0?(L(),U("div",uy,"暂无合集")):(L(),U("div",cy,[(L(!0),U(ve,null,Me(t.value,O=>{var te,B,ee,re;return L(),U("div",{key:O.id,class:"bg-white rounded-lg p-4 shadow-sm border flex items-center justify-between hover:shadow-md transition-shadow"},[d("div",fy,[d("div",dy,[d("span",py,G(O.name),1),O.enabled?he("",!0):(L(),U("span",hy,"已禁用"))]),d("div",my,[d("span",null,"原始节点: "+G(((te=a[O.id])==null?void 0:te.original)??"-"),1),d("span",null,"处理后: "+G(((B=a[O.id])==null?void 0:B.processed)??"-"),1),d("span",null,"订阅源: "+G(((ee=O.sourceIds)==null?void 0:ee.length)||0),1),d("span",null,"过滤器: "+G(((re=O.filters)==null?void 0:re.length)||0),1),d("span",null,"模板: "+G(O.templateId||"default"),1),O.ignoreFailed?(L(),U("span",gy,"忽略失败")):he("",!0)])]),d("div",yy,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:H=>R(O)},"链接",8,by),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:H=>P(O)},"编辑",8,xy),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:H=>v(O)},"删除",8,vy)])])}),128))])),Ae(Ls,{modelValue:o.value,"onUpdate:modelValue":_[7]||(_[7]=O=>o.value=O),title:i.value?"编辑合集":"新建合集"},{footer:ft(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:_[6]||(_[6]=O=>o.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:w},"保存")]),default:ft(()=>[d("div",_y,[d("div",null,[_[11]||(_[11]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),ae(d("input",{"onUpdate:modelValue":_[0]||(_[0]=O=>p.name=O),disabled:i.value,placeholder:"my-collection",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,wy),[[Te,p.name]])]),d("div",null,[_[12]||(_[12]=d("label",{class:"block text-sm font-medium mb-1"},"订阅源 (多选)",-1)),d("div",Ey,[(L(!0),U(ve,null,Me(n.value,O=>(L(),U("label",{key:O.id,class:"flex items-center gap-2 text-sm cursor-pointer hover:bg-gray-50 px-1 py-0.5 rounded"},[ae(d("input",{type:"checkbox",value:O.id,"onUpdate:modelValue":_[1]||(_[1]=te=>p.sourceIds=te),class:"rounded"},null,8,Sy),[[wn,p.sourceIds]]),d("span",null,G(O.name),1),d("span",Ry,"("+G(O.type)+")",1)]))),128)),n.value.length===0?(L(),U("p",Cy,"无可用订阅源")):he("",!0)])]),d("div",null,[_[14]||(_[14]=d("label",{class:"block text-sm font-medium mb-1"},"模板",-1)),ae(d("select",{"onUpdate:modelValue":_[2]||(_[2]=O=>p.templateId=O),class:"w-full px-3 py-2 border rounded-lg text-sm"},[_[13]||(_[13]=d("option",{value:""},"默认",-1)),(L(!0),U(ve,null,Me(s.value,O=>(L(),U("option",{key:O.id,value:O.id},G(O.name)+" ("+G(O.target)+")",9,Ay))),128))],512),[[Sn,p.templateId]])]),d("div",Oy,[d("label",Ty,[ae(d("input",{type:"checkbox","onUpdate:modelValue":_[3]||(_[3]=O=>p.enabled=O),class:"rounded"},null,512),[[wn,p.enabled]]),_[15]||(_[15]=ts(" 启用 ",-1))]),d("label",Py,[ae(d("input",{type:"checkbox","onUpdate:modelValue":_[4]||(_[4]=O=>p.ignoreFailed=O),class:"rounded"},null,512),[[wn,p.ignoreFailed]]),_[16]||(_[16]=ts(" 忽略失败源 ",-1))])]),d("div",null,[d("div",Ny,[_[17]||(_[17]=d("label",{class:"text-sm font-medium"},"过滤器",-1)),d("button",{class:"text-xs text-primary-600 hover:underline",onClick:_[5]||(_[5]=O=>p.filters.push({type:"include",pattern:""}))},"+ 添加")]),(L(!0),U(ve,null,Me(p.filters,(O,te)=>(L(),U("div",{key:te,class:"flex gap-1 mb-1.5"},[ae(d("select",{"onUpdate:modelValue":B=>O.type=B,class:"px-2 py-1 border rounded text-xs w-28"},[(L(),U(ve,null,Me(u,B=>d("option",{key:B,value:B},G(B),9,ky)),64))],8,Iy),[[Sn,O.type]]),ae(d("input",{"onUpdate:modelValue":B=>O.pattern=B,placeholder:"pattern",class:"flex-1 px-2 py-1 border rounded text-xs"},null,8,Dy),[[Te,O.pattern]]),d("button",{class:"px-2 py-1 text-xs text-red-500 hover:bg-red-50 rounded",onClick:B=>p.filters.splice(te,1)},"×",8,$y)]))),128))])])]),_:1},8,["modelValue","title"]),Ae(nr,{modelValue:c.value.show,"onUpdate:modelValue":_[8]||(_[8]=O=>c.value.show=O),title:c.value.title,message:c.value.message,danger:c.value.danger,onConfirm:_[9]||(_[9]=O=>{c.value.action(),c.value.show=!1})},null,8,["modelValue","title","message","danger"]),l.value?(L(),U("div",{key:3,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",l.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(l.value.msg),3)):he("",!0)]))}},Uy={key:0,class:"text-gray-400 text-sm"},Fy={key:1,class:"text-gray-400 text-sm py-8 text-center"},My={key:2,class:"space-y-2"},Vy={class:"flex-1 min-w-0"},By={class:"flex items-center gap-2"},jy={class:"font-medium text-gray-900"},Hy={class:"px-1.5 py-0.5 rounded text-xs bg-purple-100 text-purple-700"},qy={key:0,class:"px-1.5 py-0.5 rounded text-xs bg-gray-100 text-gray-500"},Ky={class:"text-xs text-gray-500 mt-1"},Wy={key:0,class:"flex gap-1 ml-3"},Gy=["onClick"],zy=["onClick"],Jy={key:1,class:"flex gap-1 ml-3"},Xy=["onClick"],Qy={class:"space-y-4"},Yy=["disabled"],Zy=["value"],eb={key:0,class:"text-xs text-red-500 mt-1"},tb={class:"text-xs font-mono bg-gray-50 p-3 rounded max-h-96 overflow-auto"},nb={__name:"Templates",setup(e){const t=Y([]),n=Y(!0),s=Y(!1),r=Y(!1),o=Y(!1),i=Y(null),l=Y(null),a=Y({show:!1,title:"",message:"",danger:!1,action:null}),c=["mihomo","stash","surge","surge-mac","surfboard","loon","egern","shadowrocket","qx","sing-box","v2ray","uri","json"],u=()=>({name:"",target:"mihomo",configStr:"{}"}),f=Ct(u()),p=tt(()=>{try{return JSON.parse(f.configStr),""}catch{return"JSON 格式错误"}});function m(S,x="success"){l.value={msg:S,type:x},setTimeout(()=>l.value=null,2500)}function A(){Object.assign(f,u()),r.value=!1,s.value=!0}function P(S){Object.assign(f,{name:S.id,target:S.target,configStr:JSON.stringify(S.config||{},null,2)}),r.value=!0,s.value=!0}function w(S){i.value=S.config,o.value=!0}async function v(){if(p.value){m(p.value,"error");return}try{const S={name:f.name,target:f.target,config:JSON.parse(f.configStr)};r.value?await hm(f.name,S):await pm(S),s.value=!1,await k(),m(r.value?"已更新":"已创建")}catch(S){m(S.message,"error")}}async function R(S){a.value={show:!0,title:"删除模板",message:`确定删除 "${S.name}"?`,danger:!0,action:async()=>{try{await mm(S.id),await k(),m("已删除")}catch(x){m(x.message,"error")}}}}async function k(){n.value=!0;try{const S=await Co();t.value=S.data||[]}catch(S){m(S.message,"error")}finally{n.value=!1}}return Vt(k),(S,x)=>(L(),U("div",null,[d("div",{class:"flex items-center justify-between mb-5"},[x[8]||(x[8]=d("h2",{class:"text-xl font-bold"},"模板",-1)),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:A},"+ 新建")]),n.value?(L(),U("div",Uy,"加载中...")):t.value.length===0?(L(),U("div",Fy,"暂无模板")):(L(),U("div",My,[(L(!0),U(ve,null,Me(t.value,_=>(L(),U("div",{key:_.id,class:"bg-white rounded-lg p-4 shadow-sm border flex items-center justify-between hover:shadow-md transition-shadow"},[d("div",Vy,[d("div",By,[d("span",jy,G(_.name),1),d("span",Hy,G(_.target),1),_.readonly?(L(),U("span",qy,"内置")):he("",!0)]),d("p",Ky,G(Object.keys(_.config||{}).length)+" 个配置项",1)]),_.readonly?(L(),U("div",Jy,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-gray-100",onClick:O=>w(_)},"查看",8,Xy)])):(L(),U("div",Wy,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:O=>P(_)},"编辑",8,Gy),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:O=>R(_)},"删除",8,zy)]))]))),128))])),Ae(Ls,{modelValue:s.value,"onUpdate:modelValue":x[4]||(x[4]=_=>s.value=_),title:r.value?"编辑模板":"新建模板"},{footer:ft(()=>[d("button",{class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:x[3]||(x[3]=_=>s.value=!1)},"取消"),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:v},"保存")]),default:ft(()=>[d("div",Qy,[d("div",null,[x[9]||(x[9]=d("label",{class:"block text-sm font-medium mb-1"},"名称 / ID",-1)),ae(d("input",{"onUpdate:modelValue":x[0]||(x[0]=_=>f.name=_),disabled:r.value,placeholder:"my-template",class:"w-full px-3 py-2 border rounded-lg text-sm disabled:bg-gray-100"},null,8,Yy),[[Te,f.name]])]),d("div",null,[x[10]||(x[10]=d("label",{class:"block text-sm font-medium mb-1"},"目标平台",-1)),ae(d("select",{"onUpdate:modelValue":x[1]||(x[1]=_=>f.target=_),class:"w-full px-3 py-2 border rounded-lg text-sm"},[(L(),U(ve,null,Me(c,_=>d("option",{key:_,value:_},G(_),9,Zy)),64))],512),[[Sn,f.target]])]),d("div",null,[x[11]||(x[11]=d("label",{class:"block text-sm font-medium mb-1"},"配置 (JSON)",-1)),ae(d("textarea",{"onUpdate:modelValue":x[2]||(x[2]=_=>f.configStr=_),rows:"12",placeholder:'{"proxy-groups": [], "rules": []}',class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[Te,f.configStr]]),p.value?(L(),U("p",eb,G(p.value),1)):he("",!0)])])]),_:1},8,["modelValue","title"]),Ae(Ls,{modelValue:o.value,"onUpdate:modelValue":x[5]||(x[5]=_=>o.value=_),title:"查看模板配置"},{default:ft(()=>[d("pre",tb,G(JSON.stringify(i.value,null,2)),1)]),_:1},8,["modelValue"]),Ae(nr,{modelValue:a.value.show,"onUpdate:modelValue":x[6]||(x[6]=_=>a.value.show=_),title:a.value.title,message:a.value.message,danger:a.value.danger,onConfirm:x[7]||(x[7]=_=>{a.value.action(),a.value.show=!1})},null,8,["modelValue","title","message","danger"]),l.value?(L(),U("div",{key:3,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",l.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(l.value.msg),3)):he("",!0)]))}},sb={key:0,class:"text-gray-400 text-sm"},rb={key:1,class:"text-gray-400 text-sm py-8 text-center"},ob={key:2,class:"space-y-2"},ib={class:"flex-1 min-w-0"},lb={class:"flex items-center gap-2"},ab={class:"font-medium text-gray-900"},ub={class:"text-xs text-gray-400 mt-1"},cb={class:"flex gap-1 ml-3"},fb=["onClick"],db=["onClick"],pb={__name:"RecycleBin",setup(e){const t=Y([]),n=Y(!0),s=Y(null),r=Y({show:!1,title:"",message:"",danger:!1,confirmText:"确定",action:null});function o(f,p="success"){s.value={msg:f,type:p},setTimeout(()=>s.value=null,2500)}function i(f){return f?new Date(f).toLocaleString("zh-CN"):""}function l(f){return{source:"bg-blue-100 text-blue-700",collection:"bg-purple-100 text-purple-700",template:"bg-green-100 text-green-700"}[f]||"bg-gray-100 text-gray-600"}async function a(f){r.value={show:!0,title:"恢复",message:`恢复 "${f.resourceId}"?`,danger:!1,confirmText:"恢复",action:async()=>{try{await bm(f.id),await u(),o("已恢复")}catch(p){o(p.message,"error")}}}}async function c(f){r.value={show:!0,title:"彻底删除",message:`彻底删除 "${f.resourceId}"?此操作不可撤销!`,danger:!0,confirmText:"彻底删除",action:async()=>{try{await ym(f.id),await u(),o("已彻底删除")}catch(p){o(p.message,"error")}}}}async function u(){n.value=!0;try{const f=await gm();t.value=f.data||[]}catch(f){o(f.message,"error")}finally{n.value=!1}}return Vt(u),(f,p)=>(L(),U("div",null,[p[2]||(p[2]=d("h2",{class:"text-xl font-bold mb-5"},"回收站",-1)),n.value?(L(),U("div",sb,"加载中...")):t.value.length===0?(L(),U("div",rb,"回收站为空")):(L(),U("div",ob,[(L(!0),U(ve,null,Me(t.value,m=>(L(),U("div",{key:m.id,class:"bg-white rounded-lg p-4 shadow-sm border flex items-center justify-between"},[d("div",ib,[d("div",lb,[d("span",{class:Be(["px-1.5 py-0.5 rounded text-xs",l(m.resourceType)])},G(m.resourceType),3),d("span",ab,G(m.resourceId),1)]),d("p",ub,"删除于: "+G(i(m.deletedAt)),1)]),d("div",cb,[d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-blue-50 text-blue-600",onClick:A=>a(m)},"恢复",8,fb),d("button",{class:"px-2.5 py-1 text-xs rounded hover:bg-red-50 text-red-600",onClick:A=>c(m)},"彻底删除",8,db)])]))),128))])),Ae(nr,{modelValue:r.value.show,"onUpdate:modelValue":p[0]||(p[0]=m=>r.value.show=m),title:r.value.title,message:r.value.message,danger:r.value.danger,confirmText:r.value.confirmText,onConfirm:p[1]||(p[1]=m=>{r.value.action(),r.value.show=!1})},null,8,["modelValue","title","message","danger","confirmText"]),s.value?(L(),U("div",{key:3,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",s.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(s.value.msg),3)):he("",!0)]))}},hb={class:"bg-white rounded-lg p-4 shadow-sm border mb-4"},mb={class:"flex gap-2 mb-3"},gb=["value"],yb={class:"flex gap-2 mb-2"},bb=["disabled"],xb={key:0,class:"text-xs text-gray-500 mb-2"},vb={class:"bg-white rounded-lg p-4 shadow-sm border mb-4"},_b={class:"flex gap-2 mb-3"},wb=["disabled"],Eb={key:0,class:"bg-gray-50 rounded-lg p-3 text-sm space-y-1"},Sb={class:"flex justify-between"},Rb={class:"flex justify-between"},Cb={class:"flex justify-between"},Ab={class:"flex justify-between"},Ob={key:0,class:"flex justify-between"},Tb={class:"bg-white rounded-lg p-4 shadow-sm border"},Pb={class:"flex gap-2"},Nb={class:"px-4 py-2 bg-gray-600 text-white rounded-lg text-sm hover:bg-gray-700 cursor-pointer"},Ib={__name:"Tools",setup(e){const t=["mihomo","stash","surge","surge-mac","surfboard","loon","egern","shadowrocket","qx","sing-box","v2ray","uri","json"],n=["mihomo","surge","loon","qx"],s=Y("proxy"),r=Y("mihomo"),o=Y(""),i=Y(""),l=Y(""),a=Y(!1),c=Y(""),u=Y(null),f=Y(!1),p=Y(null),m=tt(()=>s.value==="proxy"?t:n);function A(S,x="success"){p.value={msg:S,type:x},setTimeout(()=>p.value=null,2500)}async function P(S){try{await Us(S),A("已复制")}catch(x){A(x.message,"error")}}async function w(){var S;if(!o.value.trim()){A("请输入内容","error");return}a.value=!0,i.value="",l.value="";try{const _=await(s.value==="proxy"?Em:Sm)({content:o.value,target:r.value});i.value=_.data.content||_.data.par_res||"",l.value=`解析: ${_.data.parsed||0} · 输出: ${_.data.emitted||0} · 跳过: ${_.data.skipped||0}`,(S=_.data.warnings)!=null&&S.length&&(l.value+=" · ⚠ "+_.data.warnings.join("; ")),A("转换成功")}catch(x){A(x.message,"error")}finally{a.value=!1}}async function v(){f.value=!0,u.value=null;try{const S=await Cm(c.value);u.value=S.data}catch(S){A(S.message,"error")}finally{f.value=!1}}async function R(){try{const S=await om(),x=new Blob([JSON.stringify(S,null,2)],{type:"application/json"}),_=URL.createObjectURL(x),O=document.createElement("a");O.href=_,O.download=`sub-store-backup-${Date.now()}.json`,O.click(),URL.revokeObjectURL(_),A("已导出")}catch(S){A(S.message,"error")}}async function k(S){var _;const x=(_=S.target.files)==null?void 0:_[0];if(x){try{const O=await x.text(),te=JSON.parse(O);await im(te),A("导入成功")}catch(O){A(O.message,"error")}S.target.value=""}}return(S,x)=>{var _;return L(),U("div",null,[x[16]||(x[16]=d("h2",{class:"text-xl font-bold mb-5"},"工具",-1)),d("div",hb,[x[7]||(x[7]=d("h3",{class:"font-semibold mb-3"},"转换器",-1)),d("div",mb,[ae(d("select",{"onUpdate:modelValue":x[0]||(x[0]=O=>s.value=O),class:"px-3 py-2 border rounded-lg text-sm"},[...x[6]||(x[6]=[d("option",{value:"proxy"},"代理转换",-1),d("option",{value:"rule"},"规则转换",-1)])],512),[[Sn,s.value]]),ae(d("select",{"onUpdate:modelValue":x[1]||(x[1]=O=>r.value=O),class:"px-3 py-2 border rounded-lg text-sm"},[(L(!0),U(ve,null,Me(m.value,O=>(L(),U("option",{key:O,value:O},G(O),9,gb))),128))],512),[[Sn,r.value]])]),ae(d("textarea",{"onUpdate:modelValue":x[2]||(x[2]=O=>o.value=O),rows:"5",placeholder:"粘贴订阅内容或规则...",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono mb-2"},null,512),[[Te,o.value]]),d("div",yb,[d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",disabled:a.value,onClick:w},G(a.value?"转换中...":"转换"),9,bb),i.value?(L(),U("button",{key:0,class:"px-4 py-2 text-sm rounded-lg hover:bg-gray-100",onClick:x[3]||(x[3]=O=>P(i.value))},"复制结果")):he("",!0)]),l.value?(L(),U("p",xb,G(l.value),1)):he("",!0),i.value?ae((L(),U("textarea",{key:1,"onUpdate:modelValue":x[4]||(x[4]=O=>i.value=O),rows:"8",readonly:"",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono bg-gray-50"},null,512)),[[Te,i.value]]):he("",!0)]),d("div",vb,[x[13]||(x[13]=d("h3",{class:"font-semibold mb-3"},"节点信息查询",-1)),d("div",_b,[ae(d("input",{"onUpdate:modelValue":x[5]||(x[5]=O=>c.value=O),placeholder:"服务器地址 / IP",class:"flex-1 px-3 py-2 border rounded-lg text-sm",onKeyup:Lf(v,["enter"])},null,544),[[Te,c.value]]),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",disabled:!c.value||f.value,onClick:v},G(f.value?"查询中...":"查询"),9,wb)]),u.value?(L(),U("div",Eb,[d("div",Sb,[x[8]||(x[8]=d("span",{class:"text-gray-500"},"IP",-1)),d("span",null,G(u.value.ip),1)]),d("div",Rb,[x[9]||(x[9]=d("span",{class:"text-gray-500"},"国家",-1)),d("span",null,G(u.value.country),1)]),d("div",Cb,[x[10]||(x[10]=d("span",{class:"text-gray-500"},"地区",-1)),d("span",null,G(u.value.region),1)]),d("div",Ab,[x[11]||(x[11]=d("span",{class:"text-gray-500"},"城市",-1)),d("span",null,G(u.value.city),1)]),u.value.connection?(L(),U("div",Ob,[x[12]||(x[12]=d("span",{class:"text-gray-500"},"ISP",-1)),d("span",null,G(((_=u.value.connection)==null?void 0:_.isp)||"-"),1)])):he("",!0)])):he("",!0)]),d("div",Tb,[x[15]||(x[15]=d("h3",{class:"font-semibold mb-3"},"数据备份",-1)),d("div",Pb,[d("button",{class:"px-4 py-2 bg-green-600 text-white rounded-lg text-sm hover:bg-green-700",onClick:R},"导出全部"),d("label",Nb,[x[14]||(x[14]=ts(" 导入备份 ",-1)),d("input",{type:"file",accept:".json",class:"hidden",onChange:k},null,32)])])]),p.value?(L(),U("div",{key:0,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",p.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(p.value.msg),3)):he("",!0)])}}},kb={key:0,class:"text-gray-400 text-sm"},Db={key:1,class:"space-y-4"},$b={class:"bg-white rounded-lg p-4 shadow-sm border"},Lb={class:"space-y-3"},Ub={class:"flex items-center gap-2"},Fb={class:"bg-white rounded-lg p-4 shadow-sm border"},Mb={class:"bg-white rounded-lg p-4 shadow-sm border"},Vb={class:"flex items-center gap-2 mb-2"},Bb={class:"grid grid-cols-2 gap-2"},jb={class:"bg-white rounded-lg p-4 shadow-sm border"},Hb={__name:"Settings",setup(e){const t=Y(null),n=Y(!0),s=Y(null);function r(i,l="success"){s.value={msg:i,type:l},setTimeout(()=>s.value=null,2500)}async function o(){try{await rm(t.value),r("设置已保存")}catch(i){r(i.message,"error")}}return Vt(async()=>{try{const i=await sm();t.value=i.data}catch(i){r(i.message,"error")}finally{n.value=!1}}),(i,l)=>(L(),U("div",null,[l[26]||(l[26]=d("h2",{class:"text-xl font-bold mb-5"},"设置",-1)),n.value?(L(),U("div",kb,"加载中...")):(L(),U("div",Db,[d("div",$b,[l[17]||(l[17]=d("h3",{class:"font-semibold mb-3 text-sm"},"通用",-1)),d("div",Lb,[d("div",null,[l[11]||(l[11]=d("label",{class:"block text-sm mb-1"},"默认 User-Agent",-1)),ae(d("input",{"onUpdate:modelValue":l[0]||(l[0]=a=>t.value.defaultUserAgent=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.defaultUserAgent]])]),d("div",null,[l[12]||(l[12]=d("label",{class:"block text-sm mb-1"},"默认流量查询 User-Agent",-1)),ae(d("input",{"onUpdate:modelValue":l[1]||(l[1]=a=>t.value.defaultFlowUserAgent=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.defaultFlowUserAgent]])]),d("div",null,[l[13]||(l[13]=d("label",{class:"block text-sm mb-1"},"请求超时 (ms)",-1)),ae(d("input",{"onUpdate:modelValue":l[2]||(l[2]=a=>t.value.defaultTimeout=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.defaultTimeout]])]),d("div",null,[l[14]||(l[14]=d("label",{class:"block text-sm mb-1"},"后端并发数",-1)),ae(d("input",{"onUpdate:modelValue":l[3]||(l[3]=a=>t.value.backendRequestConcurrency=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.backendRequestConcurrency]])]),d("div",null,[l[15]||(l[15]=d("label",{class:"block text-sm mb-1"},"远程缓存 TTL (秒)",-1)),ae(d("input",{"onUpdate:modelValue":l[4]||(l[4]=a=>t.value.remoteCacheTtl=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.remoteCacheTtl]])]),d("div",Ub,[ae(d("input",{type:"checkbox",id:"cache-stale","onUpdate:modelValue":l[5]||(l[5]=a=>t.value.remoteCacheStaleOnError=a),class:"rounded"},null,512),[[wn,t.value.remoteCacheStaleOnError]]),l[16]||(l[16]=d("label",{for:"cache-stale",class:"text-sm"},"缓存过期时仍返回旧数据",-1))])])]),d("div",Fb,[l[18]||(l[18]=d("h3",{class:"font-semibold mb-3 text-sm"},"节点信息 API",-1)),ae(d("input",{"onUpdate:modelValue":l[6]||(l[6]=a=>t.value.nodeInfoApiUrl=a),placeholder:"https://ipwho.is/{ip}",class:"w-full px-3 py-2 border rounded-lg text-sm font-mono"},null,512),[[Te,t.value.nodeInfoApiUrl]]),l[19]||(l[19]=d("p",{class:"text-xs text-gray-400 mt-1"},"URL 中 {ip} 会被替换为查询的 IP",-1))]),d("div",Mb,[l[23]||(l[23]=d("h3",{class:"font-semibold mb-3 text-sm"},"主题",-1)),d("div",Vb,[ae(d("input",{type:"checkbox",id:"theme-auto","onUpdate:modelValue":l[7]||(l[7]=a=>t.value.theme.auto=a),class:"rounded"},null,512),[[wn,t.value.theme.auto]]),l[20]||(l[20]=d("label",{for:"theme-auto",class:"text-sm"},"自动跟随系统",-1))]),d("div",Bb,[d("div",null,[l[21]||(l[21]=d("label",{class:"text-xs text-gray-500"},"亮色主题",-1)),ae(d("input",{"onUpdate:modelValue":l[8]||(l[8]=a=>t.value.theme.light=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.theme.light]])]),d("div",null,[l[22]||(l[22]=d("label",{class:"text-xs text-gray-500"},"暗色主题",-1)),ae(d("input",{"onUpdate:modelValue":l[9]||(l[9]=a=>t.value.theme.dark=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.theme.dark]])])])]),d("div",jb,[l[25]||(l[25]=d("h3",{class:"font-semibold mb-3 text-sm"},"应用",-1)),d("div",null,[l[24]||(l[24]=d("label",{class:"block text-sm mb-1"},"应用名称",-1)),ae(d("input",{"onUpdate:modelValue":l[10]||(l[10]=a=>t.value.appName=a),class:"w-full px-3 py-2 border rounded-lg text-sm"},null,512),[[Te,t.value.appName]])])]),d("button",{class:"px-4 py-2 bg-primary-600 text-white rounded-lg text-sm hover:bg-primary-700",onClick:o},"保存设置")])),s.value?(L(),U("div",{key:2,class:Be(["fixed bottom-4 right-4 px-4 py-2 rounded-lg shadow-lg text-sm z-50",s.value.type==="error"?"bg-red-500 text-white":"bg-green-500 text-white"])},G(s.value.msg),3)):he("",!0)]))}},qb=[{path:"/login",name:"login",component:Mm,meta:{title:"登录"}},{path:"/",component:$m,children:[{path:"",name:"dashboard",component:tg,meta:{title:"概览"}},{path:"sources",name:"sources",component:ly,meta:{title:"订阅源"}},{path:"collections",name:"collections",component:Ly,meta:{title:"合集"}},{path:"templates",name:"templates",component:nb,meta:{title:"模板"}},{path:"recycle-bin",name:"recycle-bin",component:pb,meta:{title:"回收站"}},{path:"tools",name:"tools",component:Ib,meta:{title:"工具"}},{path:"settings",name:"settings",component:Hb,meta:{title:"设置"}}]},{path:"/:pathMatch(.*)*",name:"not-found",component:Bm}],cu=Xd({history:Od(),routes:qb});cu.beforeEach((e,t,n)=>{if(e.name==="login"||e.name==="not-found")return n();const s=yo(),r=La(),o=ep();if(!s||!r||!o)return n({name:"login",query:{redirect:e.fullPath}});n()});const Ao=Mf(qf);Ao.use(Hf());Ao.use(cu);Ao.mount("#app"); diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 10c12f9..2534ffb 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -5,8 +5,8 @@ Sub-Store - - + +
diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 6c921a9..1842fd7 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -86,5 +86,6 @@ export const parseProxy = (data) => api.post('/proxy/parse', data) export const parseRule = (data) => api.post('/rule/parse', data) export const exportProxyUri = (node) => api.post('/utils/proxy-uri', node) export const getNodeInfo = (server) => api.post('/utils/node-info', { server }) +export const getEgressInfo = (node) => api.post('/utils/egress-info', node) export default api diff --git a/frontend/src/layouts/AdminLayout.vue b/frontend/src/layouts/AdminLayout.vue index 125fd76..3ff132e 100644 --- a/frontend/src/layouts/AdminLayout.vue +++ b/frontend/src/layouts/AdminLayout.vue @@ -5,9 +5,8 @@

- Sub-Store + SubStore

-

{{ env.backend }} · {{ env.version }}

-
-

SQLite · Go

-
@@ -38,10 +34,6 @@ diff --git a/frontend/src/pages/Collections.vue b/frontend/src/pages/Collections.vue index 2199548..7395370 100644 --- a/frontend/src/pages/Collections.vue +++ b/frontend/src/pages/Collections.vue @@ -9,25 +9,75 @@
暂无合集
-
-
- {{ col.name }} - 已禁用 + class="bg-white rounded-lg shadow-sm border overflow-hidden hover:shadow-md transition-shadow"> +
+
+
+ {{ col.name }} + 已禁用 +
+
+ 原始节点: {{ nodeCounts[col.id]?.original ?? '-' }} + 处理后: {{ nodeCounts[col.id]?.processed ?? '-' }} + 订阅源: {{ col.sourceIds?.length || 0 }} + 过滤器: {{ col.filters?.length || 0 }} + 模板: {{ col.templateId || 'default' }} + 忽略失败 +
-
- 原始节点: {{ nodeCounts[col.id]?.original ?? '-' }} - 处理后: {{ nodeCounts[col.id]?.processed ?? '-' }} - 订阅源: {{ col.sourceIds?.length || 0 }} - 过滤器: {{ col.filters?.length || 0 }} - 模板: {{ col.templateId || 'default' }} - 忽略失败 +
+ + + +
-
- - - +
+
解析中...
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameServerPortTransportTlsDelaySpeedEgress IPCountryRegionLink
{{ nodeField(node, 'type') }}{{ nodeField(node, 'name', 'remarks') }}{{ nodeField(node, 'server', 'address') }}{{ nodeField(node, 'port') }}{{ formatTransport(node) }}{{ formatTls(node) }}{{ nodeField(node, 'latencyMs', 'delay', 'latency', 'ping') }}{{ nodeField(node, 'speed', 'downloadSpeed') }}{{ nodeField(node, 'egressIp') }}{{ nodeField(node, 'egressCountry', 'country') }}{{ nodeField(node, 'egressRegion', 'region') }} + +
+
+

暂无节点

+
@@ -99,7 +149,7 @@ import { ref, reactive, onMounted } from 'vue' import Modal from '@/components/Modal.vue' import ConfirmDialog from '@/components/ConfirmDialog.vue' -import { listCollections, createCollection, updateCollection, deleteCollection, listSources, listTemplates, getLinkCollection, previewCollection } from '@/api' +import { listCollections, createCollection, updateCollection, deleteCollection, listSources, listTemplates, getLinkCollection, previewCollection, exportProxyUri, getEgressInfo } from '@/api' import { copyText } from '@/utils/clipboard' const collections = ref([]) @@ -108,6 +158,11 @@ const allTemplates = ref([]) const loading = ref(true) const showModal = ref(false) const editing = ref(false) +const expandedCollectionId = ref('') +const expandedLoading = ref(false) +const expandedData = ref(null) +const egressLoadingId = ref('') +const egressProgress = ref('') const toast = ref(null) const nodeCounts = reactive({}) const confirmDialog = ref({ show: false, title: '', message: '', danger: false, action: null }) @@ -124,6 +179,37 @@ function showToast(msg, type = 'success') { setTimeout(() => toast.value = null, 2500) } +function nodeField(node, ...keys) { + for (const key of keys) { + const value = node?.[key] + if (value !== undefined && value !== null && value !== '') return value + } + return '-' +} + +function formatTls(node) { + if (node?.['reality-opts'] || node?.security === 'reality') return 'reality' + const value = nodeField(node, 'tls', 'security') + if (value === true) return 'TLS' + if (value === false) return '-' + if (value === 'none') return '-' + return value +} + +function formatTransport(node) { + const transport = node?.transport + if (typeof transport === 'string') return transport + if (transport?.type) return transport.type + return nodeField(node, 'network', 'net') +} + +function countsFromPreview(data) { + return { + original: data?.originalCount ?? (Array.isArray(data?.original) ? data.original.length : (data?.nodes ?? 0)), + processed: Array.isArray(data?.processed) ? data.processed.length : 0, + } +} + function openCreate() { Object.assign(form, emptyForm()) editing.value = false @@ -184,6 +270,70 @@ async function copyLink(col) { } } +async function toggleExpand(col) { + if (expandedCollectionId.value === col.id) { + expandedCollectionId.value = '' + expandedData.value = null + return + } + + expandedCollectionId.value = col.id + expandedLoading.value = true + expandedData.value = null + try { + const res = await previewCollection(col) + expandedData.value = res.data + nodeCounts[col.id] = countsFromPreview(res.data) + } catch (e) { + showToast(e.message, 'error') + expandedCollectionId.value = '' + } finally { + expandedLoading.value = false + } +} + +async function copyNodeLink(node) { + try { + const res = await exportProxyUri(node) + await copyText(res.data.uri) + showToast('节点链接已复制') + } catch (e) { + showToast(e.message, 'error') + } +} + +async function probeCollectionEgress(col) { + if (egressLoadingId.value) return + egressLoadingId.value = col.id + egressProgress.value = '' + try { + const preview = await previewCollection(col) + const nodes = preview.data?.processed || preview.data?.original || [] + nodeCounts[col.id] = countsFromPreview(preview.data) + if (expandedCollectionId.value === col.id) { + expandedData.value = preview.data + } + for (let i = 0; i < nodes.length; i += 1) { + egressProgress.value = `${i + 1}/${nodes.length}` + try { + const res = await getEgressInfo(nodes[i]) + Object.assign(nodes[i], { + egressIp: res.data.egressIp, + egressCountry: res.data.country, + egressRegion: res.data.region, + latencyMs: res.data.latencyMs, + }) + } catch { + Object.assign(nodes[i], { egressIp: '-', egressCountry: '-', egressRegion: '-' }) + } + } + showToast('出口探测完成') + } finally { + egressLoadingId.value = '' + egressProgress.value = '' + } +} + async function load() { loading.value = true try { @@ -202,10 +352,7 @@ async function load() { async function loadNodeCount(col) { try { const res = await previewCollection(col) - nodeCounts[col.id] = { - original: res.data.originalCount ?? res.data.nodes ?? 0, - processed: Array.isArray(res.data.processed) ? res.data.processed.length : 0, - } + nodeCounts[col.id] = countsFromPreview(res.data) } catch { nodeCounts[col.id] = { original: '-', processed: '-' } } diff --git a/frontend/src/pages/Settings.vue b/frontend/src/pages/Settings.vue index 553951b..638d2fa 100644 --- a/frontend/src/pages/Settings.vue +++ b/frontend/src/pages/Settings.vue @@ -43,34 +43,6 @@

URL 中 {ip} 会被替换为查询的 IP

- -
-

主题

-
- - -
-
-
- - -
-
- - -
-
-
- - -
-

应用

-
- - -
-
-
diff --git a/frontend/src/pages/Sources.vue b/frontend/src/pages/Sources.vue index 3246a5c..b842adf 100644 --- a/frontend/src/pages/Sources.vue +++ b/frontend/src/pages/Sources.vue @@ -28,6 +28,10 @@

{{ flowSummary(src) }}

+ @@ -48,6 +52,9 @@ Tls Delay Speed + Egress IP + Country + Region Link @@ -57,12 +64,15 @@ {{ nodeField(node, 'name', 'remarks') }} {{ nodeField(node, 'server', 'address') }} {{ nodeField(node, 'port') }} - {{ nodeField(node, 'transport', 'network') }} + {{ formatTransport(node) }} {{ formatTls(node) }} - {{ nodeField(node, 'delay', 'latency', 'ping') }} + {{ nodeField(node, 'latencyMs', 'delay', 'latency', 'ping') }} {{ nodeField(node, 'speed', 'downloadSpeed') }} + {{ nodeField(node, 'egressIp') }} + {{ nodeField(node, 'egressCountry', 'country') }} + {{ nodeField(node, 'egressRegion', 'region') }} - + @@ -171,7 +181,7 @@ import { ref, reactive, onMounted } from 'vue' import Modal from '@/components/Modal.vue' import ConfirmDialog from '@/components/ConfirmDialog.vue' -import { listSources, createSource, updateSource, deleteSource, previewSource, getLinkSource, getFlowInfo, exportProxyUri } from '@/api' +import { listSources, createSource, updateSource, deleteSource, previewSource, getLinkSource, getFlowInfo, exportProxyUri, getEgressInfo } from '@/api' import { copyText } from '@/utils/clipboard' const sources = ref([]) @@ -181,6 +191,8 @@ const editing = ref(false) const expandedSourceId = ref('') const expandedLoading = ref(false) const expandedData = ref(null) +const egressLoadingId = ref('') +const egressProgress = ref('') const nodeCounts = reactive({}) const flowInfos = reactive({}) const toast = ref(null) @@ -253,12 +265,21 @@ function nodeField(node, ...keys) { } function formatTls(node) { + if (node?.['reality-opts'] || node?.security === 'reality') return 'reality' const value = nodeField(node, 'tls', 'security') if (value === true) return 'TLS' if (value === false) return '-' + if (value === 'none') return '-' return value } +function formatTransport(node) { + const transport = node?.transport + if (typeof transport === 'string') return transport + if (transport?.type) return transport.type + return nodeField(node, 'network', 'net') +} + function flowSummary(src) { const flow = flowInfos[src.id] if (!flow) return '' @@ -394,6 +415,38 @@ async function copyNodeLink(node) { } } +async function probeSourceEgress(src) { + if (egressLoadingId.value) return + egressLoadingId.value = src.id + egressProgress.value = '' + try { + const preview = await previewSource(sourcePreviewPayload(src)) + const nodes = preview.data?.processed || preview.data?.original || [] + nodeCounts[src.id] = countsFromPreview(preview.data) + if (expandedSourceId.value === src.id) { + expandedData.value = preview.data + } + for (let i = 0; i < nodes.length; i += 1) { + egressProgress.value = `${i + 1}/${nodes.length}` + try { + const res = await getEgressInfo(nodes[i]) + Object.assign(nodes[i], { + egressIp: res.data.egressIp, + egressCountry: res.data.country, + egressRegion: res.data.region, + latencyMs: res.data.latencyMs, + }) + } catch { + Object.assign(nodes[i], { egressIp: '-', egressCountry: '-', egressRegion: '-' }) + } + } + showToast('出口探测完成') + } finally { + egressLoadingId.value = '' + egressProgress.value = '' + } +} + async function load() { loading.value = true try { diff --git a/internal/handler/download_tools.go b/internal/handler/download_tools.go index bfb82b4..765c441 100644 --- a/internal/handler/download_tools.go +++ b/internal/handler/download_tools.go @@ -168,8 +168,8 @@ func (d *Deps) HandlePreviewSource(c fiber.Ctx) error { applyFiltersSafe(original, rec.Filters, settings, "json", rec.ID), ) return success(c, fiber.Map{ - "original": proxy.AddPreviewIds(original), - "processed": proxy.AddPreviewIds(processed), + "original": d.addCachedEgressInfo(proxy.AddPreviewIds(original)), + "processed": d.addCachedEgressInfo(proxy.AddPreviewIds(processed)), }) } @@ -190,7 +190,7 @@ func (d *Deps) HandlePreviewSource(c fiber.Ctx) error { "body": result.Body, "nodes": result.Nodes, "originalCount": result.OriginalNodes, - "processed": previewNodesFromBody(result.Body), + "processed": d.addCachedEgressInfo(previewNodesFromBody(result.Body)), }) } @@ -218,7 +218,7 @@ func (d *Deps) HandlePreviewCollection(c fiber.Ctx) error { "body": result.Body, "nodes": result.Nodes, "originalCount": result.OriginalNodes, - "processed": previewNodesFromBody(result.Body), + "processed": d.addCachedEgressInfo(previewNodesFromBody(result.Body)), }) } diff --git a/internal/handler/egress_info.go b/internal/handler/egress_info.go new file mode 100644 index 0000000..a269d5b --- /dev/null +++ b/internal/handler/egress_info.go @@ -0,0 +1,257 @@ +package handler + +import ( + "bytes" + "context" + "crypto/sha256" + "encoding/json" + "fmt" + "io" + "net" + "net/http" + "net/url" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + "github.com/gofiber/fiber/v3" + + "github.com/peterqiu0516/sub-store/internal/model" + "github.com/peterqiu0516/sub-store/internal/render" + "github.com/peterqiu0516/sub-store/internal/util" +) + +func (d *Deps) HandleEgressInfo(c fiber.Ctx) error { + var node model.ProxyNode + if err := json.Unmarshal(c.Body(), &node); err != nil { + return failed(c, "Invalid JSON", 400) + } + if getStringValue(node["server"]) == "" { + node["server"] = getStringValue(node["address"]) + } + if getStringValue(node["name"]) == "" { + node["name"] = "PROXY" + } + + cacheKey := egressCacheKey(node) + if entry, ok := d.CacheRepo.SafeGet(cacheKey); ok { + var cached map[string]any + if json.Unmarshal([]byte(entry.Content), &cached) == nil { + cached["cached"] = true + return success(c, cached) + } + } + + latencyMs, latencyErr := probeServerPortLatency(node, 5*time.Second) + port, err := freeLocalPort() + if err != nil { + return failed(c, err.Error(), 500) + } + configData, err := buildEgressProbeConfig(node, port) + if err != nil { + return failed(c, err.Error(), 400) + } + + info, err := runEgressProbe(configData, port) + if err != nil { + info = fiber.Map{"egressError": err.Error()} + } + if latencyMs >= 0 { + info["latencyMs"] = latencyMs + } + if latencyErr != "" { + info["latencyError"] = latencyErr + } + info["cached"] = false + if data, err := json.Marshal(info); err == nil { + ttl := int(d.Cfg.Fetcher.CacheTTL.Seconds()) + if ttl <= 0 { + ttl = 300 + } + d.CacheRepo.SafePut(cacheKey, string(data), nil, ttl) + } + return success(c, info) +} + +func egressCacheKey(node model.ProxyNode) string { + clean := model.ProxyNode{} + skip := map[string]bool{ + "id": true, "latencyMs": true, "latencyError": true, + "egressIp": true, "egressCountry": true, "egressRegion": true, "egressError": true, + "country": true, "region": true, "city": true, "isp": true, "cached": true, + } + for k, v := range node { + if !skip[k] { + clean[k] = v + } + } + data, _ := json.Marshal(clean) + sum := sha256.Sum256(data) + return fmt.Sprintf("egress:%x", sum) +} + +func (d *Deps) addCachedEgressInfo(nodes []model.ProxyNode) []model.ProxyNode { + for _, node := range nodes { + entry, ok := d.CacheRepo.SafeGet(egressCacheKey(node)) + if !ok { + continue + } + var cached map[string]any + if json.Unmarshal([]byte(entry.Content), &cached) != nil { + continue + } + for _, key := range []string{"egressIp", "country", "region", "city", "isp", "latencyMs", "latencyError", "egressError"} { + if v, ok := cached[key]; ok { + node[key] = v + } + } + node["cached"] = true + } + return nodes +} + +func probeServerPortLatency(node model.ProxyNode, timeout time.Duration) (int64, string) { + server := getStringValue(node["server"]) + port := toIntSafe(node["port"]) + if server == "" || port <= 0 { + return -1, "missing server or port" + } + start := time.Now() + conn, err := net.DialTimeout("tcp", net.JoinHostPort(server, fmt.Sprint(port)), timeout) + if err != nil { + return -1, err.Error() + } + _ = conn.Close() + return time.Since(start).Milliseconds(), "" +} + +func buildEgressProbeConfig(node model.ProxyNode, port int) ([]byte, error) { + probeNode := model.ProxyNode{} + for k, v := range node { + probeNode[k] = v + } + probeNode["name"] = "PROXY" + + outbound := render.ToSingBoxOutbound(probeNode) + if outbound == nil { + return nil, fmt.Errorf("Unsupported proxy node for egress probe") + } + doc := map[string]any{ + "log": map[string]any{"level": "warn"}, + "inbounds": []any{ + map[string]any{ + "type": "mixed", + "tag": "mixed-in", + "listen": "127.0.0.1", + "listen_port": port, + }, + }, + "outbounds": []any{ + outbound, + map[string]any{"type": "direct", "tag": "DIRECT"}, + }, + "route": map[string]any{ + "auto_detect_interface": true, + "final": "PROXY", + "rules": []any{map[string]any{"action": "sniff"}}, + }, + } + return json.Marshal(doc) +} + +func runEgressProbe(configData []byte, port int) (fiber.Map, error) { + singBox, err := exec.LookPath("sing-box") + if err != nil { + return nil, fmt.Errorf("sing-box executable not found") + } + dir, err := os.MkdirTemp("", "sub-store-egress-*") + if err != nil { + return nil, err + } + defer os.RemoveAll(dir) + + configPath := filepath.Join(dir, "config.json") + if err := os.WriteFile(configPath, configData, 0o600); err != nil { + return nil, err + } + + ctx, cancel := context.WithTimeout(context.Background(), 25*time.Second) + defer cancel() + cmd := exec.CommandContext(ctx, singBox, "run", "-c", configPath) + var stderr bytes.Buffer + cmd.Stderr = &stderr + if err := cmd.Start(); err != nil { + return nil, err + } + defer func() { + cancel() + _ = cmd.Wait() + }() + + if err := waitTCP("127.0.0.1", port, 5*time.Second); err != nil { + msg := strings.TrimSpace(stderr.String()) + if msg != "" { + return nil, fmt.Errorf("%s", msg) + } + return nil, err + } + + proxyURL, _ := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", port)) + client := &http.Client{ + Timeout: 15 * time.Second, + Transport: &http.Transport{ + Proxy: http.ProxyURL(proxyURL), + }, + } + resp, err := client.Get("https://ipwho.is/?lang=en") + if err != nil { + return nil, err + } + defer resp.Body.Close() + body, _ := io.ReadAll(io.LimitReader(resp.Body, util.MaxFlowRespBytes)) + + var data map[string]any + if err := json.Unmarshal(body, &data); err != nil { + return nil, fmt.Errorf("Invalid egress info response") + } + if success, ok := data["success"].(bool); ok && !success { + msg := getStringValue(data["message"]) + if msg == "" { + msg = "Egress info lookup failed" + } + return nil, fmt.Errorf("%s", msg) + } + connection, _ := data["connection"].(map[string]any) + return fiber.Map{ + "egressIp": data["ip"], + "country": data["country"], + "region": data["region"], + "city": data["city"], + "isp": connection["isp"], + }, nil +} + +func freeLocalPort() (int, error) { + l, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return 0, err + } + defer l.Close() + return l.Addr().(*net.TCPAddr).Port, nil +} + +func waitTCP(host string, port int, timeout time.Duration) error { + deadline := time.Now().Add(timeout) + addr := fmt.Sprintf("%s:%d", host, port) + for time.Now().Before(deadline) { + conn, err := net.DialTimeout("tcp", addr, 200*time.Millisecond) + if err == nil { + conn.Close() + return nil + } + time.Sleep(100 * time.Millisecond) + } + return fmt.Errorf("Timed out waiting for sing-box") +} diff --git a/internal/handler/handler_test.go b/internal/handler/handler_test.go index 1e6a0f5..f7827bf 100644 --- a/internal/handler/handler_test.go +++ b/internal/handler/handler_test.go @@ -4,11 +4,13 @@ import ( "encoding/base64" "encoding/json" "io" + "net" "net/http" "net/http/httptest" "path/filepath" "strings" "testing" + "time" "github.com/gofiber/fiber/v3" "github.com/jmoiron/sqlx" @@ -105,6 +107,7 @@ func registerHandlers(app *fiber.App, deps *Deps) { app.Post("/api/rule/parse", deps.HandleRuleParse) app.Post("/api/utils/proxy-uri", deps.HandleProxyURI) app.Post("/api/utils/node-info", deps.HandleNodeInfo) + app.Post("/api/utils/egress-info", deps.HandleEgressInfo) app.Get("/sources/:name/:token", deps.HandleDownloadSource) app.Get("/collections/:name/:token", deps.HandleDownloadCollection) @@ -2065,6 +2068,78 @@ func TestHandleNodeInfoServerWithBrackets(t *testing.T) { } } +func TestBuildEgressProbeConfig(t *testing.T) { + data, err := buildEgressProbeConfig(model.ProxyNode{ + "type": "ss", + "name": "demo", + "server": "127.0.0.1", + "port": 8388, + "cipher": "aes-256-gcm", + "password": "pass", + }, 19090) + if err != nil { + t.Fatalf("buildEgressProbeConfig returned error: %v", err) + } + var doc map[string]any + if err := json.Unmarshal(data, &doc); err != nil { + t.Fatalf("invalid config JSON: %v", err) + } + route := doc["route"].(map[string]any) + if route["final"] != "PROXY" { + t.Fatalf("route.final = %v, want PROXY", route["final"]) + } + inbound := doc["inbounds"].([]any)[0].(map[string]any) + if inbound["listen"] != "127.0.0.1" || inbound["listen_port"].(float64) != 19090 { + t.Fatalf("unexpected inbound: %v", inbound) + } +} + +func TestHandleEgressInfoUnsupported(t *testing.T) { + deps := newTestDeps(t) + app := newApp(deps) + code, _ := doRequest(t, app, "POST", "/api/utils/egress-info", `{"type":"unknown","server":"1.2.3.4","port":443}`, nil) + assertStatus(t, "EgressInfo unsupported", code, 400) +} + +func TestProbeServerPortLatency(t *testing.T) { + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer ln.Close() + go func() { + conn, err := ln.Accept() + if err == nil { + conn.Close() + } + }() + latency, msg := probeServerPortLatency(model.ProxyNode{ + "server": "127.0.0.1", + "port": ln.Addr().(*net.TCPAddr).Port, + }, time.Second) + if msg != "" { + t.Fatalf("unexpected latency error: %s", msg) + } + if latency < 0 { + t.Fatalf("latency = %d, want >= 0", latency) + } +} + +func TestAddCachedEgressInfo(t *testing.T) { + deps := newTestDeps(t) + node := model.ProxyNode{ + "type": "ss", + "name": "n", + "server": "127.0.0.1", + "port": 8388, + } + deps.CacheRepo.SafePut(egressCacheKey(node), `{"egressIp":"1.1.1.1","country":"Japan","region":"Tokyo","latencyMs":12}`, nil, 300) + nodes := deps.addCachedEgressInfo([]model.ProxyNode{node}) + if nodes[0]["egressIp"] != "1.1.1.1" || nodes[0]["latencyMs"].(float64) != 12 { + t.Fatalf("cached egress not merged: %v", nodes[0]) + } +} + // --------------------------------------------------------------------------- // RegisterRoutes integration (uses real middleware) // --------------------------------------------------------------------------- diff --git a/internal/handler/routes.go b/internal/handler/routes.go index d153ceb..2242dbe 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -98,6 +98,7 @@ func RegisterRoutes(app *fiber.App, cfg *config.Config, db *sqlx.DB) { api.Post("/rule/parse", deps.HandleRuleParse) api.Post("/utils/proxy-uri", deps.HandleProxyURI) api.Post("/utils/node-info", deps.HandleNodeInfo) + api.Post("/utils/egress-info", deps.HandleEgressInfo) // Public download routes — no admin token required, uses download token app.Get("/sources/:name/:token", deps.HandleDownloadSource) diff --git a/internal/proxy/parser_test.go b/internal/proxy/parser_test.go index 9dd4ffd..67172ec 100644 --- a/internal/proxy/parser_test.go +++ b/internal/proxy/parser_test.go @@ -96,6 +96,13 @@ func TestParseVMess(t *testing.T) { if n["network"] != "ws" { t.Errorf("expected network ws, got %v", n["network"]) } + ws, ok := n["ws-opts"].(map[string]any) + if !ok { + t.Fatalf("expected ws-opts map, got %T", n["ws-opts"]) + } + if ws["path"] != "/path" { + t.Errorf("expected ws path /path, got %v", ws["path"]) + } if n["tls"] != true { t.Errorf("expected tls true, got %v", n["tls"]) } @@ -117,6 +124,13 @@ func TestParseVLESS(t *testing.T) { if n["network"] != "ws" { t.Errorf("expected network ws, got %v", n["network"]) } + ws, ok := n["ws-opts"].(map[string]any) + if !ok { + t.Fatalf("expected ws-opts map, got %T", n["ws-opts"]) + } + if ws["path"] != "/path" { + t.Errorf("expected ws path /path, got %v", ws["path"]) + } if n["tls"] != true { t.Errorf("expected tls true, got %v", n["tls"]) } diff --git a/internal/proxy/uri_parser.go b/internal/proxy/uri_parser.go index 99dc9a2..8b3b263 100644 --- a/internal/proxy/uri_parser.go +++ b/internal/proxy/uri_parser.go @@ -142,19 +142,29 @@ func ParseVless(line string, index int) model.ProxyNode { } node := map[string]any{ - "name": fragmentName(u, fmt.Sprintf("vless-%d", index+1)), - "type": "vless", - "server": u.Hostname(), - "port": portFromURL(u, 443), - "uuid": userInfo(u), - "udp": true, - "flow": params.Get("flow"), - "network": orDefault(params.Get("type"), "tcp"), - "tls": security != "none", + "name": fragmentName(u, fmt.Sprintf("vless-%d", index+1)), + "type": "vless", + "server": u.Hostname(), + "port": portFromURL(u, 443), + "uuid": userInfo(u), + "udp": true, + "flow": params.Get("flow"), + "network": orDefault(params.Get("type"), "tcp"), + "tls": security != "none", "servername": params.Get("sni"), - "encryption": orDefault(params.Get("encryption"), "none"), + "encryption": orDefault(params.Get("encryption"), "none"), "client-fingerprint": orDefault(params.Get("fp"), "chrome"), } + if node["network"] == "ws" { + wsOpts := map[string]any{ + "path": orDefault(params.Get("path"), "/"), + } + host := params.Get("host") + if host != "" { + wsOpts["headers"] = map[string]any{"Host": host} + } + node["ws-opts"] = wsOpts + } if publicKey != "" { node["reality-opts"] = StripUndefined(map[string]any{ "public-key": publicKey, @@ -251,17 +261,17 @@ func ParseVmess(line string, index int) model.ProxyNode { port := toNumberOrUndefined(payload["port"]) node := map[string]any{ - "name": orDefault(toString(payload["ps"]), fmt.Sprintf("vmess-%d", index+1)), - "type": "vmess", - "server": toString(payload["add"]), - "port": port, - "uuid": toString(payload["id"]), - "alterId": toNumberOrUndefined(payload["aid"]), - "cipher": orDefault(toString(payload["scy"]), "auto"), - "tls": toString(payload["tls"]) == "tls", + "name": orDefault(toString(payload["ps"]), fmt.Sprintf("vmess-%d", index+1)), + "type": "vmess", + "server": toString(payload["add"]), + "port": port, + "uuid": toString(payload["id"]), + "alterId": toNumberOrUndefined(payload["aid"]), + "cipher": orDefault(toString(payload["scy"]), "auto"), + "tls": toString(payload["tls"]) == "tls", "servername": firstNonEmpty(toString(payload["sni"]), toString(payload["host"])), - "network": orDefault(toString(payload["net"]), "tcp"), - "udp": true, + "network": orDefault(toString(payload["net"]), "tcp"), + "udp": true, } if toString(payload["net"]) == "ws" { wsOpts := map[string]any{ @@ -415,15 +425,15 @@ func ParseShadowsocksR(line string, index int) model.ProxyNode { } node := map[string]any{ - "name": name, - "type": "ssr", - "server": server, - "port": port, - "cipher": method, + "name": name, + "type": "ssr", + "server": server, + "port": port, + "cipher": method, "password": password, "protocol": protocol, - "obfs": obfs, - "udp": true, + "obfs": obfs, + "udp": true, } if pp := query.Get("protoparam"); pp != "" { @@ -490,18 +500,18 @@ func ParseHttpProxy(line string, index int) model.ProxyNode { func ParseTuic(line string, index int) model.ProxyNode { u := parseURL(line) return StripUndefined(map[string]any{ - "name": fragmentName(u, fmt.Sprintf("tuic-%d", index+1)), - "type": "tuic", - "server": u.Hostname(), - "port": portFromURL(u, 443), - "uuid": userInfo(u), - "password": userPassword(u), - "sni": paramGet(u, "sni"), - "alpn": CommaList(paramGet(u, "alpn")), - "skip-cert-verify": BoolParam(firstNonEmpty(paramGet(u, "allow_insecure"), paramGet(u, "insecure"))), - "disable-sni": BoolParam(firstNonEmpty(paramGet(u, "disable_sni"), paramGet(u, "disable-sni"))), - "reduce-rtt": BoolParam(firstNonEmpty(paramGet(u, "reduce_rtt"), paramGet(u, "reduce-rtt"))), - "udp-relay-mode": firstNonEmpty(paramGet(u, "udp_relay_mode"), paramGet(u, "udp-relay-mode")), + "name": fragmentName(u, fmt.Sprintf("tuic-%d", index+1)), + "type": "tuic", + "server": u.Hostname(), + "port": portFromURL(u, 443), + "uuid": userInfo(u), + "password": userPassword(u), + "sni": paramGet(u, "sni"), + "alpn": CommaList(paramGet(u, "alpn")), + "skip-cert-verify": BoolParam(firstNonEmpty(paramGet(u, "allow_insecure"), paramGet(u, "insecure"))), + "disable-sni": BoolParam(firstNonEmpty(paramGet(u, "disable_sni"), paramGet(u, "disable-sni"))), + "reduce-rtt": BoolParam(firstNonEmpty(paramGet(u, "reduce_rtt"), paramGet(u, "reduce-rtt"))), + "udp-relay-mode": firstNonEmpty(paramGet(u, "udp_relay_mode"), paramGet(u, "udp-relay-mode")), "congestion-controller": firstNonEmpty(paramGet(u, "congestion_control"), paramGet(u, "congestion-controller")), }) }