From 6e4bbe8f1e638a46b1ce164cd8b980f0f3eab084 Mon Sep 17 00:00:00 2001 From: CJACK Date: Sun, 1 Feb 2026 18:09:32 +0800 Subject: [PATCH] feat: Add new static admin UI, including its assets and Vercel deployment configuration. --- .gitignore | 1 - static/admin/assets/index-BQtFaPJC.css | 1 + static/admin/assets/index-vto7-UKG.js | 261 +++++++++++++++++++++++++ static/admin/index.html | 43 ++++ vercel.json | 1 - 5 files changed, 305 insertions(+), 2 deletions(-) create mode 100644 static/admin/assets/index-BQtFaPJC.css create mode 100644 static/admin/assets/index-vto7-UKG.js create mode 100644 static/admin/index.html diff --git a/.gitignore b/.gitignore index 758e1bd..5c34391 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,6 @@ uvicorn.log node_modules/ webui/node_modules/ webui/dist/ -static/admin/ .npm .pnpm-store/ package-lock.json diff --git a/static/admin/assets/index-BQtFaPJC.css b/static/admin/assets/index-BQtFaPJC.css new file mode 100644 index 0000000..1667629 --- /dev/null +++ b/static/admin/assets/index-BQtFaPJC.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}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.bottom-2{bottom:.5rem}.bottom-\[-10\%\]{bottom:-10%}.left-0{left:0}.left-0\.5{left:.125rem}.left-\[-10\%\]{left:-10%}.right-0{right:0}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-4{right:1rem}.right-\[-10\%\]{right:-10%}.top-0{top:0}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-4{top:1rem}.top-\[-10\%\]{top:-10%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-mr-2{margin-right:-.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-5{margin-left:1.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[50\%\]{height:50%}.h-\[calc\(100vh-140px\)\]{height:calc(100vh - 140px)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-60{max-height:15rem}.min-h-0{min-height:0px}.min-h-\[400px\]{min-height:400px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-\[50\%\]{width:50%}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-\[400px\]{max-width:400px}.max-w-\[85\%\]{max-width:85%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:var(--color-border)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{border-color:var(--color-border)}.border-current{border-color:currentColor}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/20{border-color:#10b98133}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:transparent}.border-t-primary-foreground{border-top-color:var(--color-primary-foreground)}.border-t-transparent{border-top-color:transparent}.bg-\[\#09090b\]{--tw-bg-opacity: 1;background-color:rgb(9 9 11 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-background{background-color:var(--color-background)}.bg-black\/50{background-color:#00000080}.bg-card{background-color:var(--color-card)}.bg-current{background-color:currentColor}.bg-destructive{background-color:var(--color-destructive)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-muted{background-color:var(--color-muted)}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-transparent{background-color:transparent}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-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}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pr-10{padding-right:2.5rem}.pr-12{padding-right:3rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.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-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-7{line-height:1.75rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.1em\]{letter-spacing:.1em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-destructive{color:var(--color-destructive)}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-5{opacity:.05}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(16\,185\,129\,0\.5\)\]{--tw-shadow: 0 0 8px rgba(16,185,129,.5);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-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-emerald-500\/30{--tw-shadow-color: rgb(16 185 129 / .3);--tw-shadow: var(--tw-shadow-colored)}.blur-\[120px\]{--tw-blur: blur(120px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-150{transition-delay:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--color-background: hsl(240 10% 3.9%);--color-foreground: hsl(0 0% 98%);--color-card: hsl(240 10% 6.5%);--color-card-foreground: hsl(0 0% 98%);--color-popover: hsl(240 10% 3.9%);--color-popover-foreground: hsl(0 0% 98%);--color-primary: hsl(45 93% 47%);--color-primary-foreground: hsl(240 10% 3.9%);--color-secondary: hsl(240 5.9% 10%);--color-secondary-foreground: hsl(0 0% 98%);--color-muted: hsl(240 3.7% 15.9%);--color-muted-foreground: hsl(240 5% 64.9%);--color-accent: hsl(240 3.7% 15.9%);--color-accent-foreground: hsl(0 0% 98%);--color-destructive: hsl(0 84.2% 60.2%);--color-destructive-foreground: hsl(0 0% 98%);--color-border: hsl(240 3.7% 15.9%);--color-input: hsl(240 3.7% 15.9%);--color-ring: hsl(45 93% 47%);--radius: .5rem}*{border-color:var(--color-border)}body{background-color:var(--color-background);color:var(--color-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"rlig" 1,"calt" 1}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#31415899;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#4a6182cc}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:var(--color-muted) transparent}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:all .15s}.btn:focus{outline:none;box-shadow:0 0 0 2px #ffffff1a}.btn:disabled{opacity:.5;pointer-events:none}.btn-primary{background-color:var(--color-primary);color:var(--color-primary-foreground);box-shadow:0 1px 2px #0000000d}.btn-primary:hover{background-color:#f8fafce6}.btn-primary:active{transform:scale(.95)}.btn-secondary{background-color:var(--color-secondary);color:var(--color-secondary-foreground);border:1px solid var(--color-border)}.btn-secondary:hover{background-color:var(--color-accent);color:var(--color-accent-foreground)}.btn-danger{background-color:var(--color-destructive);color:var(--color-destructive-foreground);box-shadow:0 1px 2px #0000000d}.btn-danger:hover{background-color:#7f1d1de6}.btn-sm{padding:.375rem .75rem;font-size:.75rem}.input-field{display:flex;height:2.5rem;width:100%;border-radius:.5rem;border:1px solid var(--color-input);background-color:#09090b;color:hsl(var(--color-foreground));padding:.5rem .75rem;font-size:.875rem;transition:all .15s}.input-field::-moz-placeholder{color:var(--color-muted-foreground)}.input-field::placeholder{color:var(--color-muted-foreground)}.input-field:focus{outline:none;box-shadow:0 0 0 2px var(--color-ring)}.input-field:disabled{cursor:not-allowed;opacity:.5}.card{background-color:var(--color-card);color:var(--color-card-foreground);border:1px solid var(--color-border);border-radius:.75rem;box-shadow:0 1px 2px #0000000d;overflow:hidden}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:bg-secondary:hover{background-color:var(--color-secondary)}.hover\:text-destructive:hover{color:var(--color-destructive)}.hover\:text-foreground:hover{color:var(--color-foreground)}.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\:border-primary:focus{border-color:var(--color-primary)}.focus\:border-ring:focus{border-color:var(--color-ring)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.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-ring:focus{--tw-ring-color: var(--color-ring)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:shadow-none:disabled{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:focus-within .group-focus-within\:text-primary{color:var(--color-primary)}.group:hover .group-hover\:text-foreground{color:var(--color-foreground)}.group:hover .group-hover\:text-primary{color:var(--color-primary)}.group:hover .group-hover\:opacity-10{opacity:.1}.group:hover .group-hover\:opacity-100{opacity:1}.peer:checked~.peer-checked\:border-primary{border-color:var(--color-primary)}.peer:checked~.peer-checked\:bg-primary{background-color:var(--color-primary)}.peer:checked~.peer-checked\:opacity-100{opacity:1}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}}@media (min-width: 1024px){.lg\:static{position:static}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-9{grid-column:span 9 / span 9}.lg\:ml-0{margin-left:0}.lg\:block{display:block}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-\[calc\(100vh-140px\)\]{height:calc(100vh - 140px)}.lg\:h-full{height:100%}.lg\:w-4{width:1rem}.lg\:max-w-\[75\%\]{max-width:75%}.lg\:transform-none{transform:none}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.lg\:self-auto{align-self:auto}.lg\:p-1\.5{padding:.375rem}.lg\:p-10{padding:2.5rem}.lg\:p-6{padding:1.5rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.lg\:text-xs{font-size:.75rem;line-height:1rem}.lg\:shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}} diff --git a/static/admin/assets/index-vto7-UKG.js b/static/admin/assets/index-vto7-UKG.js new file mode 100644 index 0000000..c7b877c --- /dev/null +++ b/static/admin/assets/index-vto7-UKG.js @@ -0,0 +1,261 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function Ic(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var mu={exports:{}},hl={},hu={exports:{}},R={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ur=Symbol.for("react.element"),Mc=Symbol.for("react.portal"),Dc=Symbol.for("react.fragment"),Rc=Symbol.for("react.strict_mode"),Ac=Symbol.for("react.profiler"),Fc=Symbol.for("react.provider"),$c=Symbol.for("react.context"),Uc=Symbol.for("react.forward_ref"),Vc=Symbol.for("react.suspense"),bc=Symbol.for("react.memo"),Bc=Symbol.for("react.lazy"),Gs=Symbol.iterator;function Hc(e){return e===null||typeof e!="object"?null:(e=Gs&&e[Gs]||e["@@iterator"],typeof e=="function"?e:null)}var gu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},yu=Object.assign,vu={};function kn(e,t,n){this.props=e,this.context=t,this.refs=vu,this.updater=n||gu}kn.prototype.isReactComponent={};kn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};kn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function xu(){}xu.prototype=kn.prototype;function rs(e,t,n){this.props=e,this.context=t,this.refs=vu,this.updater=n||gu}var ls=rs.prototype=new xu;ls.constructor=rs;yu(ls,kn.prototype);ls.isPureReactComponent=!0;var Zs=Array.isArray,wu=Object.prototype.hasOwnProperty,os={current:null},ku={key:!0,ref:!0,__self:!0,__source:!0};function Nu(e,t,n){var r,l={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)wu.call(t,r)&&!ku.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,W=E[V];if(0>>1;Vl(M,I))Fl(re,M)?(E[V]=re,E[F]=I,V=F):(E[V]=M,E[_]=I,V=_);else if(Fl(re,I))E[V]=re,E[F]=I,V=F;else break e}}return S}function l(E,S){var I=E.sortIndex-S.sortIndex;return I!==0?I:E.id-S.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var a=[],f=[],g=1,m=null,h=3,x=!1,v=!1,N=!1,T=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(E){for(var S=n(f);S!==null;){if(S.callback===null)r(f);else if(S.startTime<=E)r(f),S.sortIndex=S.expirationTime,t(a,S);else break;S=n(f)}}function y(E){if(N=!1,p(E),!v)if(n(a)!==null)v=!0,ut(j);else{var S=n(f);S!==null&&at(y,S.startTime-E)}}function j(E,S){v=!1,N&&(N=!1,d(k),k=-1),x=!0;var I=h;try{for(p(S),m=n(a);m!==null&&(!(m.expirationTime>S)||E&&!Z());){var V=m.callback;if(typeof V=="function"){m.callback=null,h=m.priorityLevel;var W=V(m.expirationTime<=S);S=e.unstable_now(),typeof W=="function"?m.callback=W:m===n(a)&&r(a),p(S)}else r(a);m=n(a)}if(m!==null)var ye=!0;else{var _=n(f);_!==null&&at(y,_.startTime-S),ye=!1}return ye}finally{m=null,h=I,x=!1}}var C=!1,P=null,k=-1,D=5,L=-1;function Z(){return!(e.unstable_now()-LE||125V?(E.sortIndex=I,t(f,E),n(a)===null&&E===n(f)&&(N?(d(k),k=-1):N=!0,at(y,I-V))):(E.sortIndex=W,t(a,E),v||x||(v=!0,ut(j))),E},e.unstable_shouldYield=Z,e.unstable_wrapCallback=function(E){var S=h;return function(){var I=h;h=S;try{return E.apply(this,arguments)}finally{h=I}}}})(Eu);Cu.exports=Eu;var nd=Cu.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var rd=O,Ce=nd;function w(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),uo=Object.prototype.hasOwnProperty,ld=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ei={},ti={};function od(e){return uo.call(ti,e)?!0:uo.call(ei,e)?!1:ld.test(e)?ti[e]=!0:(ei[e]=!0,!1)}function sd(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function id(e,t,n,r){if(t===null||typeof t>"u"||sd(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ge(e,t,n,r,l,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var ue={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ue[e]=new ge(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ue[t]=new ge(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ue[e]=new ge(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ue[e]=new ge(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ue[e]=new ge(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ue[e]=new ge(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ue[e]=new ge(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ue[e]=new ge(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ue[e]=new ge(e,5,!1,e.toLowerCase(),null,!1,!1)});var is=/[\-:]([a-z])/g;function us(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(is,us);ue[t]=new ge(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(is,us);ue[t]=new ge(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(is,us);ue[t]=new ge(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ue[e]=new ge(e,1,!1,e.toLowerCase(),null,!1,!1)});ue.xlinkHref=new ge("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ue[e]=new ge(e,1,!1,e.toLowerCase(),null,!0,!0)});function as(e,t,n,r){var l=ue.hasOwnProperty(t)?ue[t]:null;(l!==null?l.type!==0:r||!(2u||l[s]!==o[u]){var a=` +`+l[s].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=s&&0<=u);break}}}finally{Rl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?On(e):""}function ud(e){switch(e.tag){case 5:return On(e.type);case 16:return On("Lazy");case 13:return On("Suspense");case 19:return On("SuspenseList");case 0:case 2:case 15:return e=Al(e.type,!1),e;case 11:return e=Al(e.type.render,!1),e;case 1:return e=Al(e.type,!0),e;default:return""}}function po(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Xt:return"Fragment";case Jt:return"Portal";case ao:return"Profiler";case cs:return"StrictMode";case co:return"Suspense";case fo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Tu:return(e.displayName||"Context")+".Consumer";case zu:return(e._context.displayName||"Context")+".Provider";case ds:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case fs:return t=e.displayName||null,t!==null?t:po(e.type)||"Memo";case ft:t=e._payload,e=e._init;try{return po(e(t))}catch{}}return null}function ad(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return po(t);case 8:return t===cs?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ct(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ou(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function cd(e){var t=Ou(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function yr(e){e._valueTracker||(e._valueTracker=cd(e))}function Iu(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Ou(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Hr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function mo(e,t){var n=t.checked;return J({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ri(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ct(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Mu(e,t){t=t.checked,t!=null&&as(e,"checked",t,!1)}function ho(e,t){Mu(e,t);var n=Ct(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?go(e,t.type,n):t.hasOwnProperty("defaultValue")&&go(e,t.type,Ct(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function li(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function go(e,t,n){(t!=="number"||Hr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var In=Array.isArray;function un(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=vr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Rn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},dd=["Webkit","ms","Moz","O"];Object.keys(Rn).forEach(function(e){dd.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Rn[t]=Rn[e]})});function Fu(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Rn.hasOwnProperty(e)&&Rn[e]?(""+t).trim():t+"px"}function $u(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Fu(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var fd=J({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xo(e,t){if(t){if(fd[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(w(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(w(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(w(61))}if(t.style!=null&&typeof t.style!="object")throw Error(w(62))}}function wo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ko=null;function ps(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var No=null,an=null,cn=null;function ii(e){if(e=dr(e)){if(typeof No!="function")throw Error(w(280));var t=e.stateNode;t&&(t=wl(t),No(e.stateNode,e.type,t))}}function Uu(e){an?cn?cn.push(e):cn=[e]:an=e}function Vu(){if(an){var e=an,t=cn;if(cn=an=null,ii(e),t)for(e=0;e>>=0,e===0?32:31-(Sd(e)/jd|0)|0}var xr=64,wr=4194304;function Mn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Yr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var u=s&~l;u!==0?r=Mn(u):(o&=s,o!==0&&(r=Mn(o)))}else s=n&~l,s!==0?r=Mn(s):o!==0&&(r=Mn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ar(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-$e(t),e[t]=n}function Pd(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Fn),gi=" ",yi=!1;function ia(e,t){switch(e){case"keyup":return nf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ua(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Gt=!1;function lf(e,t){switch(e){case"compositionend":return ua(t);case"keypress":return t.which!==32?null:(yi=!0,gi);case"textInput":return e=t.data,e===gi&&yi?null:e;default:return null}}function of(e,t){if(Gt)return e==="compositionend"||!ks&&ia(e,t)?(e=oa(),Dr=vs=gt=null,Gt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ki(n)}}function fa(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?fa(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function pa(){for(var e=window,t=Hr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Hr(e.document)}return t}function Ns(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function hf(e){var t=pa(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&fa(n.ownerDocument.documentElement,n)){if(r!==null&&Ns(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=Ni(n,o);var s=Ni(n,r);l&&s&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zt=null,Po=null,Un=null,zo=!1;function Si(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;zo||Zt==null||Zt!==Hr(r)||(r=Zt,"selectionStart"in r&&Ns(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Un&&Zn(Un,r)||(Un=r,r=Gr(Po,"onSelect"),0tn||(e.current=Do[tn],Do[tn]=null,tn--)}function b(e,t){tn++,Do[tn]=e.current,e.current=t}var Et={},fe=zt(Et),we=zt(!1),$t=Et;function hn(e,t){var n=e.type.contextTypes;if(!n)return Et;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ke(e){return e=e.childContextTypes,e!=null}function qr(){H(we),H(fe)}function Ti(e,t,n){if(fe.current!==Et)throw Error(w(168));b(fe,t),b(we,n)}function Na(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(w(108,ad(e)||"Unknown",l));return J({},n,r)}function el(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Et,$t=fe.current,b(fe,e),b(we,we.current),!0}function Li(e,t,n){var r=e.stateNode;if(!r)throw Error(w(169));n?(e=Na(e,t,$t),r.__reactInternalMemoizedMergedChildContext=e,H(we),H(fe),b(fe,e)):H(we),b(we,n)}var qe=null,kl=!1,Gl=!1;function Sa(e){qe===null?qe=[e]:qe.push(e)}function Ef(e){kl=!0,Sa(e)}function Tt(){if(!Gl&&qe!==null){Gl=!0;var e=0,t=U;try{var n=qe;for(U=1;e>=s,l-=s,et=1<<32-$e(t)+l|n<k?(D=P,P=null):D=P.sibling;var L=h(d,P,p[k],y);if(L===null){P===null&&(P=D);break}e&&P&&L.alternate===null&&t(d,P),c=o(L,c,k),C===null?j=L:C.sibling=L,C=L,P=D}if(k===p.length)return n(d,P),Q&&Ot(d,k),j;if(P===null){for(;kk?(D=P,P=null):D=P.sibling;var Z=h(d,P,L.value,y);if(Z===null){P===null&&(P=D);break}e&&P&&Z.alternate===null&&t(d,P),c=o(Z,c,k),C===null?j=Z:C.sibling=Z,C=Z,P=D}if(L.done)return n(d,P),Q&&Ot(d,k),j;if(P===null){for(;!L.done;k++,L=p.next())L=m(d,L.value,y),L!==null&&(c=o(L,c,k),C===null?j=L:C.sibling=L,C=L);return Q&&Ot(d,k),j}for(P=r(d,P);!L.done;k++,L=p.next())L=x(P,d,k,L.value,y),L!==null&&(e&&L.alternate!==null&&P.delete(L.key===null?k:L.key),c=o(L,c,k),C===null?j=L:C.sibling=L,C=L);return e&&P.forEach(function(Je){return t(d,Je)}),Q&&Ot(d,k),j}function T(d,c,p,y){if(typeof p=="object"&&p!==null&&p.type===Xt&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case gr:e:{for(var j=p.key,C=c;C!==null;){if(C.key===j){if(j=p.type,j===Xt){if(C.tag===7){n(d,C.sibling),c=l(C,p.props.children),c.return=d,d=c;break e}}else if(C.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===ft&&Mi(j)===C.type){n(d,C.sibling),c=l(C,p.props),c.ref=zn(d,C,p),c.return=d,d=c;break e}n(d,C);break}else t(d,C);C=C.sibling}p.type===Xt?(c=Ft(p.props.children,d.mode,y,p.key),c.return=d,d=c):(y=Br(p.type,p.key,p.props,null,d.mode,y),y.ref=zn(d,c,p),y.return=d,d=y)}return s(d);case Jt:e:{for(C=p.key;c!==null;){if(c.key===C)if(c.tag===4&&c.stateNode.containerInfo===p.containerInfo&&c.stateNode.implementation===p.implementation){n(d,c.sibling),c=l(c,p.children||[]),c.return=d,d=c;break e}else{n(d,c);break}else t(d,c);c=c.sibling}c=oo(p,d.mode,y),c.return=d,d=c}return s(d);case ft:return C=p._init,T(d,c,C(p._payload),y)}if(In(p))return v(d,c,p,y);if(jn(p))return N(d,c,p,y);Er(d,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,c!==null&&c.tag===6?(n(d,c.sibling),c=l(c,p),c.return=d,d=c):(n(d,c),c=lo(p,d.mode,y),c.return=d,d=c),s(d)):n(d,c)}return T}var yn=Ea(!0),Pa=Ea(!1),rl=zt(null),ll=null,ln=null,Cs=null;function Es(){Cs=ln=ll=null}function Ps(e){var t=rl.current;H(rl),e._currentValue=t}function Fo(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function fn(e,t){ll=e,Cs=ln=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(xe=!0),e.firstContext=null)}function Ie(e){var t=e._currentValue;if(Cs!==e)if(e={context:e,memoizedValue:t,next:null},ln===null){if(ll===null)throw Error(w(308));ln=e,ll.dependencies={lanes:0,firstContext:e}}else ln=ln.next=e;return t}var Dt=null;function zs(e){Dt===null?Dt=[e]:Dt.push(e)}function za(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,zs(t)):(n.next=l.next,l.next=n),t.interleaved=n,ot(e,r)}function ot(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var pt=!1;function Ts(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ta(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function nt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Nt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,$&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,ot(e,n)}return l=r.interleaved,l===null?(t.next=t,zs(r)):(t.next=l.next,l.next=t),r.interleaved=t,ot(e,n)}function Ar(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hs(e,n)}}function Di(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=s:o=o.next=s,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function ol(e,t,n,r){var l=e.updateQueue;pt=!1;var o=l.firstBaseUpdate,s=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var a=u,f=a.next;a.next=null,s===null?o=f:s.next=f,s=a;var g=e.alternate;g!==null&&(g=g.updateQueue,u=g.lastBaseUpdate,u!==s&&(u===null?g.firstBaseUpdate=f:u.next=f,g.lastBaseUpdate=a))}if(o!==null){var m=l.baseState;s=0,g=f=a=null,u=o;do{var h=u.lane,x=u.eventTime;if((r&h)===h){g!==null&&(g=g.next={eventTime:x,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var v=e,N=u;switch(h=t,x=n,N.tag){case 1:if(v=N.payload,typeof v=="function"){m=v.call(x,m,h);break e}m=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=N.payload,h=typeof v=="function"?v.call(x,m,h):v,h==null)break e;m=J({},m,h);break e;case 2:pt=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,h=l.effects,h===null?l.effects=[u]:h.push(u))}else x={eventTime:x,lane:h,tag:u.tag,payload:u.payload,callback:u.callback,next:null},g===null?(f=g=x,a=m):g=g.next=x,s|=h;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;h=u,u=h.next,h.next=null,l.lastBaseUpdate=h,l.shared.pending=null}}while(!0);if(g===null&&(a=m),l.baseState=a,l.firstBaseUpdate=f,l.lastBaseUpdate=g,t=l.shared.interleaved,t!==null){l=t;do s|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);bt|=s,e.lanes=s,e.memoizedState=m}}function Ri(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=ql.transition;ql.transition={};try{e(!1),t()}finally{U=n,ql.transition=r}}function Ka(){return Me().memoizedState}function Lf(e,t,n){var r=jt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ya(e))Ja(t,n);else if(n=za(e,t,n,r),n!==null){var l=me();Ue(n,e,r,l),Xa(n,t,r)}}function Of(e,t,n){var r=jt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ya(e))Ja(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,u=o(s,n);if(l.hasEagerState=!0,l.eagerState=u,Ve(u,s)){var a=t.interleaved;a===null?(l.next=l,zs(t)):(l.next=a.next,a.next=l),t.interleaved=l;return}}catch{}finally{}n=za(e,t,l,r),n!==null&&(l=me(),Ue(n,e,r,l),Xa(n,t,r))}}function Ya(e){var t=e.alternate;return e===Y||t!==null&&t===Y}function Ja(e,t){Vn=il=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Xa(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,hs(e,n)}}var ul={readContext:Ie,useCallback:ae,useContext:ae,useEffect:ae,useImperativeHandle:ae,useInsertionEffect:ae,useLayoutEffect:ae,useMemo:ae,useReducer:ae,useRef:ae,useState:ae,useDebugValue:ae,useDeferredValue:ae,useTransition:ae,useMutableSource:ae,useSyncExternalStore:ae,useId:ae,unstable_isNewReconciler:!1},If={readContext:Ie,useCallback:function(e,t){return We().memoizedState=[e,t===void 0?null:t],e},useContext:Ie,useEffect:Fi,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,$r(4194308,4,ba.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $r(4194308,4,e,t)},useInsertionEffect:function(e,t){return $r(4,2,e,t)},useMemo:function(e,t){var n=We();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=We();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Lf.bind(null,Y,e),[r.memoizedState,e]},useRef:function(e){var t=We();return e={current:e},t.memoizedState=e},useState:Ai,useDebugValue:Fs,useDeferredValue:function(e){return We().memoizedState=e},useTransition:function(){var e=Ai(!1),t=e[0];return e=Tf.bind(null,e[1]),We().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Y,l=We();if(Q){if(n===void 0)throw Error(w(407));n=n()}else{if(n=t(),oe===null)throw Error(w(349));Vt&30||Ma(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Fi(Ra.bind(null,r,o,e),[e]),r.flags|=2048,sr(9,Da.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=We(),t=oe.identifierPrefix;if(Q){var n=tt,r=et;n=(r&~(1<<32-$e(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=lr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[Qe]=t,e[tr]=r,sc(e,t,!1,!1),t.stateNode=e;e:{switch(s=wo(n,r),n){case"dialog":B("cancel",e),B("close",e),l=r;break;case"iframe":case"object":case"embed":B("load",e),l=r;break;case"video":case"audio":for(l=0;lwn&&(t.flags|=128,r=!0,Tn(o,!1),t.lanes=4194304)}else{if(!r)if(e=sl(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Tn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!Q)return ce(t),null}else 2*G()-o.renderingStartTime>wn&&n!==1073741824&&(t.flags|=128,r=!0,Tn(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=G(),t.sibling=null,n=K.current,b(K,r?n&1|2:n&1),t):(ce(t),null);case 22:case 23:return Hs(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Se&1073741824&&(ce(t),t.subtreeFlags&6&&(t.flags|=8192)):ce(t),null;case 24:return null;case 25:return null}throw Error(w(156,t.tag))}function Vf(e,t){switch(js(t),t.tag){case 1:return ke(t.type)&&qr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return vn(),H(we),H(fe),Is(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Os(t),null;case 13:if(H(K),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));gn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return H(K),null;case 4:return vn(),null;case 10:return Ps(t.type._context),null;case 22:case 23:return Hs(),null;case 24:return null;default:return null}}var zr=!1,de=!1,bf=typeof WeakSet=="function"?WeakSet:Set,z=null;function on(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){X(e,t,r)}else n.current=null}function Ko(e,t,n){try{n()}catch(r){X(e,t,r)}}var Ji=!1;function Bf(e,t){if(To=Jr,e=pa(),Ns(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,u=-1,a=-1,f=0,g=0,m=e,h=null;t:for(;;){for(var x;m!==n||l!==0&&m.nodeType!==3||(u=s+l),m!==o||r!==0&&m.nodeType!==3||(a=s+r),m.nodeType===3&&(s+=m.nodeValue.length),(x=m.firstChild)!==null;)h=m,m=x;for(;;){if(m===e)break t;if(h===n&&++f===l&&(u=s),h===o&&++g===r&&(a=s),(x=m.nextSibling)!==null)break;m=h,h=m.parentNode}m=x}n=u===-1||a===-1?null:{start:u,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(Lo={focusedElem:e,selectionRange:n},Jr=!1,z=t;z!==null;)if(t=z,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,z=e;else for(;z!==null;){t=z;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var N=v.memoizedProps,T=v.memoizedState,d=t.stateNode,c=d.getSnapshotBeforeUpdate(t.elementType===t.type?N:Re(t.type,N),T);d.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var p=t.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(y){X(t,t.return,y)}if(e=t.sibling,e!==null){e.return=t.return,z=e;break}z=t.return}return v=Ji,Ji=!1,v}function bn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Ko(t,n,o)}l=l.next}while(l!==r)}}function jl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Yo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function ac(e){var t=e.alternate;t!==null&&(e.alternate=null,ac(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Qe],delete t[tr],delete t[Mo],delete t[_f],delete t[Cf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function cc(e){return e.tag===5||e.tag===3||e.tag===4}function Xi(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||cc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Jo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Zr));else if(r!==4&&(e=e.child,e!==null))for(Jo(e,t,n),e=e.sibling;e!==null;)Jo(e,t,n),e=e.sibling}function Xo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Xo(e,t,n),e=e.sibling;e!==null;)Xo(e,t,n),e=e.sibling}var se=null,Ae=!1;function dt(e,t,n){for(n=n.child;n!==null;)dc(e,t,n),n=n.sibling}function dc(e,t,n){if(Ke&&typeof Ke.onCommitFiberUnmount=="function")try{Ke.onCommitFiberUnmount(gl,n)}catch{}switch(n.tag){case 5:de||on(n,t);case 6:var r=se,l=Ae;se=null,dt(e,t,n),se=r,Ae=l,se!==null&&(Ae?(e=se,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):se.removeChild(n.stateNode));break;case 18:se!==null&&(Ae?(e=se,n=n.stateNode,e.nodeType===8?Xl(e.parentNode,n):e.nodeType===1&&Xl(e,n),Xn(e)):Xl(se,n.stateNode));break;case 4:r=se,l=Ae,se=n.stateNode.containerInfo,Ae=!0,dt(e,t,n),se=r,Ae=l;break;case 0:case 11:case 14:case 15:if(!de&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&Ko(n,t,s),l=l.next}while(l!==r)}dt(e,t,n);break;case 1:if(!de&&(on(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){X(n,t,u)}dt(e,t,n);break;case 21:dt(e,t,n);break;case 22:n.mode&1?(de=(r=de)||n.memoizedState!==null,dt(e,t,n),de=r):dt(e,t,n);break;default:dt(e,t,n)}}function Gi(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new bf),t.forEach(function(r){var l=Zf.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function De(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=s),r&=~o}if(r=l,r=G()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Wf(r/1960))-r,10e?16:e,yt===null)var r=!1;else{if(e=yt,yt=null,dl=0,$&6)throw Error(w(331));var l=$;for($|=4,z=e.current;z!==null;){var o=z,s=o.child;if(z.flags&16){var u=o.deletions;if(u!==null){for(var a=0;aG()-bs?At(e,0):Vs|=n),Ne(e,t)}function xc(e,t){t===0&&(e.mode&1?(t=wr,wr<<=1,!(wr&130023424)&&(wr=4194304)):t=1);var n=me();e=ot(e,t),e!==null&&(ar(e,t,n),Ne(e,n))}function Gf(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),xc(e,n)}function Zf(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(w(314))}r!==null&&r.delete(t),xc(e,n)}var wc;wc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||we.current)xe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return xe=!1,$f(e,t,n);xe=!!(e.flags&131072)}else xe=!1,Q&&t.flags&1048576&&ja(t,nl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Ur(e,t),e=t.pendingProps;var l=hn(t,fe.current);fn(t,n),l=Ds(null,t,r,e,l,n);var o=Rs();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ke(r)?(o=!0,el(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Ts(t),l.updater=Sl,t.stateNode=l,l._reactInternals=t,Uo(t,r,e,n),t=Bo(null,t,r,!0,o,n)):(t.tag=0,Q&&o&&Ss(t),pe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Ur(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=ep(r),e=Re(r,e),l){case 0:t=bo(null,t,r,e,n);break e;case 1:t=Qi(null,t,r,e,n);break e;case 11:t=Hi(null,t,r,e,n);break e;case 14:t=Wi(null,t,r,Re(r.type,e),n);break e}throw Error(w(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),bo(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Qi(e,t,r,l,n);case 3:e:{if(rc(t),e===null)throw Error(w(387));r=t.pendingProps,o=t.memoizedState,l=o.element,Ta(e,t),ol(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=xn(Error(w(423)),t),t=Ki(e,t,r,n,l);break e}else if(r!==l){l=xn(Error(w(424)),t),t=Ki(e,t,r,n,l);break e}else for(je=kt(t.stateNode.containerInfo.firstChild),_e=t,Q=!0,Fe=null,n=Pa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(gn(),r===l){t=st(e,t,n);break e}pe(e,t,r,n)}t=t.child}return t;case 5:return La(t),e===null&&Ao(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,s=l.children,Oo(r,l)?s=null:o!==null&&Oo(r,o)&&(t.flags|=32),nc(e,t),pe(e,t,s,n),t.child;case 6:return e===null&&Ao(t),null;case 13:return lc(e,t,n);case 4:return Ls(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=yn(t,null,r,n):pe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Hi(e,t,r,l,n);case 7:return pe(e,t,t.pendingProps,n),t.child;case 8:return pe(e,t,t.pendingProps.children,n),t.child;case 12:return pe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,s=l.value,b(rl,r._currentValue),r._currentValue=s,o!==null)if(Ve(o.value,s)){if(o.children===l.children&&!we.current){t=st(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){s=o.child;for(var a=u.firstContext;a!==null;){if(a.context===r){if(o.tag===1){a=nt(-1,n&-n),a.tag=2;var f=o.updateQueue;if(f!==null){f=f.shared;var g=f.pending;g===null?a.next=a:(a.next=g.next,g.next=a),f.pending=a}}o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),Fo(o.return,n,t),u.lanes|=n;break}a=a.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(w(341));s.lanes|=n,u=s.alternate,u!==null&&(u.lanes|=n),Fo(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}pe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,fn(t,n),l=Ie(l),r=r(l),t.flags|=1,pe(e,t,r,n),t.child;case 14:return r=t.type,l=Re(r,t.pendingProps),l=Re(r.type,l),Wi(e,t,r,l,n);case 15:return ec(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Ur(e,t),t.tag=1,ke(r)?(e=!0,el(t)):e=!1,fn(t,n),Ga(t,r,l),Uo(t,r,l,n),Bo(null,t,r,!0,e,n);case 19:return oc(e,t,n);case 22:return tc(e,t,n)}throw Error(w(156,t.tag))};function kc(e,t){return Yu(e,t)}function qf(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Le(e,t,n,r){return new qf(e,t,n,r)}function Qs(e){return e=e.prototype,!(!e||!e.isReactComponent)}function ep(e){if(typeof e=="function")return Qs(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ds)return 11;if(e===fs)return 14}return 2}function _t(e,t){var n=e.alternate;return n===null?(n=Le(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Br(e,t,n,r,l,o){var s=2;if(r=e,typeof e=="function")Qs(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Xt:return Ft(n.children,l,o,t);case cs:s=8,l|=8;break;case ao:return e=Le(12,n,t,l|2),e.elementType=ao,e.lanes=o,e;case co:return e=Le(13,n,t,l),e.elementType=co,e.lanes=o,e;case fo:return e=Le(19,n,t,l),e.elementType=fo,e.lanes=o,e;case Lu:return Cl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case zu:s=10;break e;case Tu:s=9;break e;case ds:s=11;break e;case fs:s=14;break e;case ft:s=16,r=null;break e}throw Error(w(130,e==null?e:typeof e,""))}return t=Le(s,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Ft(e,t,n,r){return e=Le(7,e,r,t),e.lanes=n,e}function Cl(e,t,n,r){return e=Le(22,e,r,t),e.elementType=Lu,e.lanes=n,e.stateNode={isHidden:!1},e}function lo(e,t,n){return e=Le(6,e,null,t),e.lanes=n,e}function oo(e,t,n){return t=Le(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function tp(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=$l(0),this.expirationTimes=$l(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$l(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Ks(e,t,n,r,l,o,s,u,a){return e=new tp(e,t,n,u,a),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Le(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ts(o),e}function np(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(_c)}catch(e){console.error(e)}}_c(),_u.exports=Ee;var ip=_u.exports,ou=ip;io.createRoot=ou.createRoot,io.hydrateRoot=ou.hydrateRoot;/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cc=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const up=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ap=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,r)=>r?r.toUpperCase():n.toLowerCase());/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const su=e=>{const t=ap(e);return t.charAt(0).toUpperCase()+t.slice(1)};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var cp={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dp=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0;return!1};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fp=O.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:l="",children:o,iconNode:s,...u},a)=>O.createElement("svg",{ref:a,...cp,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:Cc("lucide",l),...!o&&!dp(u)&&{"aria-hidden":"true"},...u},[...s.map(([f,g])=>O.createElement(f,g)),...Array.isArray(o)?o:[o]]));/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A=(e,t)=>{const n=O.forwardRef(({className:r,...l},o)=>O.createElement(fp,{ref:o,iconNode:t,className:Cc(`lucide-${up(su(e))}`,`lucide-${e}`,r),...l}));return n.displayName=su(e),n};/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pp=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Ec=A("arrow-right",pp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mp=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],hp=A("bot",mp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gp=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],ts=A("check",gp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yp=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],iu=A("chevron-down",yp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const vp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],ml=A("circle-check",vp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],wp=A("circle-x",xp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const kp=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],Pc=A("cloud",kp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Np=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],Sp=A("copy",Np);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jp=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],_p=A("cpu",jp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cp=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Ep=A("download",Cp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pp=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],uu=A("external-link",Pp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zp=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]],Tp=A("file-code",zp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lp=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],Op=A("info",Lp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ip=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],Mp=A("key",Ip);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dp=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],au=A("layout-dashboard",Dp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rp=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Ap=A("loader-circle",Rp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fp=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],$p=A("lock",Fp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Up=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],Vp=A("log-out",Up);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const bp=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],Bp=A("menu",bp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hp=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Wp=A("message-square",Hp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qp=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],Kp=A("play",Qp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yp=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],cu=A("plus",Yp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jp=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],du=A("search",Jp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xp=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],Gp=A("send",Xp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zp=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],zc=A("server",Zp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qp=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Tc=A("shield-check",qp);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const em=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],tm=A("square",em);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nm=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],rm=A("terminal",nm);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lm=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],fu=A("trash-2",lm);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const om=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],sm=A("triangle-alert",om);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const im=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],Lc=A("upload",im);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const um=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],am=A("user",um);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cm=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],dm=A("users",cm);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fm=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],ns=A("x",fm);/** + * @license lucide-react v0.563.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pm=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],mm=A("zap",pm);function Oc(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var l=e.length;for(t=0;t{try{const _=await L("/admin/queue/status");if(_.ok){const M=await _.json();D(M)}}catch(_){console.error("Failed to fetch queue status:",_)}};O.useEffect(()=>{Z();const _=setInterval(Z,5e3);return()=>clearInterval(_)},[]);const Je=async()=>{if(a.trim()){x(!0);try{const _=await L("/admin/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a.trim()})});if(_.ok)n("success","API 密钥添加成功"),f(""),o(!1),t();else{const M=await _.json();n("error",M.detail||"Failed to add")}}catch{n("error","网络错误")}finally{x(!1)}}},Xe=async _=>{if(confirm("确定要删除此 API 密钥吗?"))try{(await L(`/admin/keys/${encodeURIComponent(_)}`,{method:"DELETE"})).ok?(n("success","Deleted successfully"),t()):n("error","Delete failed")}catch{n("error","Network error")}},Lt=async()=>{if(!g.password||!g.email&&!g.mobile){n("error","Password and Email/Mobile are required");return}x(!0);try{const _=await L("/admin/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)});if(_.ok)n("success","账号添加成功"),m({email:"",mobile:"",password:""}),u(!1),t();else{const M=await _.json();n("error",M.detail||"Failed to add")}}catch{n("error","网络错误")}finally{x(!1)}},Qt=async _=>{if(confirm("确定要删除此账号吗?"))try{(await L(`/admin/accounts/${encodeURIComponent(_)}`,{method:"DELETE"})).ok?(n("success","Deleted successfully"),t()):n("error","Delete failed")}catch{n("error","Network error")}},ut=async _=>{N(M=>({...M,[_]:!0}));try{const F=await(await L("/admin/accounts/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identifier:_})})).json();n(F.valid?"success":"error",`${_}: ${F.message}`),t()}catch(M){n("error","Validation failed: "+M.message)}finally{N(M=>({...M,[_]:!1}))}},at=async()=>{if(!confirm("校验所有账号?这可能需要一些时间。"))return;const _=e.accounts||[];if(_.length===0)return;d(!0),P({current:0,total:_.length,results:[]});let M=0;const F=[];for(let re=0;re<_.length;re++){const be=_[re],Ge=be.email||be.mobile;try{const Be=await(await L("/admin/accounts/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identifier:Ge})})).json();F.push({id:Ge,success:Be.valid,message:Be.message}),Be.valid&&M++}catch(ct){F.push({id:Ge,success:!1,message:ct.message})}P({current:re+1,total:_.length,results:[...F]})}n("success",`Completed: ${M}/${_.length} valid`),t(),d(!1)},E=async _=>{p(M=>({...M,[_]:!0}));try{const F=await(await L("/admin/accounts/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identifier:_})})).json();n(F.success?"success":"error",`${_}: ${F.success?`Success (${F.response_time}ms)`:F.message}`),t()}catch(M){n("error","Test failed: "+M.message)}finally{p(M=>({...M,[_]:!1}))}},S=async()=>{if(!confirm("测试所有账号的 API 连通性?"))return;const _=e.accounts||[];if(_.length===0)return;j(!0),P({current:0,total:_.length,results:[]});let M=0;const F=[];for(let re=0;re<_.length;re++){const be=_[re],Ge=be.email||be.mobile;try{const Be=await(await L("/admin/accounts/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identifier:Ge})})).json();F.push({id:Ge,success:Be.success,message:Be.message,time:Be.response_time}),Be.success&&M++}catch(ct){F.push({id:Ge,success:!1,message:ct.message})}P({current:re+1,total:_.length,results:[...F]})}n("success",`Completed: ${M}/${_.length} available`),t(),j(!1)};return i.jsxs("div",{className:"space-y-6",children:[k&&i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[i.jsxs("div",{className:"bg-card border border-border rounded-xl p-4 flex flex-col justify-between shadow-sm relative overflow-hidden group",children:[i.jsx("div",{className:"absolute right-0 top-0 p-4 opacity-5 group-hover:opacity-10 transition-opacity",children:i.jsx(ml,{className:"w-16 h-16"})}),i.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-widest",children:"可用"}),i.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[i.jsx("span",{className:"text-3xl font-bold text-foreground",children:k.available}),i.jsx("span",{className:"text-xs text-muted-foreground",children:"个账号"})]})]}),i.jsxs("div",{className:"bg-card border border-border rounded-xl p-4 flex flex-col justify-between shadow-sm relative overflow-hidden group",children:[i.jsx("div",{className:"absolute right-0 top-0 p-4 opacity-5 group-hover:opacity-10 transition-opacity",children:i.jsx(zc,{className:"w-16 h-16"})}),i.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-widest",children:"正在使用"}),i.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[i.jsx("span",{className:"text-3xl font-bold text-foreground",children:k.in_use}),i.jsx("span",{className:"text-xs text-muted-foreground",children:"线程"})]})]}),i.jsxs("div",{className:"bg-card border border-border rounded-xl p-4 flex flex-col justify-between shadow-sm relative overflow-hidden group",children:[i.jsx("div",{className:"absolute right-0 top-0 p-4 opacity-5 group-hover:opacity-10 transition-opacity",children:i.jsx(Tc,{className:"w-16 h-16"})}),i.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-widest",children:"账号池总数"}),i.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[i.jsx("span",{className:"text-3xl font-bold text-foreground",children:k.total}),i.jsx("span",{className:"text-xs text-muted-foreground",children:"个账号"})]})]})]}),i.jsxs("div",{className:"bg-card border border-border rounded-xl overflow-hidden shadow-sm",children:[i.jsxs("div",{className:"p-6 border-b border-border flex flex-col md:flex-row md:items-center justify-between gap-4",children:[i.jsxs("div",{children:[i.jsx("h2",{className:"text-lg font-semibold",children:"API 密钥"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"管理 API 访问密钥池"})]}),i.jsxs("button",{onClick:()=>o(!0),className:"flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors font-medium text-sm shadow-sm",children:[i.jsx(cu,{className:"w-4 h-4"}),"添加密钥"]})]}),i.jsx("div",{className:"divide-y divide-border",children:((I=e.keys)==null?void 0:I.length)>0?e.keys.map((_,M)=>i.jsxs("div",{className:"p-4 flex items-center justify-between hover:bg-muted/50 transition-colors group",children:[i.jsxs("div",{className:"font-mono text-sm bg-muted/50 px-3 py-1 rounded inline-block",children:[_.slice(0,16),"****"]}),i.jsx("button",{onClick:()=>Xe(_),className:"p-2 text-muted-foreground hover:text-destructive hover:bg-destructive/10 rounded-md transition-colors opacity-0 group-hover:opacity-100",children:i.jsx(fu,{className:"w-4 h-4"})})]},M)):i.jsx("div",{className:"p-8 text-center text-muted-foreground",children:"未找到 API 密钥"})})]}),i.jsxs("div",{className:"bg-card border border-border rounded-xl overflow-hidden shadow-sm",children:[i.jsxs("div",{className:"p-6 border-b border-border flex flex-col md:flex-row md:items-center justify-between gap-4",children:[i.jsxs("div",{children:[i.jsx("h2",{className:"text-lg font-semibold",children:"DeepSeek 账号"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"管理 DeepSeek 账号池"})]}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.jsxs("button",{onClick:S,disabled:y||T||!((V=e.accounts)!=null&&V.length),className:"flex items-center px-3 py-2 bg-secondary text-secondary-foreground rounded-lg hover:bg-secondary/80 transition-colors text-xs font-medium border border-border disabled:opacity-50",children:[y?i.jsx("span",{className:"animate-spin mr-2",children:"⟳"}):i.jsx(Kp,{className:"w-3 h-3 mr-2"}),"测试全部"]}),i.jsxs("button",{onClick:at,disabled:T||y||!((W=e.accounts)!=null&&W.length),className:"flex items-center px-3 py-2 bg-secondary text-secondary-foreground rounded-lg hover:bg-secondary/80 transition-colors text-xs font-medium border border-border disabled:opacity-50",children:[T?i.jsx("span",{className:"animate-spin mr-2",children:"⟳"}):i.jsx(ml,{className:"w-3 h-3 mr-2"}),"校验全部"]}),i.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors font-medium text-sm shadow-sm",children:[i.jsx(cu,{className:"w-4 h-4"}),"添加账号"]})]})]}),(y||T)&&C.total>0&&i.jsxs("div",{className:"p-4 border-b border-border bg-muted/30",children:[i.jsxs("div",{className:"flex items-center justify-between text-sm mb-2",children:[i.jsx("span",{className:"font-medium",children:y?"正在测试所有账号...":"正在校验所有账号..."}),i.jsxs("span",{className:"text-muted-foreground",children:[C.current," / ",C.total]})]}),i.jsx("div",{className:"w-full bg-muted rounded-full h-2 overflow-hidden mb-4",children:i.jsx("div",{className:"bg-primary h-full transition-all duration-300",style:{width:`${C.current/C.total*100}%`}})}),C.results.length>0&&i.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2 max-h-32 overflow-y-auto custom-scrollbar",children:C.results.map((_,M)=>i.jsxs("div",{className:ee("text-xs px-2 py-1 rounded border truncate",_.success?"bg-emerald-500/10 border-emerald-500/20 text-emerald-500":"bg-destructive/10 border-destructive/20 text-destructive"),children:[_.success?"✓":"✗"," ",_.id]},M))})]}),i.jsx("div",{className:"divide-y divide-border",children:((ye=e.accounts)==null?void 0:ye.length)>0?e.accounts.map((_,M)=>{const F=_.email||_.mobile;return i.jsxs("div",{className:"p-4 flex flex-col md:flex-row md:items-center justify-between gap-4 hover:bg-muted/50 transition-colors",children:[i.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[i.jsx("div",{className:ee("w-2 h-2 rounded-full shrink-0",_.has_token?"bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.5)]":"bg-amber-500")}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"font-medium truncate",children:F}),i.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground mt-0.5",children:[i.jsx("span",{children:_.has_token?"已建立会话":"需重新登录"}),_.token_preview&&i.jsx("span",{className:"font-mono bg-muted px-1.5 py-0.5 rounded text-[10px]",children:_.token_preview})]})]})]}),i.jsxs("div",{className:"flex items-center gap-2 self-start lg:self-auto ml-5 lg:ml-0",children:[i.jsx("button",{onClick:()=>E(F),disabled:c[F],className:"px-2 lg:px-3 py-1 lg:py-1.5 text-[10px] lg:text-xs font-medium border border-border rounded-md hover:bg-secondary transition-colors disabled:opacity-50",children:c[F]?"正在测试...":"测试"}),i.jsx("button",{onClick:()=>ut(F),disabled:v[F],className:"px-2 lg:px-3 py-1 lg:py-1.5 text-[10px] lg:text-xs font-medium border border-border rounded-md hover:bg-secondary transition-colors disabled:opacity-50",children:v[F]?"正在校验...":"校验"}),i.jsx("button",{onClick:()=>Qt(F),className:"p-1 lg:p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 rounded-md transition-colors",children:i.jsx(fu,{className:"w-3.5 h-3.5 lg:w-4 h-4"})})]})]},M)}):i.jsx("div",{className:"p-8 text-center text-muted-foreground",children:"未找到任何账号"})})]}),l&&i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4 animate-in fade-in",children:i.jsxs("div",{className:"bg-card w-full max-w-md rounded-xl border border-border shadow-2xl overflow-hidden animate-in zoom-in-95",children:[i.jsxs("div",{className:"p-4 border-b border-border flex justify-between items-center",children:[i.jsx("h3",{className:"font-semibold",children:"添加 API 密钥"}),i.jsx("button",{onClick:()=>o(!1),className:"text-muted-foreground hover:text-foreground",children:i.jsx(ns,{className:"w-5 h-5"})})]}),i.jsxs("div",{className:"p-6 space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium mb-1.5",children:"新密钥值"}),i.jsx("input",{type:"text",className:"input-field bg-[#09090b]",placeholder:"输入自定义 API 密钥",value:a,onChange:_=>f(_.target.value),autoFocus:!0})]}),i.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[i.jsx("button",{onClick:()=>o(!1),className:"px-4 py-2 rounded-lg border border-border hover:bg-secondary transition-colors text-sm font-medium",children:"取消"}),i.jsx("button",{onClick:Je,disabled:h,className:"px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors text-sm font-medium disabled:opacity-50",children:h?"添加中...":"添加密钥"})]})]})]})}),s&&i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4 animate-in fade-in",children:i.jsxs("div",{className:"bg-card w-full max-w-md rounded-xl border border-border shadow-2xl overflow-hidden animate-in zoom-in-95",children:[i.jsxs("div",{className:"p-4 border-b border-border flex justify-between items-center",children:[i.jsx("h3",{className:"font-semibold",children:"添加 DeepSeek 账号"}),i.jsx("button",{onClick:()=>u(!1),className:"text-muted-foreground hover:text-foreground",children:i.jsx(ns,{className:"w-5 h-5"})})]}),i.jsxs("div",{className:"p-6 space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium mb-1.5",children:"邮箱 (可选)"}),i.jsx("input",{type:"email",className:"input-field",placeholder:"user@example.com",value:g.email,onChange:_=>m({...g,email:_.target.value})})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium mb-1.5",children:"手机号 (可选)"}),i.jsx("input",{type:"text",className:"input-field",placeholder:"+86...",value:g.mobile,onChange:_=>m({...g,mobile:_.target.value})})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium mb-1.5",children:["密码 ",i.jsx("span",{className:"text-destructive",children:"*"})]}),i.jsx("input",{type:"password",className:"input-field bg-[#09090b]",placeholder:"账号密码",value:g.password,onChange:_=>m({...g,password:_.target.value})})]}),i.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[i.jsx("button",{onClick:()=>u(!1),className:"px-4 py-2 rounded-lg border border-border hover:bg-secondary transition-colors text-sm font-medium",children:"取消"}),i.jsx("button",{onClick:Lt,disabled:h,className:"px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors text-sm font-medium disabled:opacity-50",children:h?"添加中...":"添加账号"})]})]})]})})]})}const gm=[{id:"deepseek-chat",name:"deepseek-chat",icon:Wp,desc:"非思考模型",color:"text-amber-500"},{id:"deepseek-reasoner",name:"deepseek-reasoner",icon:_p,desc:"思考模型",color:"text-amber-600"},{id:"deepseek-chat-search",name:"deepseek-chat-search",icon:du,desc:"非思考模型 (带搜索)",color:"text-cyan-500"},{id:"deepseek-reasoner-search",name:"deepseek-reasoner-search",icon:du,desc:"思考模型 (带搜索)",color:"text-cyan-600"}];function ym({config:e,onMessage:t,authFetch:n}){var Qt,ut,at,E;const[r,l]=O.useState("deepseek-chat"),[o,s]=O.useState("Hello, please introduce yourself in one sentence."),[u,a]=O.useState(""),[f,g]=O.useState(""),[m,h]=O.useState(null),[x,v]=O.useState(!1),[N,T]=O.useState(""),[d,c]=O.useState(""),[p,y]=O.useState(!1),j=O.useRef(null),[C,P]=O.useState(!1),[k,D]=O.useState(!1),L=n||fetch,Z=e.accounts||[],Je=()=>{j.current&&(j.current.abort(),j.current=null),v(!1),y(!1)},Xe=async()=>{var S,I,V,W;if(!x){v(!0),y(!0),h(null),T(""),c(""),j.current=new AbortController;try{const ye=u||((S=e.keys)==null?void 0:S[0])||"";if(!ye){t("error","请提供 API 密钥"),v(!1),y(!1);return}const _=await fetch("/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${ye}`},body:JSON.stringify({model:r,messages:[{role:"user",content:o}],stream:!0}),signal:j.current.signal});if(!_.ok){const be=await _.json();h({success:!1,error:((I=be.error)==null?void 0:I.message)||"请求失败"}),t("error",((V=be.error)==null?void 0:V.message)||"请求失败"),v(!1),y(!1);return}h({success:!0,status_code:_.status});const M=_.body.getReader(),F=new TextDecoder;let re="";for(;;){const{done:be,value:Ge}=await M.read();if(be)break;re+=F.decode(Ge,{stream:!0});const ct=re.split(` +`);re=ct.pop()||"";for(const Be of ct){const Ll=Be.trim();if(!Ll||!Ll.startsWith("data: "))continue;const Ol=Ll.slice(6);if(Ol!=="[DONE]")try{const pr=JSON.parse(Ol);console.log("[ApiTester] Parsed JSON:",pr);const mr=(W=pr.choices)==null?void 0:W[0];if(mr!=null&&mr.delta){const Kt=mr.delta;console.log("[ApiTester] Delta:",Kt),Kt.reasoning_content&&c(Il=>Il+Kt.reasoning_content),Kt.content&&(console.log("[ApiTester] Content:",Kt.content),T(Il=>Il+Kt.content))}}catch(pr){console.error("Invalid JSON hunk:",Ol,pr)}}}}catch(ye){ye.name==="AbortError"?t("info","已停止生成"):(t("error","网络错误: "+ye.message),h({error:ye.message,success:!1}))}finally{v(!1),y(!1),j.current=null}}},Lt=async()=>{if(f){v(!0),h(null);try{const S=await L("/admin/accounts/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identifier:f,model:r,message:o})}),I=await S.json();h({success:I.success,status_code:S.status,response:I,account:f}),I.success?t("success",`${f}: 测试成功 (${I.response_time}ms)`):t("error",`${f}: ${I.message}`)}catch(S){t("error","网络错误: "+S.message),h({error:S.message})}finally{v(!1)}return}Xe()};return i.jsxs("div",{className:"flex flex-col lg:grid lg:grid-cols-12 gap-6 h-[calc(100vh-140px)]",children:[i.jsx("div",{className:ee("lg:col-span-3 flex flex-col transition-all duration-300 ease-in-out z-20",k?"h-auto":"h-14 lg:h-full"),children:i.jsxs("div",{className:"bg-card border border-border rounded-xl flex flex-col h-full shadow-sm",children:[i.jsxs("button",{onClick:()=>D(!k),className:"lg:hidden flex items-center justify-between p-4 w-full bg-muted/20 hover:bg-muted/30 transition-colors",children:[i.jsxs("div",{className:"flex items-center gap-2.5 font-medium text-sm text-foreground",children:[i.jsx("div",{className:"p-1.5 rounded-md bg-transparent text-foreground",children:i.jsx(rm,{className:"w-4 h-4"})}),i.jsx("span",{children:"配置"})]}),i.jsx("div",{className:ee("transition-transform duration-300 text-muted-foreground",k?"rotate-180":""),children:i.jsx(iu,{className:"w-4 h-4"})})]}),i.jsxs("div",{className:ee("p-4 space-y-6 overflow-y-auto custom-scrollbar flex-1",!k&&"hidden lg:block"),children:[i.jsxs("div",{className:"space-y-3",children:[i.jsx("label",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider ml-0.5",children:"模型"}),i.jsx("div",{className:"grid grid-cols-1 gap-2",children:gm.map(S=>{const I=S.icon;return i.jsxs("button",{onClick:()=>l(S.id),className:ee("group relative flex items-start gap-3 p-3 rounded-lg border text-left transition-all duration-200",r===S.id?"bg-secondary border-primary/50 shadow-sm":"bg-transparent border-transparent hover:bg-muted"),children:[i.jsx("div",{className:ee("p-1.5 rounded-md shrink-0 transition-colors",r===S.id?S.color:"text-muted-foreground group-hover:text-foreground"),children:i.jsx(I,{className:"w-4 h-4"})}),i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsx("div",{className:ee("font-medium text-sm",r===S.id?"text-foreground":"text-foreground/80"),children:S.name}),i.jsx("div",{className:"text-[11px] text-muted-foreground mt-0.5",children:S.desc})]}),r===S.id&&i.jsx("div",{className:ee("absolute top-3 right-3",S.color),children:i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-current"})})]},S.id)})})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx("label",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider ml-0.5",children:"账号策略"}),i.jsxs("div",{className:"relative",children:[i.jsxs("select",{className:"w-full h-10 pl-3 pr-8 bg-secondary border border-border rounded-lg text-sm appearance-none focus:outline-none focus:ring-1 focus:ring-ring focus:border-ring transition-all cursor-pointer hover:bg-muted",value:f,onChange:S=>g(S.target.value),children:[i.jsx("option",{value:"",className:"bg-popover text-popover-foreground",children:"🎲 随机切换 (支持流式预览)"}),Z.map((S,I)=>i.jsxs("option",{value:S.email||S.mobile,className:"bg-popover text-popover-foreground",children:["👤 ",S.email||S.mobile]},I))]}),i.jsx(iu,{className:"absolute right-2.5 top-3 w-4 h-4 text-muted-foreground pointer-events-none"})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx("label",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider ml-0.5",children:"API 密钥 (可选)"}),i.jsx("input",{type:"password",className:"w-full h-10 px-3 bg-muted/30 border border-border rounded-lg text-sm font-mono placeholder:text-muted-foreground/40 focus:outline-none focus:ring-1 focus:ring-ring focus:border-ring transition-all",placeholder:(Qt=e.keys)!=null&&Qt[0]?`默认: ...${e.keys[0].slice(-6)}`:"输入自定义密钥",value:u,onChange:S=>a(S.target.value)})]})]})]})}),i.jsxs("div",{className:"lg:col-span-9 flex flex-col bg-card border border-border rounded-xl shadow-sm overflow-hidden min-h-0 flex-1 relative",children:[i.jsxs("div",{className:"flex-1 overflow-y-auto p-4 lg:p-6 space-y-8 custom-scrollbar scroll-smooth",children:[i.jsxs("div",{className:"flex gap-4 max-w-4xl mx-auto flex-row-reverse group",children:[i.jsx("div",{className:"w-8 h-8 rounded-lg bg-secondary flex items-center justify-center shrink-0 border border-border",children:i.jsx(am,{className:"w-4 h-4 text-muted-foreground"})}),i.jsx("div",{className:"space-y-1 max-w-[85%] lg:max-w-[75%]",children:i.jsx("div",{className:"bg-primary text-primary-foreground rounded-2xl rounded-tr-sm px-5 py-3 text-sm leading-relaxed shadow-sm",children:o})})]}),(m||p)&&i.jsxs("div",{className:"flex gap-4 max-w-4xl mx-auto animate-in fade-in slide-in-from-bottom-2 duration-300",children:[i.jsx("div",{className:ee("w-8 h-8 rounded-lg flex items-center justify-center shrink-0 border border-border",(m==null?void 0:m.success)!==!1?"bg-muted":"bg-destructive/10 border-destructive/20"),children:i.jsx(hp,{className:ee("w-4 h-4",(m==null?void 0:m.success)!==!1?"text-foreground":"text-destructive")})}),i.jsxs("div",{className:"space-y-3 flex-1 min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"font-semibold text-sm text-foreground",children:"DeepSeek"}),m&&i.jsx("span",{className:ee("text-[10px] px-1.5 py-0.5 rounded-sm border uppercase font-medium tracking-wider",m.success?"border-emerald-500/20 text-emerald-500 bg-emerald-500/10":"border-destructive/20 text-destructive bg-destructive/10"),children:m.status_code||"错误"})]}),(d||((ut=m==null?void 0:m.response)==null?void 0:ut.thinking))&&i.jsxs("div",{className:"text-xs bg-secondary/50 border border-border rounded-lg p-3 space-y-1.5",children:[i.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[i.jsx(mm,{className:"w-3.5 h-3.5"}),i.jsx("span",{className:"font-medium",children:"思维链过程"})]}),i.jsx("div",{className:"whitespace-pre-wrap leading-relaxed text-muted-foreground font-mono text-[11px] max-h-60 overflow-y-auto custom-scrollbar pl-5 border-l-2 border-border/50",children:d||((at=m==null?void 0:m.response)==null?void 0:at.thinking)})]}),i.jsxs("div",{className:"text-sm leading-7 text-foreground whitespace-pre-wrap",children:[f?((E=m==null?void 0:m.response)==null?void 0:E.message)||i.jsx("span",{className:"text-muted-foreground italic",children:"正在生成响应..."}):N||(m==null?void 0:m.error)&&i.jsx("span",{className:"text-destructive font-medium",children:m.error}),p&&i.jsx("span",{className:"inline-block w-1.5 h-4 bg-primary ml-1 align-middle animate-pulse"})]})]})]})]}),i.jsxs("div",{className:"p-4 lg:p-6 border-t border-border bg-card",children:[i.jsxs("div",{className:"max-w-4xl mx-auto relative group",children:[i.jsx("textarea",{className:"w-full bg-[#09090b] border border-border rounded-xl pl-4 pr-12 py-3 text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all resize-none custom-scrollbar placeholder:text-muted-foreground/50 text-foreground shadow-inner",placeholder:"输入消息...",rows:1,style:{minHeight:"52px"},value:o,onChange:S=>s(S.target.value),onKeyDown:S=>{S.key==="Enter"&&!S.shiftKey&&(S.preventDefault(),Lt())}}),i.jsx("div",{className:"absolute right-2 bottom-2",children:x&&p?i.jsx("button",{onClick:Je,className:"p-2 text-muted-foreground hover:text-destructive transition-colors",children:i.jsx(tm,{className:"w-4 h-4 fill-current"})}):i.jsx("button",{onClick:Lt,disabled:x||!o.trim(),className:"p-2 text-primary hover:text-primary/80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:x?i.jsx(Ap,{className:"w-4 h-4 animate-spin"}):i.jsx(Gp,{className:"w-4 h-4"})})})]}),i.jsx("div",{className:"max-w-4xl mx-auto mt-3 flex justify-center",children:i.jsx("span",{className:"text-[10px] text-muted-foreground/40 font-medium",children:"DeepSeek 管理员界面"})})]})]})]})}const pu={full:{name:"全量配置模板",desc:"包含密钥、账号及模型映射",config:{keys:["your-api-key-1","your-api-key-2"],accounts:[{email:"user1@example.com",password:"password1",token:""},{email:"user2@example.com",password:"password2",token:""},{mobile:"+8613800138001",password:"password3",token:""}],claude_model_mapping:{fast:"deepseek-chat",slow:"deepseek-reasoner"}}},email_only:{name:"仅邮箱账号",desc:"批量导入邮箱格式账号",config:{keys:["your-api-key"],accounts:[{email:"account1@example.com",password:"pass1",token:""},{email:"account2@example.com",password:"pass2",token:""},{email:"account3@example.com",password:"pass3",token:""}]}},mobile_only:{name:"仅手机号账号",desc:"批量导入手机号格式账号",config:{keys:["your-api-key"],accounts:[{mobile:"+8613800000001",password:"pass1",token:""},{mobile:"+8613800000002",password:"pass2",token:""},{mobile:"+8613800000003",password:"pass3",token:""}]}},keys_only:{name:"仅 API 密钥",desc:"仅添加 API 访问密钥",config:{keys:["key-1","key-2","key-3"]}}};function vm({onRefresh:e,onMessage:t,authFetch:n}){const[r,l]=O.useState(""),[o,s]=O.useState(!1),[u,a]=O.useState(null),[f,g]=O.useState(!1),m=n||fetch,h=async()=>{if(!r.trim()){t("error","请输入 JSON 配置内容");return}let T;try{T=JSON.parse(r)}catch{t("error","无效的 JSON 格式");return}s(!0),a(null);try{const d=await m("/admin/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(T)}),c=await d.json();d.ok?(a(c),t("success",`导入成功: ${c.imported_keys} 个密钥, ${c.imported_accounts} 个账号`),e()):t("error",c.detail||"导入失败")}catch{t("error","网络错误")}finally{s(!1)}},x=T=>{const d=pu[T];d&&(l(JSON.stringify(d.config,null,2)),t("info",`已加载模板: ${d.name}`))},v=async()=>{try{const T=await m("/admin/export");if(T.ok){const d=await T.json();l(JSON.stringify(JSON.parse(d.json),null,2)),t("success","当前配置已加载")}}catch{t("error","获取配置失败")}},N=async()=>{try{const T=await m("/admin/export");if(T.ok){const d=await T.json();await navigator.clipboard.writeText(d.base64),g(!0),setTimeout(()=>g(!1),2e3),t("success","Base64 配置已复制到剪贴板")}}catch{t("error","复制失败")}};return i.jsxs("div",{className:"flex flex-col lg:grid lg:grid-cols-3 gap-6 lg:h-[calc(100vh-140px)]",children:[i.jsxs("div",{className:"md:col-span-1 space-y-4",children:[i.jsxs("div",{className:"bg-card border border-border rounded-xl p-5 shadow-sm",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2 mb-4",children:[i.jsx(Tp,{className:"w-4 h-4 text-primary"}),"快速模板"]}),i.jsx("div",{className:"space-y-3",children:Object.entries(pu).map(([T,d])=>i.jsxs("button",{onClick:()=>x(T),className:"w-full text-left p-3 rounded-lg border border-border bg-secondary/20 hover:bg-secondary/50 hover:border-primary/50 transition-all custom-focus group",children:[i.jsx("div",{className:"font-medium text-sm group-hover:text-primary transition-colors",children:d.name}),i.jsx("div",{className:"text-xs text-muted-foreground mt-0.5",children:d.desc})]},T))})]}),i.jsxs("div",{className:"bg-linear-to-br from-primary/10 to-transparent border border-primary/20 rounded-xl p-5 shadow-sm",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2 mb-2 text-primary",children:[i.jsx(Ep,{className:"w-4 h-4"}),"数据导出"]}),i.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"获取配置的 Base64 字符串,用于 Vercel 环境变量。"}),i.jsxs("button",{onClick:N,className:"w-full flex items-center justify-center gap-2 py-2.5 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all font-medium text-sm shadow-sm",children:[f?i.jsx(ts,{className:"w-4 h-4"}):i.jsx(Sp,{className:"w-4 h-4"}),f?"已复制":"复制 Base64 配置"]}),i.jsxs("p",{className:"text-[10px] text-muted-foreground mt-2 text-center",children:["变量名: ",i.jsx("code",{className:"bg-background px-1 py-0.5 rounded border border-border",children:"DS2API_CONFIG_JSON"})]})]})]}),i.jsxs("div",{className:"lg:col-span-2 flex flex-col bg-card border border-border rounded-xl shadow-sm overflow-hidden min-h-[400px] lg:h-full",children:[i.jsxs("div",{className:"p-4 border-b border-border flex items-center justify-between bg-muted/20",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2",children:[i.jsx(Lc,{className:"w-4 h-4 text-primary"}),"JSON 编辑器"]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx("button",{onClick:v,className:"px-3 py-1.5 bg-secondary text-secondary-foreground rounded-lg hover:bg-secondary/80 transition-colors text-xs font-medium border border-border",children:"加载当前配置"}),i.jsx("button",{onClick:h,disabled:o,className:"px-3 py-1.5 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-colors text-xs font-medium disabled:opacity-50",children:o?"正在导入...":"应用配置"})]})]}),i.jsx("div",{className:"flex-1 relative min-h-[400px]",children:i.jsx("textarea",{className:"absolute inset-0 w-full h-full p-4 font-mono text-sm bg-[#09090b] text-foreground resize-none focus:outline-none custom-scrollbar",value:r,onChange:T=>l(T.target.value),placeholder:`{ + "keys": ["your-api-key"], + "accounts": [ + {"email": "...", "password": "...", "token": ""} + ] +}`,spellCheck:!1})}),u&&i.jsx("div",{className:ee("p-4 border-t",u.imported_keys||u.imported_accounts?"bg-emerald-500/10 border-emerald-500/20":"bg-destructive/10 border-destructive/20"),children:i.jsxs("div",{className:"flex items-start gap-3",children:[u.imported_keys||u.imported_accounts?i.jsx(ts,{className:"w-5 h-5 text-emerald-500 mt-0.5"}):i.jsx(sm,{className:"w-5 h-5 text-destructive mt-0.5"}),i.jsxs("div",{children:[i.jsx("h4",{className:ee("font-medium",u.imported_keys||u.imported_accounts?"text-emerald-500":"text-destructive"),children:"导入操作已完成"}),i.jsxs("p",{className:"text-sm opacity-80 mt-1",children:["成功导入了 ",u.imported_keys," 个 API 密钥,并更新了 ",u.imported_accounts," 个账号。"]})]})]})})]})]})}function xm({onMessage:e,authFetch:t}){const[n,r]=O.useState(""),[l,o]=O.useState(""),[s,u]=O.useState(""),[a,f]=O.useState(!1),[g,m]=O.useState(null),[h,x]=O.useState(null),v=t||fetch;O.useEffect(()=>{(async()=>{try{const d=await v("/admin/vercel/config");if(d.ok){const c=await d.json();x(c),c.project_id&&o(c.project_id),c.team_id&&u(c.team_id)}}catch(d){console.error("Failed to load preconfig:",d)}})()},[]);const N=async()=>{if(!(h!=null&&h.has_token&&!n?"__USE_PRECONFIG__":n)&&!(h!=null&&h.has_token)){e("error","需要 Vercel 访问令牌");return}if(!l){e("error","需要项目 ID");return}f(!0),m(null);try{const d=await v("/admin/vercel/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({vercel_token:n,project_id:l,team_id:s||void 0})}),c=await d.json();d.ok?(m({...c,success:!0}),e("success",c.message)):(m({...c,success:!1}),e("error",c.detail||"同步失败"))}catch{e("error","网络错误")}finally{f(!1)}};return i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8 max-w-5xl mx-auto h-[calc(100vh-140px)]",children:[i.jsxs("div",{className:"bg-card border border-border rounded-xl shadow-sm p-6 space-y-6",children:[i.jsxs("div",{className:"border-b border-border pb-6",children:[i.jsxs("h2",{className:"text-xl font-semibold flex items-center gap-2",children:[i.jsx(Pc,{className:"w-6 h-6 text-primary"}),"Vercel 部署"]}),i.jsx("p",{className:"text-muted-foreground text-sm mt-1",children:"将当前密钥和账号配置直接同步到 Vercel 环境变量中。"})]}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsxs("label",{className:"text-sm font-medium flex items-center justify-between",children:["Vercel 访问令牌",i.jsxs("a",{href:"https://vercel.com/account/tokens",target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline flex items-center gap-1",children:["获取令牌 ",i.jsx(uu,{className:"w-3 h-3"})]})]}),i.jsxs("div",{className:"relative",children:[i.jsx("input",{type:"password",className:"w-full h-10 px-3 bg-background border border-border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring transition-all pr-10",placeholder:h!=null&&h.has_token?"正在使用预配置的令牌":"输入 Vercel 访问令牌",value:n,onChange:T=>r(T.target.value)}),(h==null?void 0:h.has_token)&&!n&&i.jsx("div",{className:"absolute right-3 top-2.5 text-emerald-500",children:i.jsx(ml,{className:"w-5 h-5"})})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx("label",{className:"text-sm font-medium",children:"项目 ID"}),i.jsx("input",{type:"text",className:"w-full h-10 px-3 bg-background border border-border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring transition-all",placeholder:"prj_xxxxxxxxxxxx or Project Name",value:l,onChange:T=>o(T.target.value)}),i.jsx("p",{className:"text-xs text-muted-foreground",children:"可在项目设置 (Project Settings) → 常规 (General) 中找到"})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsxs("label",{className:"text-sm font-medium flex items-center gap-2",children:["团队 ID ",i.jsx("span",{className:"text-xs text-muted-foreground font-normal",children:"(可选)"})]}),i.jsx("input",{type:"text",className:"w-full h-10 px-3 bg-background border border-border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring transition-all",placeholder:"team_xxxxxxxxxxxx",value:s,onChange:T=>u(T.target.value)})]})]}),i.jsxs("div",{className:"pt-4",children:[i.jsx("button",{onClick:N,disabled:a,className:"w-full flex items-center justify-center gap-2 py-3 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition-all font-medium text-sm shadow-sm hover:shadow-md disabled:opacity-50 disabled:shadow-none",children:a?i.jsxs("span",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin"}),"正在同步..."]}):i.jsxs("span",{className:"flex items-center gap-2",children:["同步并重新部署 ",i.jsx(Ec,{className:"w-4 h-4"})]})}),i.jsx("p",{className:"text-xs text-center text-muted-foreground mt-4",children:"这将触发 Vercel 的重新部署,大约需要 30-60 秒。"})]})]}),i.jsxs("div",{className:"space-y-6",children:[g&&i.jsx("div",{className:`p-6 rounded-xl border ${g.success?"bg-emerald-500/10 border-emerald-500/20":"bg-destructive/10 border-destructive/20"} animate-in fade-in slide-in-from-right-4`,children:i.jsxs("div",{className:"flex items-start gap-4",children:[g.success?i.jsx("div",{className:"p-2 bg-emerald-500 text-white rounded-full shadow-lg shadow-emerald-500/30",children:i.jsx(ml,{className:"w-6 h-6"})}):i.jsx("div",{className:"p-2 bg-destructive text-white rounded-full shadow-lg shadow-destructive/30",children:i.jsx(wp,{className:"w-6 h-6"})}),i.jsxs("div",{className:"space-y-1",children:[i.jsx("h3",{className:`font-semibold text-lg ${g.success?"text-emerald-500":"text-destructive"}`,children:g.success?"同步成功":"同步失败"}),i.jsx("p",{className:"text-sm opacity-90",children:g.message}),g.deployment_url&&i.jsx("div",{className:"pt-3 mt-3 border-t border-emerald-500/20",children:i.jsxs("a",{href:`https://${g.deployment_url}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-sm font-medium hover:underline",children:["访问部署地址 ",i.jsx(uu,{className:"w-3 h-3"})]})})]})]})}),i.jsxs("div",{className:"bg-secondary/20 border border-border rounded-xl p-6",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2 mb-4",children:[i.jsx(Op,{className:"w-5 h-5 text-primary"}),"工作原理"]}),i.jsxs("ul",{className:"space-y-4",children:[i.jsxs("li",{className:"flex gap-3",children:[i.jsx("span",{className:"shrink-0 w-6 h-6 rounded-full bg-background border border-border flex items-center justify-center text-xs font-bold text-muted-foreground",children:"1"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"当前配置 (密钥和账号) 被导出为 JSON 字符串。"})]}),i.jsxs("li",{className:"flex gap-3",children:[i.jsx("span",{className:"shrink-0 w-6 h-6 rounded-full bg-background border border-border flex items-center justify-center text-xs font-bold text-muted-foreground",children:"2"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"JSON 被编码为 Base64 以确保格式兼容性。"})]}),i.jsxs("li",{className:"flex gap-3",children:[i.jsx("span",{className:"shrink-0 w-6 h-6 rounded-full bg-background border border-border flex items-center justify-center text-xs font-bold text-muted-foreground",children:"3"}),i.jsxs("p",{className:"text-sm text-muted-foreground",children:["更新 Vercel 项目中的 ",i.jsx("code",{className:"bg-background px-1 py-0.5 rounded border border-border text-xs",children:"DS2API_CONFIG_JSON"})," 环境变量。"]})]}),i.jsxs("li",{className:"flex gap-3",children:[i.jsx("span",{className:"shrink-0 w-6 h-6 rounded-full bg-background border border-border flex items-center justify-center text-xs font-bold text-muted-foreground",children:"4"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"触发重新部署以应用新的环境变量。"})]})]})]})]})]})}function wm({onLogin:e,onMessage:t}){const[n,r]=O.useState(""),[l,o]=O.useState(!1),[s,u]=O.useState(!0),a=async f=>{if(f.preventDefault(),!!n.trim()){o(!0);try{const g=await fetch("/admin/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({admin_key:n})}),m=await g.json();if(g.ok&&m.success){const h=s?localStorage:sessionStorage;h.setItem("ds2api_token",m.token),h.setItem("ds2api_token_expires",Date.now()+m.expires_in*1e3),e(m.token),m.message&&t("warning",m.message)}else t("error",m.detail||"登录失败")}catch(g){t("error","网络错误: "+g.message)}finally{o(!1)}}};return i.jsx("div",{className:"min-h-screen w-full flex flex-col items-center justify-center p-4 bg-background text-foreground",children:i.jsxs("div",{className:"w-full max-w-[400px] relative z-10 animate-in fade-in zoom-in-95 duration-200",children:[i.jsxs("div",{className:"w-full bg-card border border-border rounded-xl p-8 shadow-sm",children:[i.jsxs("div",{className:"text-center space-y-2 mb-8 animate-in fade-in slide-in-from-top-4 duration-500",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-xl bg-primary/10 text-primary mb-2",children:i.jsx($p,{className:"w-6 h-6"})}),i.jsx("h1",{className:"text-3xl font-bold tracking-tight text-foreground",children:"欢迎回来"}),i.jsx("p",{className:"text-sm text-muted-foreground/80",children:"请输入管理员密钥以继续"})]}),i.jsxs("form",{onSubmit:a,className:"space-y-5 animate-in fade-in slide-in-from-bottom-4 duration-700 delay-150",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx("label",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-widest ml-1",children:"管理员密钥"}),i.jsxs("div",{className:"relative group",children:[i.jsx("div",{className:"absolute inset-y-0 left-0 pl-3.5 flex items-center pointer-events-none text-muted-foreground group-focus-within:text-primary transition-colors",children:i.jsx(Mp,{className:"w-4 h-4"})}),i.jsx("input",{type:"password",className:"w-full bg-[#09090b] border border-border rounded-xl pl-10 pr-4 py-3 text-sm focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all placeholder:text-muted-foreground/30 text-foreground",placeholder:"输入您的管理员密钥...",value:n,onChange:f=>r(f.target.value),autoFocus:!0})]})]}),i.jsx("div",{className:"flex items-center justify-between px-1",children:i.jsxs("label",{className:"flex items-center gap-2.5 cursor-pointer group",children:[i.jsxs("div",{className:"relative flex items-center",children:[i.jsx("input",{type:"checkbox",className:"peer sr-only",checked:s,onChange:f=>u(f.target.checked)}),i.jsx("div",{className:"w-4.5 h-4.5 bg-secondary border border-border rounded-md peer-checked:bg-primary peer-checked:border-primary transition-all shadow-sm"}),i.jsx(ts,{className:"absolute w-3 h-3 text-primary-foreground opacity-0 peer-checked:opacity-100 left-0.5 transition-opacity"})]}),i.jsx("span",{className:"text-xs font-medium text-muted-foreground group-hover:text-foreground transition-colors",children:"记住登录状态"})]})}),i.jsx("button",{type:"submit",disabled:l,className:"w-full h-12 flex items-center justify-center gap-2 bg-primary text-primary-foreground rounded-xl hover:bg-primary/90 transition-all font-semibold text-sm shadow-lg shadow-primary/20 hover:shadow-primary/30 disabled:opacity-50 disabled:shadow-none",children:l?i.jsx("div",{className:"w-5 h-5 border-2 border-primary-foreground/30 border-t-primary-foreground rounded-full animate-spin"}):i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{children:"登录"}),i.jsx(Ec,{className:"w-4 h-4"})]})})]}),i.jsx("div",{className:"mt-6 pt-6 border-t border-border flex justify-center",children:i.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-muted-foreground/60 font-medium tracking-wide uppercase",children:[i.jsx(Tc,{className:"w-3 h-3"}),i.jsx("span",{children:"安全连接"})]})})]}),i.jsx("div",{className:"mt-8 text-center",children:i.jsx("p",{className:"text-[10px] text-muted-foreground/30 font-mono text-center",children:"DS2API 管理员门户"})})]})})}const so=[{id:"accounts",label:"账号管理",icon:dm,description:"管理 DeepSeek 账号池"},{id:"test",label:"API 测试",icon:zc,description:"测试 API 连接与响应"},{id:"import",label:"批量导入",icon:Lc,description:"批量导入账号配置"},{id:"vercel",label:"Vercel 同步",icon:Pc,description:"同步配置到 Vercel"}];function km(){var y,j,C,P;const[e,t]=O.useState("accounts"),[n,r]=O.useState({keys:[],accounts:[]}),[l,o]=O.useState(!0),[s,u]=O.useState(null),[a,f]=O.useState(null),[g,m]=O.useState(!0),[h,x]=O.useState(!1);O.useEffect(()=>{(async()=>{const D=localStorage.getItem("ds2api_token")||sessionStorage.getItem("ds2api_token"),L=parseInt(localStorage.getItem("ds2api_token_expires")||sessionStorage.getItem("ds2api_token_expires")||"0");if(D&&L>Date.now())try{(await fetch("/admin/verify",{headers:{Authorization:`Bearer ${D}`}})).ok?f(D):c()}catch{f(D)}m(!1)})()},[]);const v=async(k,D={})=>{const L={...D.headers,Authorization:`Bearer ${a}`},Z=await fetch(k,{...D,headers:L});if(Z.status===401)throw c(),new Error("认证已过期,请重新登录");return Z},N=async()=>{if(a)try{o(!0);const k=await v("/admin/config");if(k.ok){const D=await k.json();r(D)}}catch(k){console.error("获取配置失败:",k),T("error",k.message)}finally{o(!1)}};O.useEffect(()=>{a&&N()},[a]);const T=(k,D)=>{u({type:k,text:D}),setTimeout(()=>u(null),5e3)},d=k=>{f(k)},c=()=>{f(null),localStorage.removeItem("ds2api_token"),localStorage.removeItem("ds2api_token_expires"),sessionStorage.removeItem("ds2api_token"),sessionStorage.removeItem("ds2api_token_expires")},p=()=>{switch(e){case"accounts":return i.jsx(hm,{config:n,onRefresh:N,onMessage:T,authFetch:v});case"test":return i.jsx(ym,{config:n,onMessage:T,authFetch:v});case"import":return i.jsx(vm,{onRefresh:N,onMessage:T,authFetch:v});case"vercel":return i.jsx(xm,{onMessage:T,authFetch:v});default:return null}};return g?i.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background",children:i.jsxs("div",{className:"flex flex-col items-center gap-4",children:[i.jsx("div",{className:"w-8 h-8 border-4 border-primary border-t-transparent rounded-full animate-spin"}),i.jsx("p",{className:"text-muted-foreground animate-pulse",children:"正在检查登录状态..."})]})}):a?i.jsxs("div",{className:"flex h-screen bg-background overflow-hidden text-foreground",children:[h&&i.jsx("div",{className:"fixed inset-0 bg-background/80 backdrop-blur-sm z-40 lg:hidden",onClick:()=>x(!1)}),i.jsxs("aside",{className:ee("fixed lg:static inset-y-0 left-0 z-50 w-64 bg-card border-r border-border transition-transform duration-300 ease-in-out lg:transform-none flex flex-col shadow-2xl lg:shadow-none",h?"translate-x-0":"-translate-x-full"),children:[i.jsxs("div",{className:"p-6",children:[i.jsxs("div",{className:"flex items-center gap-2.5 font-bold text-xl text-foreground tracking-tight",children:[i.jsx("div",{className:"w-8 h-8 rounded-lg bg-primary flex items-center justify-center text-primary-foreground shadow-lg shadow-primary/20",children:i.jsx(au,{className:"w-5 h-5"})}),i.jsx("span",{children:"DS2API"})]}),i.jsx("p",{className:"text-[10px] text-muted-foreground mt-2 font-semibold tracking-[0.1em] uppercase opacity-60 px-1",children:"在线管理面板"})]}),i.jsx("nav",{className:"flex-1 px-3 space-y-1 overflow-y-auto pt-2",children:so.map(k=>{const D=k.icon,L=e===k.id;return i.jsxs("button",{onClick:()=>{t(k.id),x(!1)},className:ee("w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 group border",L?"bg-secondary text-primary border-border shadow-sm":"text-muted-foreground border-transparent hover:bg-secondary/80 hover:text-foreground"),children:[i.jsx(D,{className:ee("w-4 h-4 transition-colors",L?"text-primary":"text-muted-foreground group-hover:text-foreground")}),i.jsx("span",{className:"flex-1 text-left",children:k.label}),L&&i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-primary"})]},k.id)})}),i.jsx("div",{className:"p-4 border-t border-border bg-card",children:i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-center justify-between text-sm px-1",children:[i.jsx("span",{className:"text-muted-foreground font-semibold text-[10px] uppercase tracking-wider",children:"系统状态"}),i.jsxs("span",{className:"flex items-center gap-1.5 text-[10px] font-bold text-emerald-500 bg-emerald-500/10 px-2 py-0.5 rounded-full border border-emerald-500/20",children:[i.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse"}),"在线"]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[i.jsxs("div",{className:"bg-background rounded-lg p-3 border border-border shadow-sm",children:[i.jsx("div",{className:"text-[9px] text-muted-foreground font-bold uppercase tracking-wider mb-0.5 opacity-70",children:"账号"}),i.jsx("div",{className:"text-lg font-bold text-foreground leading-tight",children:((y=n.accounts)==null?void 0:y.length)||0})]}),i.jsxs("div",{className:"bg-background rounded-lg p-3 border border-border shadow-sm",children:[i.jsx("div",{className:"text-[9px] text-muted-foreground font-bold uppercase tracking-wider mb-0.5 opacity-70",children:"密钥"}),i.jsx("div",{className:"text-lg font-bold text-foreground",children:((j=n.keys)==null?void 0:j.length)||0})]})]}),i.jsxs("button",{onClick:c,className:"w-full h-10 flex items-center justify-center gap-2 rounded-lg border border-border text-xs font-medium text-muted-foreground hover:bg-destructive/10 hover:text-destructive hover:border-destructive/20 transition-all",children:[i.jsx(Vp,{className:"w-3.5 h-3.5"}),"退出登录"]})]})})]}),i.jsxs("main",{className:"flex-1 flex flex-col min-w-0 overflow-hidden relative",children:[i.jsxs("header",{className:"lg:hidden h-14 flex items-center justify-between px-4 border-b border-border bg-card",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"w-6 h-6 rounded bg-primary flex items-center justify-center text-primary-foreground text-[10px]",children:i.jsx(au,{className:"w-3.5 h-3.5"})}),i.jsx("span",{className:"font-semibold text-sm",children:"DS2API"})]}),i.jsx("button",{onClick:()=>x(!0),className:"p-2 -mr-2 text-muted-foreground hover:text-foreground",children:i.jsx(Bp,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"flex-1 overflow-auto bg-background p-4 lg:p-10",children:i.jsxs("div",{className:"max-w-6xl mx-auto space-y-4 lg:space-y-6",children:[i.jsxs("div",{className:"hidden lg:block mb-8",children:[i.jsx("h1",{className:"text-3xl font-bold tracking-tight mb-2",children:(C=so.find(k=>k.id===e))==null?void 0:C.label}),i.jsx("p",{className:"text-muted-foreground",children:(P=so.find(k=>k.id===e))==null?void 0:P.description})]}),s&&i.jsxs("div",{className:ee("p-4 rounded-lg border flex items-center gap-3 animate-in fade-in slide-in-from-top-2",s.type==="error"?"bg-destructive/10 border-destructive/20 text-destructive":"bg-emerald-500/10 border-emerald-500/20 text-emerald-500"),children:[s.type==="error"?i.jsx(ns,{className:"w-5 h-5"}):i.jsx("div",{className:"w-5 h-5 rounded-full border-2 border-emerald-500 flex items-center justify-center text-[10px]",children:"✓"}),s.text]}),i.jsx("div",{className:"animate-in fade-in duration-500",children:l?i.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-muted-foreground",children:[i.jsx("div",{className:"w-8 h-8 border-4 border-primary border-t-transparent rounded-full animate-spin mb-4"}),i.jsx("p",{children:"正在加载数据,请稍候..."})]}):p()})]})})]})]}):i.jsxs("div",{className:"min-h-screen flex flex-col bg-background relative overflow-hidden",children:[i.jsxs("div",{className:"absolute top-0 left-0 w-full h-full overflow-hidden pointer-events-none z-0",children:[i.jsx("div",{className:"absolute top-[-10%] right-[-10%] w-[50%] h-[50%] bg-primary/5 rounded-full blur-[120px]"}),i.jsx("div",{className:"absolute bottom-[-10%] left-[-10%] w-[50%] h-[50%] bg-accent/5 rounded-full blur-[120px]"})]}),s&&i.jsx("div",{className:ee("fixed top-4 right-4 z-50 px-4 py-3 rounded-lg shadow-lg border animate-in slide-in-from-top-2 fade-in",s.type==="error"?"bg-destructive/10 border-destructive/20 text-destructive":"bg-primary/10 border-primary/20 text-primary"),children:s.text}),i.jsx(wm,{onLogin:d,onMessage:T})]})}io.createRoot(document.getElementById("root")).render(i.jsx(Jc.StrictMode,{children:i.jsx(km,{})})); diff --git a/static/admin/index.html b/static/admin/index.html new file mode 100644 index 0000000..6b1184e --- /dev/null +++ b/static/admin/index.html @@ -0,0 +1,43 @@ + + + + + + + + + DS2API - DeepSeek API 管理面板 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/vercel.json b/vercel.json index 79b3d5c..d7102d0 100644 --- a/vercel.json +++ b/vercel.json @@ -1,6 +1,5 @@ { "version": 2, - "installCommand": "pip install -r requirements.txt && cd webui && npm install && npm run build", "builds": [ { "src": "app.py",