From 10f11189f81792dfe6fb613fad94a58e0efc5bfb Mon Sep 17 00:00:00 2001 From: sion123 <450702724@qq.com> Date: Fri, 8 May 2026 00:53:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E9=87=8D=E6=9E=84=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E5=88=97=E8=A1=A8=E5=92=8C=E8=B5=84=E4=BA=A7=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8A=A0=E8=BD=BD=E9=AA=A8?= =?UTF-8?q?=E6=9E=B6=E5=B1=8F=E5=92=8C=E7=A1=AE=E8=AE=A4=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构 MiddlePanel 对话列表,按时间分组并优化交互 - 为 AccountList 和 AssetGallery 添加加载骨架屏 - 用确认对话框替换原生 confirm,统一交互体验 - 优化聊天消息组件的视觉样式和细节 - 添加 Escape 键快速返回账户列表导航 - 更新构建资源文件 --- web/client/dist/assets/index-Bd3B3-IW.css | 1 - web/client/dist/assets/index-ChelO-mr.js | 315 ----------------- web/client/dist/assets/index-DSKEPThI.js | 320 ++++++++++++++++++ web/client/dist/assets/index-DXUyFc07.css | 1 + web/client/dist/index.html | 4 +- .../src/components/accounts/AccountList.tsx | 62 +++- .../src/components/assets/AssetGallery.tsx | 50 ++- .../src/components/chat/ChatMessage.tsx | 29 +- .../src/components/layout/AppLayout.tsx | 18 +- .../src/components/layout/MiddlePanel.tsx | 211 +++++++++--- 10 files changed, 600 insertions(+), 411 deletions(-) delete mode 100644 web/client/dist/assets/index-Bd3B3-IW.css delete mode 100644 web/client/dist/assets/index-ChelO-mr.js create mode 100644 web/client/dist/assets/index-DSKEPThI.js create mode 100644 web/client/dist/assets/index-DXUyFc07.css diff --git a/web/client/dist/assets/index-Bd3B3-IW.css b/web/client/dist/assets/index-Bd3B3-IW.css deleted file mode 100644 index ef51928..0000000 --- a/web/client/dist/assets/index-Bd3B3-IW.css +++ /dev/null @@ -1 +0,0 @@ -code[class*=language-],pre[class*=language-]{color:#000;background:none;text-shadow:0 1px white;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#905}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#690}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function,.token.class-name{color:#dd4a68}.token.regex,.token.important,.token.variable{color:#e90}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}*,: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}*{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}body{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#d4d4d8;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#a1a1aa}*{scrollbar-width:thin;scrollbar-color:#d4d4d8 transparent}.markdown-body{color-scheme:light;color:#1f2328}.markdown-body h1{font-size:1.5em;font-weight:600;margin:.67em 0;padding-bottom:.3em;border-bottom:1px solid #d0d7de}.markdown-body h2{font-size:1.25em;font-weight:600;margin:.83em 0;padding-bottom:.3em;border-bottom:1px solid #d0d7de}.markdown-body h3{font-size:1.1em;font-weight:600;margin:1em 0 .25em}.markdown-body h4{font-size:1em;font-weight:600;margin:1em 0 .25em}.markdown-body p{margin:0 0 .75em}.markdown-body p:last-child{margin-bottom:0}.markdown-body ul,.markdown-body ol{padding-left:1.5em;margin:0 0 .75em}.markdown-body li{margin:.15em 0}.markdown-body li>p{margin:0}.markdown-body ul{list-style-type:disc}.markdown-body ol{list-style-type:decimal}.markdown-body blockquote{margin:0 0 .75em;padding:0 1em;color:#656d76;border-left:3px solid #d0d7de}.markdown-body code{background:#afb8c133;padding:.15em .4em;border-radius:4px;font-size:.875em;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.markdown-body pre{background:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;padding:12px;margin:0 0 .75em;overflow-x:auto}.markdown-body pre code{background:none;padding:0;font-size:.8125em;line-height:1.5;color:#1f2328}.markdown-body hr{border:0;height:1px;background:#d0d7de;margin:1em 0}.markdown-body a{color:#0969da;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body table{border-collapse:collapse;margin:0 0 .75em;width:100%}.markdown-body th,.markdown-body td{border:1px solid #d0d7de;padding:6px 13px;text-align:left}.markdown-body th{font-weight:600;background:#f6f8fa}.markdown-body img{max-width:100%;border-radius:6px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-2\.5{left:.625rem}.left-4{left:1rem}.left-5{left:1.25rem}.right-0{right:0}.right-1{right:.25rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-mb-px{margin-bottom:-1px}.mb-0\.5{margin-bottom:.125rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-24{height:6rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:15rem}.max-h-\[120px\]{max-height:120px}.max-h-\[90vh\]{max-height:90vh}.min-h-\[24px\]{min-height:24px}.min-h-full{min-height:100%}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-24{width:6rem}.w-4{width:1rem}.w-48{width:12rem}.w-60{width:15rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-\[78\%\]{max-width:78%}.max-w-\[90vw\]{max-width:90vw}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-none{max-width:none}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.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}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-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))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.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:.5rem}.rounded-md{border-radius:calc(.5rem - 2px)}.rounded-xl{border-radius:.75rem}.rounded-tl-md{border-top-left-radius:calc(.5rem - 2px)}.rounded-tr-md{border-top-right-radius:calc(.5rem - 2px)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-\[3px\]{border-left-width:3px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-indigo-100{--tw-border-opacity: 1;border-color:rgb(224 231 255 / var(--tw-border-opacity, 1))}.border-indigo-300{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.border-indigo-400{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.border-indigo-600{--tw-border-opacity: 1;border-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.border-input{--tw-border-opacity: 1;border-color:hsl(240 5.9% 90% / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-zinc-100{--tw-border-opacity: 1;border-color:rgb(244 244 245 / var(--tw-border-opacity, 1))}.border-zinc-200{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}.border-zinc-50{--tw-border-opacity: 1;border-color:rgb(250 250 250 / var(--tw-border-opacity, 1))}.border-zinc-800{--tw-border-opacity: 1;border-color:rgb(39 39 42 / var(--tw-border-opacity, 1))}.border-l-indigo-600{--tw-border-opacity: 1;border-left-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.bg-background{--tw-bg-opacity: 1;background-color:hsl(0 0% 100% / var(--tw-bg-opacity, 1))}.bg-black\/90{background-color:#000000e6}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-destructive{--tw-bg-opacity: 1;background-color:hsl(0 84.2% 60.2% / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-200{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-50\/50{background-color:#eef2ff80}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:hsl(240 5.9% 10% / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:hsl(240 4.8% 95.9% / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-200{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.bg-zinc-300{--tw-bg-opacity: 1;background-color:rgb(212 212 216 / var(--tw-bg-opacity, 1))}.bg-zinc-50{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.bg-zinc-800{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.bg-zinc-800\/80{background-color:#27272acc}.bg-zinc-900{--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.bg-zinc-900\/80{background-color:#18181bcc}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-black\/30{--tw-gradient-from: rgb(0 0 0 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-black\/40{--tw-gradient-from: rgb(0 0 0 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.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-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-8{padding-left:2rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[10px\]{font-size:10px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-destructive-foreground{--tw-text-opacity: 1;color:hsl(0 0% 98% / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-primary{--tw-text-opacity: 1;color:hsl(240 5.9% 10% / var(--tw-text-opacity, 1))}.text-primary-foreground{--tw-text-opacity: 1;color:hsl(0 0% 98% / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-secondary-foreground{--tw-text-opacity: 1;color:hsl(240 5.9% 10% / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-zinc-300{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.text-zinc-400{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-zinc-600{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.text-zinc-700{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.text-zinc-800{--tw-text-opacity: 1;color:rgb(39 39 42 / var(--tw-text-opacity, 1))}.text-zinc-900{--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-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)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(0 0% 100%)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-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}.duration-200{transition-duration:.2s}.duration-500{transition-duration:.5s}.\[animation-delay\:100ms\]{animation-delay:.1s}.\[animation-delay\:200ms\]{animation-delay:.2s}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{--tw-text-opacity: 1;color:hsl(240 3.8% 46.1% / var(--tw-text-opacity, 1))}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity: 1;color:hsl(240 3.8% 46.1% / var(--tw-text-opacity, 1))}.placeholder\:text-zinc-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.placeholder\:text-zinc-400::placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.last\:border-r-0:last-child{border-right-width:0px}.focus-within\:border-indigo-300:focus-within{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.focus-within\:bg-white:focus-within{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus-within\:shadow-md:focus-within{--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-within\:shadow-indigo-50:focus-within{--tw-shadow-color: #eef2ff;--tw-shadow: var(--tw-shadow-colored)}.hover\:border-indigo-300:hover{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{--tw-bg-opacity: 1;background-color:hsl(240 4.8% 95.9% / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/90:hover{background-color:#ef4444e6}.hover\:bg-indigo-700:hover{--tw-bg-opacity: 1;background-color:rgb(67 56 202 / var(--tw-bg-opacity, 1))}.hover\:bg-primary\/90:hover{background-color:#18181be6}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:#f4f4f5cc}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-100:hover{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-200:hover{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-700:hover{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{--tw-text-opacity: 1;color:hsl(240 5.9% 10% / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-zinc-600:hover{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.hover\:text-zinc-700:hover{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: hsl(240 5% 64.9% / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-zinc-800{--tw-text-opacity: 1;color:rgb(39 39 42 / var(--tw-text-opacity, 1))}.group\/msg:hover .group-hover\/msg\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1} diff --git a/web/client/dist/assets/index-ChelO-mr.js b/web/client/dist/assets/index-ChelO-mr.js deleted file mode 100644 index ec7a910..0000000 --- a/web/client/dist/assets/index-ChelO-mr.js +++ /dev/null @@ -1,315 +0,0 @@ -var Jp=Object.defineProperty;var Xp=(e,t,n)=>t in e?Jp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ju=(e,t,n)=>Xp(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))u(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&u(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function u(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();var ot=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function e1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var z0={exports:{}},Xo={},N0={exports:{}},U={};/** - * @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 Ar=Symbol.for("react.element"),t1=Symbol.for("react.portal"),n1=Symbol.for("react.fragment"),u1=Symbol.for("react.strict_mode"),r1=Symbol.for("react.profiler"),o1=Symbol.for("react.provider"),i1=Symbol.for("react.context"),l1=Symbol.for("react.forward_ref"),a1=Symbol.for("react.suspense"),s1=Symbol.for("react.memo"),c1=Symbol.for("react.lazy"),Ns=Symbol.iterator;function d1(e){return e===null||typeof e!="object"?null:(e=Ns&&e[Ns]||e["@@iterator"],typeof e=="function"?e:null)}var j0={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},R0=Object.assign,T0={};function yu(e,t,n){this.props=e,this.context=t,this.refs=T0,this.updater=n||j0}yu.prototype.isReactComponent={};yu.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")};yu.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function P0(){}P0.prototype=yu.prototype;function fa(e,t,n){this.props=e,this.context=t,this.refs=T0,this.updater=n||j0}var pa=fa.prototype=new P0;pa.constructor=fa;R0(pa,yu.prototype);pa.isPureReactComponent=!0;var js=Array.isArray,M0=Object.prototype.hasOwnProperty,ha={current:null},L0={key:!0,ref:!0,__self:!0,__source:!0};function I0(e,t,n){var u,r={},o=null,i=null;if(t!=null)for(u in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)M0.call(t,u)&&!L0.hasOwnProperty(u)&&(r[u]=t[u]);var l=arguments.length-2;if(l===1)r.children=n;else if(1>>1,W=A[$];if(0>>1;$r(Le,T))Ner(Ve,Le)?(A[$]=Ve,A[Ne]=T,$=Ne):(A[$]=Le,A[re]=T,$=re);else if(Ner(Ve,T))A[$]=Ve,A[Ne]=T,$=Ne;else break e}}return z}function r(A,z){var T=A.sortIndex-z.sortIndex;return T!==0?T:A.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,l=i.now();e.unstable_now=function(){return i.now()-l}}var a=[],s=[],d=1,p=null,m=3,y=!1,g=!1,w=!1,C=typeof setTimeout=="function"?setTimeout:null,x=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(A){for(var z=n(s);z!==null;){if(z.callback===null)u(s);else if(z.startTime<=A)u(s),z.sortIndex=z.expirationTime,t(a,z);else break;z=n(s)}}function v(A){if(w=!1,h(A),!g)if(n(a)!==null)g=!0,Y(b);else{var z=n(s);z!==null&&q(v,z.startTime-A)}}function b(A,z){g=!1,w&&(w=!1,x(S),S=-1),y=!0;var T=m;try{for(h(z),p=n(a);p!==null&&(!(p.expirationTime>z)||A&&!L());){var $=p.callback;if(typeof $=="function"){p.callback=null,m=p.priorityLevel;var W=$(p.expirationTime<=z);z=e.unstable_now(),typeof W=="function"?p.callback=W:p===n(a)&&u(a),h(z)}else u(a);p=n(a)}if(p!==null)var wt=!0;else{var re=n(s);re!==null&&q(v,re.startTime-z),wt=!1}return wt}finally{p=null,m=T,y=!1}}var _=!1,E=null,S=-1,F=5,N=-1;function L(){return!(e.unstable_now()-NA||125$?(A.sortIndex=T,t(s,A),n(a)===null&&A===n(s)&&(w?(x(S),S=-1):w=!0,q(v,T-$))):(A.sortIndex=W,t(a,A),g||y||(g=!0,Y(b))),A},e.unstable_shouldYield=L,e.unstable_wrapCallback=function(A){var z=m;return function(){var T=m;m=z;try{return A.apply(this,arguments)}finally{m=T}}}})(H0);U0.exports=H0;var w1=U0.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 _1=k,Qe=w1;function D(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"),cl=Object.prototype.hasOwnProperty,C1=/^[: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]*$/,Ts={},Ps={};function E1(e){return cl.call(Ps,e)?!0:cl.call(Ts,e)?!1:C1.test(e)?Ps[e]=!0:(Ts[e]=!0,!1)}function S1(e,t,n,u){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return u?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function A1(e,t,n,u){if(t===null||typeof t>"u"||S1(e,t,n,u))return!0;if(u)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 Me(e,t,n,u,r,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=u,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var Se={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Se[e]=new Me(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Se[t]=new Me(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Se[e]=new Me(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Se[e]=new Me(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){Se[e]=new Me(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Se[e]=new Me(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Se[e]=new Me(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Se[e]=new Me(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Se[e]=new Me(e,5,!1,e.toLowerCase(),null,!1,!1)});var ga=/[\-:]([a-z])/g;function xa(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(ga,xa);Se[t]=new Me(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(ga,xa);Se[t]=new Me(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(ga,xa);Se[t]=new Me(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Se[e]=new Me(e,1,!1,e.toLowerCase(),null,!1,!1)});Se.xlinkHref=new Me("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Se[e]=new Me(e,1,!1,e.toLowerCase(),null,!0,!0)});function ya(e,t,n,u){var r=Se.hasOwnProperty(t)?Se[t]:null;(r!==null?r.type!==0:u||!(2l||r[i]!==o[l]){var a=` -`+r[i].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=i&&0<=l);break}}}finally{Si=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Wu(e):""}function F1(e){switch(e.tag){case 5:return Wu(e.type);case 16:return Wu("Lazy");case 13:return Wu("Suspense");case 19:return Wu("SuspenseList");case 0:case 2:case 15:return e=Ai(e.type,!1),e;case 11:return e=Ai(e.type.render,!1),e;case 1:return e=Ai(e.type,!0),e;default:return""}}function hl(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 Vn:return"Fragment";case Hn:return"Portal";case dl:return"Profiler";case va:return"StrictMode";case fl:return"Suspense";case pl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case W0:return(e.displayName||"Context")+".Consumer";case q0:return(e._context.displayName||"Context")+".Provider";case ba:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ka:return t=e.displayName||null,t!==null?t:hl(e.type)||"Memo";case en:t=e._payload,e=e._init;try{return hl(e(t))}catch{}}return null}function D1(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 hl(t);case 8:return t===va?"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 yn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function G0(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function z1(e){var t=G0(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),u=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var r=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(i){u=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return u},setValue:function(i){u=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Hr(e){e._valueTracker||(e._valueTracker=z1(e))}function Q0(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),u="";return e&&(u=G0(e)?e.checked?"true":"false":e.value),e=u,e!==n?(t.setValue(e),!0):!1}function Co(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 ml(e,t){var n=t.checked;return se({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ls(e,t){var n=t.defaultValue==null?"":t.defaultValue,u=t.checked!=null?t.checked:t.defaultChecked;n=yn(t.value!=null?t.value:n),e._wrapperState={initialChecked:u,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Z0(e,t){t=t.checked,t!=null&&ya(e,"checked",t,!1)}function gl(e,t){Z0(e,t);var n=yn(t.value),u=t.type;if(n!=null)u==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(u==="submit"||u==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?xl(e,t.type,n):t.hasOwnProperty("defaultValue")&&xl(e,t.type,yn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Is(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var u=t.type;if(!(u!=="submit"&&u!=="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 xl(e,t,n){(t!=="number"||Co(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ku=Array.isArray;function tu(e,t,n,u){if(e=e.options,t){t={};for(var r=0;r"+t.valueOf().toString()+"",t=Vr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ir(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Zu={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},N1=["Webkit","ms","Moz","O"];Object.keys(Zu).forEach(function(e){N1.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Zu[t]=Zu[e]})});function ed(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Zu.hasOwnProperty(e)&&Zu[e]?(""+t).trim():t+"px"}function td(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var u=n.indexOf("--")===0,r=ed(n,t[n],u);n==="float"&&(n="cssFloat"),u?e.setProperty(n,r):e[n]=r}}var j1=se({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 bl(e,t){if(t){if(j1[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(D(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(D(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(D(61))}if(t.style!=null&&typeof t.style!="object")throw Error(D(62))}}function kl(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 wl=null;function wa(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var _l=null,nu=null,uu=null;function Bs(e){if(e=zr(e)){if(typeof _l!="function")throw Error(D(280));var t=e.stateNode;t&&(t=ri(t),_l(e.stateNode,e.type,t))}}function nd(e){nu?uu?uu.push(e):uu=[e]:nu=e}function ud(){if(nu){var e=nu,t=uu;if(uu=nu=null,Bs(e),t)for(e=0;e>>=0,e===0?32:31-(H1(e)/V1|0)|0}var qr=64,Wr=4194304;function Gu(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 Fo(e,t){var n=e.pendingLanes;if(n===0)return 0;var u=0,r=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var l=i&~r;l!==0?u=Gu(l):(o&=i,o!==0&&(u=Gu(o)))}else i=n&~r,i!==0?u=Gu(i):o!==0&&(u=Gu(o));if(u===0)return 0;if(t!==0&&t!==u&&!(t&r)&&(r=u&-u,o=t&-t,r>=o||r===16&&(o&4194240)!==0))return t;if(u&4&&(u|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=u;0n;n++)t.push(e);return t}function Fr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function G1(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 u=e.eventTimes;for(e=e.expirationTimes;0=Ju),Zs=" ",Ys=!1;function _d(e,t){switch(e){case"keyup":return wh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cd(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var qn=!1;function Ch(e,t){switch(e){case"compositionend":return Cd(t);case"keypress":return t.which!==32?null:(Ys=!0,Zs);case"textInput":return e=t.data,e===Zs&&Ys?null:e;default:return null}}function Eh(e,t){if(qn)return e==="compositionend"||!za&&_d(e,t)?(e=kd(),fo=Aa=ln=null,qn=!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=u}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=tc(n)}}function Fd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Fd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Dd(){for(var e=window,t=Co();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Co(e.document)}return t}function Na(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 Th(e){var t=Dd(),n=e.focusedElem,u=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Fd(n.ownerDocument.documentElement,n)){if(u!==null&&Na(n)){if(t=u.start,e=u.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 r=n.textContent.length,o=Math.min(u.start,r);u=u.end===void 0?o:Math.min(u.end,r),!e.extend&&o>u&&(r=u,u=o,o=r),r=nc(n,o);var i=nc(n,u);r&&i&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),o>u?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.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,Wn=null,Dl=null,er=null,zl=!1;function uc(e,t,n){var u=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;zl||Wn==null||Wn!==Co(u)||(u=Wn,"selectionStart"in u&&Na(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),er&&fr(er,u)||(er=u,u=No(Dl,"onSelect"),0Qn||(e.current=Ml[Qn],Ml[Qn]=null,Qn--)}function J(e,t){Qn++,Ml[Qn]=e.current,e.current=t}var vn={},ze=wn(vn),$e=wn(!1),Nn=vn;function cu(e,t){var n=e.type.contextTypes;if(!n)return vn;var u=e.stateNode;if(u&&u.__reactInternalMemoizedUnmaskedChildContext===t)return u.__reactInternalMemoizedMaskedChildContext;var r={},o;for(o in n)r[o]=t[o];return u&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function Be(e){return e=e.childContextTypes,e!=null}function Ro(){ne($e),ne(ze)}function cc(e,t,n){if(ze.current!==vn)throw Error(D(168));J(ze,t),J($e,n)}function Id(e,t,n){var u=e.stateNode;if(t=t.childContextTypes,typeof u.getChildContext!="function")return n;u=u.getChildContext();for(var r in u)if(!(r in t))throw Error(D(108,D1(e)||"Unknown",r));return se({},n,u)}function To(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||vn,Nn=ze.current,J(ze,e),J($e,$e.current),!0}function dc(e,t,n){var u=e.stateNode;if(!u)throw Error(D(169));n?(e=Id(e,t,Nn),u.__reactInternalMemoizedMergedChildContext=e,ne($e),ne(ze),J(ze,e)):ne($e),J($e,n)}var Ot=null,oi=!1,Bi=!1;function Od(e){Ot===null?Ot=[e]:Ot.push(e)}function Wh(e){oi=!0,Od(e)}function _n(){if(!Bi&&Ot!==null){Bi=!0;var e=0,t=Z;try{var n=Ot;for(Z=1;e>=i,r-=i,$t=1<<32-ht(t)+r|n<S?(F=E,E=null):F=E.sibling;var N=m(x,E,h[S],v);if(N===null){E===null&&(E=F);break}e&&E&&N.alternate===null&&t(x,E),f=o(N,f,S),_===null?b=N:_.sibling=N,_=N,E=F}if(S===h.length)return n(x,E),oe&&Cn(x,S),b;if(E===null){for(;SS?(F=E,E=null):F=E.sibling;var L=m(x,E,N.value,v);if(L===null){E===null&&(E=F);break}e&&E&&L.alternate===null&&t(x,E),f=o(L,f,S),_===null?b=L:_.sibling=L,_=L,E=F}if(N.done)return n(x,E),oe&&Cn(x,S),b;if(E===null){for(;!N.done;S++,N=h.next())N=p(x,N.value,v),N!==null&&(f=o(N,f,S),_===null?b=N:_.sibling=N,_=N);return oe&&Cn(x,S),b}for(E=u(x,E);!N.done;S++,N=h.next())N=y(E,x,S,N.value,v),N!==null&&(e&&N.alternate!==null&&E.delete(N.key===null?S:N.key),f=o(N,f,S),_===null?b=N:_.sibling=N,_=N);return e&&E.forEach(function(P){return t(x,P)}),oe&&Cn(x,S),b}function C(x,f,h,v){if(typeof h=="object"&&h!==null&&h.type===Vn&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case Ur:e:{for(var b=h.key,_=f;_!==null;){if(_.key===b){if(b=h.type,b===Vn){if(_.tag===7){n(x,_.sibling),f=r(_,h.props.children),f.return=x,x=f;break e}}else if(_.elementType===b||typeof b=="object"&&b!==null&&b.$$typeof===en&&hc(b)===_.type){n(x,_.sibling),f=r(_,h.props),f.ref=Iu(x,_,h),f.return=x,x=f;break e}n(x,_);break}else t(x,_);_=_.sibling}h.type===Vn?(f=zn(h.props.children,x.mode,v,h.key),f.return=x,x=f):(v=bo(h.type,h.key,h.props,null,x.mode,v),v.ref=Iu(x,f,h),v.return=x,x=v)}return i(x);case Hn:e:{for(_=h.key;f!==null;){if(f.key===_)if(f.tag===4&&f.stateNode.containerInfo===h.containerInfo&&f.stateNode.implementation===h.implementation){n(x,f.sibling),f=r(f,h.children||[]),f.return=x,x=f;break e}else{n(x,f);break}else t(x,f);f=f.sibling}f=Qi(h,x.mode,v),f.return=x,x=f}return i(x);case en:return _=h._init,C(x,f,_(h._payload),v)}if(Ku(h))return g(x,f,h,v);if(Ru(h))return w(x,f,h,v);Xr(x,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,f!==null&&f.tag===6?(n(x,f.sibling),f=r(f,h),f.return=x,x=f):(n(x,f),f=Gi(h,x.mode,v),f.return=x,x=f),i(x)):n(x,f)}return C}var fu=Hd(!0),Vd=Hd(!1),Lo=wn(null),Io=null,Jn=null,Pa=null;function Ma(){Pa=Jn=Io=null}function La(e){var t=Lo.current;ne(Lo),e._currentValue=t}function Ol(e,t,n){for(;e!==null;){var u=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,u!==null&&(u.childLanes|=t)):u!==null&&(u.childLanes&t)!==t&&(u.childLanes|=t),e===n)break;e=e.return}}function ou(e,t){Io=e,Pa=Jn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Oe=!0),e.firstContext=null)}function it(e){var t=e._currentValue;if(Pa!==e)if(e={context:e,memoizedValue:t,next:null},Jn===null){if(Io===null)throw Error(D(308));Jn=e,Io.dependencies={lanes:0,firstContext:e}}else Jn=Jn.next=e;return t}var An=null;function Ia(e){An===null?An=[e]:An.push(e)}function qd(e,t,n,u){var r=t.interleaved;return r===null?(n.next=n,Ia(t)):(n.next=r.next,r.next=n),t.interleaved=n,qt(e,u)}function qt(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 tn=!1;function Oa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Wd(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 Ut(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function hn(e,t,n){var u=e.updateQueue;if(u===null)return null;if(u=u.shared,K&2){var r=u.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),u.pending=t,qt(e,n)}return r=u.interleaved,r===null?(t.next=t,Ia(u)):(t.next=r.next,r.next=t),u.interleaved=t,qt(e,n)}function ho(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var u=t.lanes;u&=e.pendingLanes,n|=u,t.lanes=n,Ca(e,n)}}function mc(e,t){var n=e.updateQueue,u=e.alternate;if(u!==null&&(u=u.updateQueue,n===u)){var r=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?r=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?r=o=t:o=o.next=t}else r=o=t;n={baseState:u.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:u.shared,effects:u.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Oo(e,t,n,u){var r=e.updateQueue;tn=!1;var o=r.firstBaseUpdate,i=r.lastBaseUpdate,l=r.shared.pending;if(l!==null){r.shared.pending=null;var a=l,s=a.next;a.next=null,i===null?o=s:i.next=s,i=a;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==i&&(l===null?d.firstBaseUpdate=s:l.next=s,d.lastBaseUpdate=a))}if(o!==null){var p=r.baseState;i=0,d=s=a=null,l=o;do{var m=l.lane,y=l.eventTime;if((u&m)===m){d!==null&&(d=d.next={eventTime:y,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var g=e,w=l;switch(m=t,y=n,w.tag){case 1:if(g=w.payload,typeof g=="function"){p=g.call(y,p,m);break e}p=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=w.payload,m=typeof g=="function"?g.call(y,p,m):g,m==null)break e;p=se({},p,m);break e;case 2:tn=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,m=r.effects,m===null?r.effects=[l]:m.push(l))}else y={eventTime:y,lane:m,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(s=d=y,a=p):d=d.next=y,i|=m;if(l=l.next,l===null){if(l=r.shared.pending,l===null)break;m=l,l=m.next,m.next=null,r.lastBaseUpdate=m,r.shared.pending=null}}while(!0);if(d===null&&(a=p),r.baseState=a,r.firstBaseUpdate=s,r.lastBaseUpdate=d,t=r.shared.interleaved,t!==null){r=t;do i|=r.lane,r=r.next;while(r!==t)}else o===null&&(r.shared.lanes=0);Tn|=i,e.lanes=i,e.memoizedState=p}}function gc(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var u=Hi.transition;Hi.transition={};try{e(!1),t()}finally{Z=n,Hi.transition=u}}function cf(){return lt().memoizedState}function Zh(e,t,n){var u=gn(e);if(n={lane:u,action:n,hasEagerState:!1,eagerState:null,next:null},df(e))ff(t,n);else if(n=qd(e,t,n,u),n!==null){var r=Te();mt(n,e,u,r),pf(n,t,u)}}function Yh(e,t,n){var u=gn(e),r={lane:u,action:n,hasEagerState:!1,eagerState:null,next:null};if(df(e))ff(t,r);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,l=o(i,n);if(r.hasEagerState=!0,r.eagerState=l,xt(l,i)){var a=t.interleaved;a===null?(r.next=r,Ia(t)):(r.next=a.next,a.next=r),t.interleaved=r;return}}catch{}finally{}n=qd(e,t,r,u),n!==null&&(r=Te(),mt(n,e,u,r),pf(n,t,u))}}function df(e){var t=e.alternate;return e===ae||t!==null&&t===ae}function ff(e,t){tr=Bo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function pf(e,t,n){if(n&4194240){var u=t.lanes;u&=e.pendingLanes,n|=u,t.lanes=n,Ca(e,n)}}var Uo={readContext:it,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},Jh={readContext:it,useCallback:function(e,t){return St().memoizedState=[e,t===void 0?null:t],e},useContext:it,useEffect:yc,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,go(4194308,4,rf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return go(4194308,4,e,t)},useInsertionEffect:function(e,t){return go(4,2,e,t)},useMemo:function(e,t){var n=St();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var u=St();return t=n!==void 0?n(t):t,u.memoizedState=u.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},u.queue=e,e=e.dispatch=Zh.bind(null,ae,e),[u.memoizedState,e]},useRef:function(e){var t=St();return e={current:e},t.memoizedState=e},useState:xc,useDebugValue:Ka,useDeferredValue:function(e){return St().memoizedState=e},useTransition:function(){var e=xc(!1),t=e[0];return e=Qh.bind(null,e[1]),St().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var u=ae,r=St();if(oe){if(n===void 0)throw Error(D(407));n=n()}else{if(n=t(),_e===null)throw Error(D(349));Rn&30||Zd(u,t,n)}r.memoizedState=n;var o={value:n,getSnapshot:t};return r.queue=o,yc(Jd.bind(null,u,o,e),[e]),u.flags|=2048,br(9,Yd.bind(null,u,o,n,t),void 0,null),n},useId:function(){var e=St(),t=_e.identifierPrefix;if(oe){var n=Bt,u=$t;n=(u&~(1<<32-ht(u)-1)).toString(32)+n,t=":"+t+"R"+n,n=yr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof u.is=="string"?e=i.createElement(n,{is:u.is}):(e=i.createElement(n),n==="select"&&(i=e,u.multiple?i.multiple=!0:u.size&&(i.size=u.size))):e=i.createElementNS(e,n),e[At]=t,e[mr]=u,_f(e,t,!1,!1),t.stateNode=e;e:{switch(i=kl(n,u),n){case"dialog":te("cancel",e),te("close",e),r=u;break;case"iframe":case"object":case"embed":te("load",e),r=u;break;case"video":case"audio":for(r=0;rmu&&(t.flags|=128,u=!0,Ou(o,!1),t.lanes=4194304)}else{if(!u)if(e=$o(i),e!==null){if(t.flags|=128,u=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ou(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!oe)return Fe(t),null}else 2*de()-o.renderingStartTime>mu&&n!==1073741824&&(t.flags|=128,u=!0,Ou(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=de(),t.sibling=null,n=le.current,J(le,u?n&1|2:n&1),t):(Fe(t),null);case 22:case 23:return Xa(),u=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==u&&(t.flags|=8192),u&&t.mode&1?We&1073741824&&(Fe(t),t.subtreeFlags&6&&(t.flags|=8192)):Fe(t),null;case 24:return null;case 25:return null}throw Error(D(156,t.tag))}function im(e,t){switch(Ra(t),t.tag){case 1:return Be(t.type)&&Ro(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return pu(),ne($e),ne(ze),Ua(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ba(t),null;case 13:if(ne(le),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(D(340));du()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ne(le),null;case 4:return pu(),null;case 10:return La(t.type._context),null;case 22:case 23:return Xa(),null;case 24:return null;default:return null}}var to=!1,De=!1,lm=typeof WeakSet=="function"?WeakSet:Set,R=null;function Xn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(u){ce(e,t,u)}else n.current=null}function Gl(e,t,n){try{n()}catch(u){ce(e,t,u)}}var Dc=!1;function am(e,t){if(Nl=Do,e=Dd(),Na(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var u=n.getSelection&&n.getSelection();if(u&&u.rangeCount!==0){n=u.anchorNode;var r=u.anchorOffset,o=u.focusNode;u=u.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,l=-1,a=-1,s=0,d=0,p=e,m=null;t:for(;;){for(var y;p!==n||r!==0&&p.nodeType!==3||(l=i+r),p!==o||u!==0&&p.nodeType!==3||(a=i+u),p.nodeType===3&&(i+=p.nodeValue.length),(y=p.firstChild)!==null;)m=p,p=y;for(;;){if(p===e)break t;if(m===n&&++s===r&&(l=i),m===o&&++d===u&&(a=i),(y=p.nextSibling)!==null)break;p=m,m=p.parentNode}p=y}n=l===-1||a===-1?null:{start:l,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(jl={focusedElem:e,selectionRange:n},Do=!1,R=t;R!==null;)if(t=R,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,R=e;else for(;R!==null;){t=R;try{var g=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var w=g.memoizedProps,C=g.memoizedState,x=t.stateNode,f=x.getSnapshotBeforeUpdate(t.elementType===t.type?w:dt(t.type,w),C);x.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(D(163))}}catch(v){ce(t,t.return,v)}if(e=t.sibling,e!==null){e.return=t.return,R=e;break}R=t.return}return g=Dc,Dc=!1,g}function nr(e,t,n){var u=t.updateQueue;if(u=u!==null?u.lastEffect:null,u!==null){var r=u=u.next;do{if((r.tag&e)===e){var o=r.destroy;r.destroy=void 0,o!==void 0&&Gl(t,n,o)}r=r.next}while(r!==u)}}function ai(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 u=n.create;n.destroy=u()}n=n.next}while(n!==t)}}function Ql(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 Sf(e){var t=e.alternate;t!==null&&(e.alternate=null,Sf(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[At],delete t[mr],delete t[Pl],delete t[Vh],delete t[qh])),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 Af(e){return e.tag===5||e.tag===3||e.tag===4}function zc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Af(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 Zl(e,t,n){var u=e.tag;if(u===5||u===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=jo));else if(u!==4&&(e=e.child,e!==null))for(Zl(e,t,n),e=e.sibling;e!==null;)Zl(e,t,n),e=e.sibling}function Yl(e,t,n){var u=e.tag;if(u===5||u===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(u!==4&&(e=e.child,e!==null))for(Yl(e,t,n),e=e.sibling;e!==null;)Yl(e,t,n),e=e.sibling}var Ce=null,ft=!1;function Zt(e,t,n){for(n=n.child;n!==null;)Ff(e,t,n),n=n.sibling}function Ff(e,t,n){if(Nt&&typeof Nt.onCommitFiberUnmount=="function")try{Nt.onCommitFiberUnmount(ei,n)}catch{}switch(n.tag){case 5:De||Xn(n,t);case 6:var u=Ce,r=ft;Ce=null,Zt(e,t,n),Ce=u,ft=r,Ce!==null&&(ft?(e=Ce,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Ce.removeChild(n.stateNode));break;case 18:Ce!==null&&(ft?(e=Ce,n=n.stateNode,e.nodeType===8?$i(e.parentNode,n):e.nodeType===1&&$i(e,n),cr(e)):$i(Ce,n.stateNode));break;case 4:u=Ce,r=ft,Ce=n.stateNode.containerInfo,ft=!0,Zt(e,t,n),Ce=u,ft=r;break;case 0:case 11:case 14:case 15:if(!De&&(u=n.updateQueue,u!==null&&(u=u.lastEffect,u!==null))){r=u=u.next;do{var o=r,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Gl(n,t,i),r=r.next}while(r!==u)}Zt(e,t,n);break;case 1:if(!De&&(Xn(n,t),u=n.stateNode,typeof u.componentWillUnmount=="function"))try{u.props=n.memoizedProps,u.state=n.memoizedState,u.componentWillUnmount()}catch(l){ce(n,t,l)}Zt(e,t,n);break;case 21:Zt(e,t,n);break;case 22:n.mode&1?(De=(u=De)||n.memoizedState!==null,Zt(e,t,n),De=u):Zt(e,t,n);break;default:Zt(e,t,n)}}function Nc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new lm),t.forEach(function(u){var r=xm.bind(null,e,u);n.has(u)||(n.add(u),u.then(r,r))})}}function ct(e,t){var n=t.deletions;if(n!==null)for(var u=0;ur&&(r=i),u&=~o}if(u=r,u=de()-u,u=(120>u?120:480>u?480:1080>u?1080:1920>u?1920:3e3>u?3e3:4320>u?4320:1960*cm(u/1960))-u,10e?16:e,an===null)var u=!1;else{if(e=an,an=null,qo=0,K&6)throw Error(D(331));var r=K;for(K|=4,R=e.current;R!==null;){var o=R,i=o.child;if(R.flags&16){var l=o.deletions;if(l!==null){for(var a=0;ade()-Ya?Dn(e,0):Za|=n),Ue(e,t)}function Mf(e,t){t===0&&(e.mode&1?(t=Wr,Wr<<=1,!(Wr&130023424)&&(Wr=4194304)):t=1);var n=Te();e=qt(e,t),e!==null&&(Fr(e,t,n),Ue(e,n))}function gm(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Mf(e,n)}function xm(e,t){var n=0;switch(e.tag){case 13:var u=e.stateNode,r=e.memoizedState;r!==null&&(n=r.retryLane);break;case 19:u=e.stateNode;break;default:throw Error(D(314))}u!==null&&u.delete(t),Mf(e,n)}var Lf;Lf=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||$e.current)Oe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Oe=!1,rm(e,t,n);Oe=!!(e.flags&131072)}else Oe=!1,oe&&t.flags&1048576&&$d(t,Mo,t.index);switch(t.lanes=0,t.tag){case 2:var u=t.type;xo(e,t),e=t.pendingProps;var r=cu(t,ze.current);ou(t,n),r=Va(null,t,u,e,r,n);var o=qa();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Be(u)?(o=!0,To(t)):o=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,Oa(t),r.updater=li,t.stateNode=r,r._reactInternals=t,Bl(t,u,e,n),t=Vl(null,t,u,!0,o,n)):(t.tag=0,oe&&o&&ja(t),Re(null,t,r,n),t=t.child),t;case 16:u=t.elementType;e:{switch(xo(e,t),e=t.pendingProps,r=u._init,u=r(u._payload),t.type=u,r=t.tag=vm(u),e=dt(u,e),r){case 0:t=Hl(null,t,u,e,n);break e;case 1:t=Sc(null,t,u,e,n);break e;case 11:t=Cc(null,t,u,e,n);break e;case 14:t=Ec(null,t,u,dt(u.type,e),n);break e}throw Error(D(306,u,""))}return t;case 0:return u=t.type,r=t.pendingProps,r=t.elementType===u?r:dt(u,r),Hl(e,t,u,r,n);case 1:return u=t.type,r=t.pendingProps,r=t.elementType===u?r:dt(u,r),Sc(e,t,u,r,n);case 3:e:{if(bf(t),e===null)throw Error(D(387));u=t.pendingProps,o=t.memoizedState,r=o.element,Wd(e,t),Oo(t,u,null,n);var i=t.memoizedState;if(u=i.element,o.isDehydrated)if(o={element:u,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){r=hu(Error(D(423)),t),t=Ac(e,t,u,n,r);break e}else if(u!==r){r=hu(Error(D(424)),t),t=Ac(e,t,u,n,r);break e}else for(Ke=pn(t.stateNode.containerInfo.firstChild),Ge=t,oe=!0,pt=null,n=Vd(t,null,u,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(du(),u===r){t=Wt(e,t,n);break e}Re(e,t,u,n)}t=t.child}return t;case 5:return Kd(t),e===null&&Il(t),u=t.type,r=t.pendingProps,o=e!==null?e.memoizedProps:null,i=r.children,Rl(u,r)?i=null:o!==null&&Rl(u,o)&&(t.flags|=32),vf(e,t),Re(e,t,i,n),t.child;case 6:return e===null&&Il(t),null;case 13:return kf(e,t,n);case 4:return $a(t,t.stateNode.containerInfo),u=t.pendingProps,e===null?t.child=fu(t,null,u,n):Re(e,t,u,n),t.child;case 11:return u=t.type,r=t.pendingProps,r=t.elementType===u?r:dt(u,r),Cc(e,t,u,r,n);case 7:return Re(e,t,t.pendingProps,n),t.child;case 8:return Re(e,t,t.pendingProps.children,n),t.child;case 12:return Re(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(u=t.type._context,r=t.pendingProps,o=t.memoizedProps,i=r.value,J(Lo,u._currentValue),u._currentValue=i,o!==null)if(xt(o.value,i)){if(o.children===r.children&&!$e.current){t=Wt(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var l=o.dependencies;if(l!==null){i=o.child;for(var a=l.firstContext;a!==null;){if(a.context===u){if(o.tag===1){a=Ut(-1,n&-n),a.tag=2;var s=o.updateQueue;if(s!==null){s=s.shared;var d=s.pending;d===null?a.next=a:(a.next=d.next,d.next=a),s.pending=a}}o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),Ol(o.return,n,t),l.lanes|=n;break}a=a.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(D(341));i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),Ol(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}Re(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,u=t.pendingProps.children,ou(t,n),r=it(r),u=u(r),t.flags|=1,Re(e,t,u,n),t.child;case 14:return u=t.type,r=dt(u,t.pendingProps),r=dt(u.type,r),Ec(e,t,u,r,n);case 15:return xf(e,t,t.type,t.pendingProps,n);case 17:return u=t.type,r=t.pendingProps,r=t.elementType===u?r:dt(u,r),xo(e,t),t.tag=1,Be(u)?(e=!0,To(t)):e=!1,ou(t,n),hf(t,u,r),Bl(t,u,r,n),Vl(null,t,u,!0,e,n);case 19:return wf(e,t,n);case 22:return yf(e,t,n)}throw Error(D(156,t.tag))};function If(e,t){return cd(e,t)}function ym(e,t,n,u){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=u,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ut(e,t,n,u){return new ym(e,t,n,u)}function ts(e){return e=e.prototype,!(!e||!e.isReactComponent)}function vm(e){if(typeof e=="function")return ts(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ba)return 11;if(e===ka)return 14}return 2}function xn(e,t){var n=e.alternate;return n===null?(n=ut(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 bo(e,t,n,u,r,o){var i=2;if(u=e,typeof e=="function")ts(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Vn:return zn(n.children,r,o,t);case va:i=8,r|=8;break;case dl:return e=ut(12,n,t,r|2),e.elementType=dl,e.lanes=o,e;case fl:return e=ut(13,n,t,r),e.elementType=fl,e.lanes=o,e;case pl:return e=ut(19,n,t,r),e.elementType=pl,e.lanes=o,e;case K0:return ci(n,r,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case q0:i=10;break e;case W0:i=9;break e;case ba:i=11;break e;case ka:i=14;break e;case en:i=16,u=null;break e}throw Error(D(130,e==null?e:typeof e,""))}return t=ut(i,n,t,r),t.elementType=e,t.type=u,t.lanes=o,t}function zn(e,t,n,u){return e=ut(7,e,u,t),e.lanes=n,e}function ci(e,t,n,u){return e=ut(22,e,u,t),e.elementType=K0,e.lanes=n,e.stateNode={isHidden:!1},e}function Gi(e,t,n){return e=ut(6,e,null,t),e.lanes=n,e}function Qi(e,t,n){return t=ut(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function bm(e,t,n,u,r){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=Di(0),this.expirationTimes=Di(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Di(0),this.identifierPrefix=u,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function ns(e,t,n,u,r,o,i,l,a){return e=new bm(e,t,n,l,a),t===1?(t=1,o===!0&&(t|=8)):t=0,o=ut(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:u,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Oa(o),e}function km(e,t,n){var u=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Uf)}catch(e){console.error(e)}}Uf(),B0.exports=Ye;var Sm=B0.exports,Oc=Sm;sl.createRoot=Oc.createRoot,sl.hydrateRoot=Oc.hydrateRoot;/** - * react-router v7.15.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */var $c="popstate";function Bc(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function Am(e={}){function t(u,r){var s;let o=(s=r.state)==null?void 0:s.masked,{pathname:i,search:l,hash:a}=o||u.location;return na("",{pathname:i,search:l,hash:a},r.state&&r.state.usr||null,r.state&&r.state.key||"default",o?{pathname:u.location.pathname,search:u.location.search,hash:u.location.hash}:void 0)}function n(u,r){return typeof r=="string"?r:wr(r)}return Dm(t,n,null,e)}function ie(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function yt(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Fm(){return Math.random().toString(36).substring(2,10)}function Uc(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function na(e,t,n=null,u,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?ku(t):t,state:n,key:t&&t.key||u||Fm(),mask:r}}function wr({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function ku(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let u=e.indexOf("?");u>=0&&(t.search=e.substring(u),e=e.substring(0,u)),e&&(t.pathname=e)}return t}function Dm(e,t,n,u={}){let{window:r=document.defaultView,v5Compat:o=!1}=u,i=r.history,l="POP",a=null,s=d();s==null&&(s=0,i.replaceState({...i.state,idx:s},""));function d(){return(i.state||{idx:null}).idx}function p(){l="POP";let C=d(),x=C==null?null:C-s;s=C,a&&a({action:l,location:w.location,delta:x})}function m(C,x){l="PUSH";let f=Bc(C)?C:na(w.location,C,x);s=d()+1;let h=Uc(f,s),v=w.createHref(f.mask||f);try{i.pushState(h,"",v)}catch(b){if(b instanceof DOMException&&b.name==="DataCloneError")throw b;r.location.assign(v)}o&&a&&a({action:l,location:w.location,delta:1})}function y(C,x){l="REPLACE";let f=Bc(C)?C:na(w.location,C,x);s=d();let h=Uc(f,s),v=w.createHref(f.mask||f);i.replaceState(h,"",v),o&&a&&a({action:l,location:w.location,delta:0})}function g(C){return zm(C)}let w={get action(){return l},get location(){return e(r,i)},listen(C){if(a)throw new Error("A history only accepts one active listener");return r.addEventListener($c,p),a=C,()=>{r.removeEventListener($c,p),a=null}},createHref(C){return t(r,C)},createURL:g,encodeLocation(C){let x=g(C);return{pathname:x.pathname,search:x.search,hash:x.hash}},push:m,replace:y,go(C){return i.go(C)}};return w}function zm(e,t=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),ie(n,"No window.location.(origin|href) available to create URL");let u=typeof e=="string"?e:wr(e);return u=u.replace(/ $/,"%20"),!t&&u.startsWith("//")&&(u=n+u),new URL(u,n)}function Hf(e,t,n="/"){return Nm(e,t,n,!1)}function Nm(e,t,n,u,r){let o=typeof t=="string"?ku(t):t,i=Kt(o.pathname||"/",n);if(i==null)return null;let l=jm(e),a=null,s=Vm(i);for(let d=0;a==null&&d{let d={relativePath:s===void 0?i.path||"":s,caseSensitive:i.caseSensitive===!0,childrenIndex:l,route:i};if(d.relativePath.startsWith("/")){if(!d.relativePath.startsWith(u)&&a)return;ie(d.relativePath.startsWith(u),`Absolute route path "${d.relativePath}" nested under path "${u}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),d.relativePath=d.relativePath.slice(u.length)}let p=gt([u,d.relativePath]),m=n.concat(d);i.children&&i.children.length>0&&(ie(i.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${p}".`),Vf(i.children,t,m,p,a)),!(i.path==null&&!i.index)&&t.push({path:p,score:$m(p,i.index),routesMeta:m})};return e.forEach((i,l)=>{var a;if(i.path===""||!((a=i.path)!=null&&a.includes("?")))o(i,l);else for(let s of qf(i.path))o(i,l,!0,s)}),t}function qf(e){let t=e.split("/");if(t.length===0)return[];let[n,...u]=t,r=n.endsWith("?"),o=n.replace(/\?$/,"");if(u.length===0)return r?[o,""]:[o];let i=qf(u.join("/")),l=[];return l.push(...i.map(a=>a===""?o:[o,a].join("/"))),r&&l.push(...i),l.map(a=>e.startsWith("/")&&a===""?"/":a)}function Rm(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Bm(t.routesMeta.map(u=>u.childrenIndex),n.routesMeta.map(u=>u.childrenIndex)))}var Tm=/^:[\w-]+$/,Pm=3,Mm=2,Lm=1,Im=10,Om=-2,Hc=e=>e==="*";function $m(e,t){let n=e.split("/"),u=n.length;return n.some(Hc)&&(u+=Om),t&&(u+=Mm),n.filter(r=>!Hc(r)).reduce((r,o)=>r+(Tm.test(o)?Pm:o===""?Lm:Im),u)}function Bm(e,t){return e.length===t.length&&e.slice(0,-1).every((u,r)=>u===t[r])?e[e.length-1]-t[t.length-1]:0}function Um(e,t,n=!1){let{routesMeta:u}=e,r={},o="/",i=[];for(let l=0;l{if(d==="*"){let g=l[m]||"";i=o.slice(0,o.length-g.length).replace(/(.)\/+$/,"$1")}const y=l[m];return p&&!y?s[d]=void 0:s[d]=(y||"").replace(/%2F/g,"/"),s},{}),pathname:o,pathnameBase:i,pattern:e}}function Hm(e,t=!1,n=!0){yt(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let u=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,l,a,s,d)=>{if(u.push({paramName:l,isOptional:a!=null}),a){let p=d.charAt(s+i.length);return p&&p!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(u.push({paramName:"*"}),r+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":e!==""&&e!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,t?void 0:"i"),u]}function Vm(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return yt(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function Kt(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,u=e.charAt(n);return u&&u!=="/"?null:e.slice(n)||"/"}var qm=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function Wm(e,t="/"){let{pathname:n,search:u="",hash:r=""}=typeof e=="string"?ku(e):e,o;return n?(n=Wf(n),n.startsWith("/")?o=Vc(n.substring(1),"/"):o=Vc(n,t)):o=t,{pathname:o,search:Qm(u),hash:Zm(r)}}function Vc(e,t){let n=Qo(t).split("/");return e.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function Zi(e,t,n,u){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(u)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Km(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function is(e){let t=Km(e);return t.map((n,u)=>u===t.length-1?n.pathname:n.pathnameBase)}function mi(e,t,n,u=!1){let r;typeof e=="string"?r=ku(e):(r={...e},ie(!r.pathname||!r.pathname.includes("?"),Zi("?","pathname","search",r)),ie(!r.pathname||!r.pathname.includes("#"),Zi("#","pathname","hash",r)),ie(!r.search||!r.search.includes("#"),Zi("#","search","hash",r)));let o=e===""||r.pathname==="",i=o?"/":r.pathname,l;if(i==null)l=n;else{let p=t.length-1;if(!u&&i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),p-=1;r.pathname=m.join("/")}l=p>=0?t[p]:"/"}let a=Wm(r,l),s=i&&i!=="/"&&i.endsWith("/"),d=(o||i===".")&&n.endsWith("/");return!a.pathname.endsWith("/")&&(s||d)&&(a.pathname+="/"),a}var Wf=e=>e.replace(/\/\/+/g,"/"),gt=e=>Wf(e.join("/")),Qo=e=>e.replace(/\/+$/,""),Gm=e=>Qo(e).replace(/^\/*/,"/"),Qm=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Zm=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,Ym=class{constructor(e,t,n,u=!1){this.status=e,this.statusText=t||"",this.internal=u,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Jm(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function Xm(e){let t=e.map(n=>n.route.path).filter(Boolean);return gt(t)||"/"}var Kf=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Gf(e,t){let n=e;if(typeof n!="string"||!qm.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let u=n,r=!1;if(Kf)try{let o=new URL(window.location.href),i=n.startsWith("//")?new URL(o.protocol+n):new URL(n),l=Kt(i.pathname,t);i.origin===o.origin&&l!=null?n=l+i.search+i.hash:r=!0}catch{yt(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:u,isExternal:r,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Qf=["POST","PUT","PATCH","DELETE"];new Set(Qf);var e2=["GET",...Qf];new Set(e2);var wu=k.createContext(null);wu.displayName="DataRouter";var gi=k.createContext(null);gi.displayName="DataRouterState";var Zf=k.createContext(!1);function t2(){return k.useContext(Zf)}var Yf=k.createContext({isTransitioning:!1});Yf.displayName="ViewTransition";var n2=k.createContext(new Map);n2.displayName="Fetchers";var u2=k.createContext(null);u2.displayName="Await";var Xe=k.createContext(null);Xe.displayName="Navigation";var jr=k.createContext(null);jr.displayName="Location";var bt=k.createContext({outlet:null,matches:[],isDataRoute:!1});bt.displayName="Route";var ls=k.createContext(null);ls.displayName="RouteError";var Jf="REACT_ROUTER_ERROR",r2="REDIRECT",o2="ROUTE_ERROR_RESPONSE";function i2(e){if(e.startsWith(`${Jf}:${r2}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function l2(e){if(e.startsWith(`${Jf}:${o2}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new Ym(t.status,t.statusText,t.data)}catch{}}function a2(e,{relative:t}={}){ie(_u(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:u}=k.useContext(Xe),{hash:r,pathname:o,search:i}=Tr(e,{relative:t}),l=o;return n!=="/"&&(l=o==="/"?n:gt([n,o])),u.createHref({pathname:l,search:i,hash:r})}function _u(){return k.useContext(jr)!=null}function st(){return ie(_u(),"useLocation() may be used only in the context of a component."),k.useContext(jr).location}var Xf="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function ep(e){k.useContext(Xe).static||k.useLayoutEffect(e)}function Rr(){let{isDataRoute:e}=k.useContext(bt);return e?k2():s2()}function s2(){ie(_u(),"useNavigate() may be used only in the context of a component.");let e=k.useContext(wu),{basename:t,navigator:n}=k.useContext(Xe),{matches:u}=k.useContext(bt),{pathname:r}=st(),o=JSON.stringify(is(u)),i=k.useRef(!1);return ep(()=>{i.current=!0}),k.useCallback((a,s={})=>{if(yt(i.current,Xf),!i.current)return;if(typeof a=="number"){n.go(a);return}let d=mi(a,JSON.parse(o),r,s.relative==="path");e==null&&t!=="/"&&(d.pathname=d.pathname==="/"?t:gt([t,d.pathname])),(s.replace?n.replace:n.push)(d,s.state,s)},[t,n,o,r,e])}k.createContext(null);function tp(){let{matches:e}=k.useContext(bt),t=e[e.length-1];return(t==null?void 0:t.params)??{}}function Tr(e,{relative:t}={}){let{matches:n}=k.useContext(bt),{pathname:u}=st(),r=JSON.stringify(is(n));return k.useMemo(()=>mi(e,JSON.parse(r),u,t==="path"),[e,r,u,t])}function c2(e,t){return np(e,t)}function np(e,t,n){var C;ie(_u(),"useRoutes() may be used only in the context of a component.");let{navigator:u}=k.useContext(Xe),{matches:r}=k.useContext(bt),o=r[r.length-1],i=o?o.params:{},l=o?o.pathname:"/",a=o?o.pathnameBase:"/",s=o&&o.route;{let x=s&&s.path||"";rp(l,!s||x.endsWith("*")||x.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${l}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let d=st(),p;if(t){let x=typeof t=="string"?ku(t):t;ie(a==="/"||((C=x.pathname)==null?void 0:C.startsWith(a)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${a}" but pathname "${x.pathname}" was given in the \`location\` prop.`),p=x}else p=d;let m=p.pathname||"/",y=m;if(a!=="/"){let x=a.replace(/^\//,"").split("/");y="/"+m.replace(/^\//,"").split("/").slice(x.length).join("/")}let g=n&&n.state.matches.length?n.state.matches.map(x=>Object.assign(x,{route:n.manifest[x.route.id]||x.route})):Hf(e,{pathname:y});yt(s||g!=null,`No routes matched location "${p.pathname}${p.search}${p.hash}" `),yt(g==null||g[g.length-1].route.element!==void 0||g[g.length-1].route.Component!==void 0||g[g.length-1].route.lazy!==void 0,`Matched leaf route at location "${p.pathname}${p.search}${p.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let w=m2(g&&g.map(x=>Object.assign({},x,{params:Object.assign({},i,x.params),pathname:gt([a,u.encodeLocation?u.encodeLocation(x.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:x.pathname]),pathnameBase:x.pathnameBase==="/"?a:gt([a,u.encodeLocation?u.encodeLocation(x.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:x.pathnameBase])})),r,n);return t&&w?k.createElement(jr.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...p},navigationType:"POP"}},w):w}function d2(){let e=b2(),t=Jm(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,u="rgba(200,200,200, 0.5)",r={padding:"0.5rem",backgroundColor:u},o={padding:"2px 4px",backgroundColor:u},i=null;return console.error("Error handled by React Router default ErrorBoundary:",e),i=k.createElement(k.Fragment,null,k.createElement("p",null,"💿 Hey developer 👋"),k.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",k.createElement("code",{style:o},"ErrorBoundary")," or"," ",k.createElement("code",{style:o},"errorElement")," prop on your route.")),k.createElement(k.Fragment,null,k.createElement("h2",null,"Unexpected Application Error!"),k.createElement("h3",{style:{fontStyle:"italic"}},t),n?k.createElement("pre",{style:r},n):null,i)}var f2=k.createElement(d2,null),up=class extends k.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const n=l2(e.digest);n&&(e=n)}let t=e!==void 0?k.createElement(bt.Provider,{value:this.props.routeContext},k.createElement(ls.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?k.createElement(p2,{error:e},t):t}};up.contextType=Zf;var Yi=new WeakMap;function p2({children:e,error:t}){let{basename:n}=k.useContext(Xe);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let u=i2(t.digest);if(u){let r=Yi.get(t);if(r)throw r;let o=Gf(u.location,n);if(Kf&&!Yi.get(t))if(o.isExternal||u.reloadDocument)window.location.href=o.absoluteURL||o.to;else{const i=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(o.to,{replace:u.replace}));throw Yi.set(t,i),i}return k.createElement("meta",{httpEquiv:"refresh",content:`0;url=${o.absoluteURL||o.to}`})}}return e}function h2({routeContext:e,match:t,children:n}){let u=k.useContext(wu);return u&&u.static&&u.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(u.staticContext._deepestRenderedBoundaryId=t.route.id),k.createElement(bt.Provider,{value:e},n)}function m2(e,t=[],n){let u=n==null?void 0:n.state;if(e==null){if(!u)return null;if(u.errors)e=u.matches;else if(t.length===0&&!u.initialized&&u.matches.length>0)e=u.matches;else return null}let r=e,o=u==null?void 0:u.errors;if(o!=null){let d=r.findIndex(p=>p.route.id&&(o==null?void 0:o[p.route.id])!==void 0);ie(d>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),r=r.slice(0,Math.min(r.length,d+1))}let i=!1,l=-1;if(n&&u){i=u.renderFallback;for(let d=0;d=0?r=r.slice(0,l+1):r=[r[0]];break}}}}let a=n==null?void 0:n.onError,s=u&&a?(d,p)=>{var m,y;a(d,{location:u.location,params:((y=(m=u.matches)==null?void 0:m[0])==null?void 0:y.params)??{},pattern:Xm(u.matches),errorInfo:p})}:void 0;return r.reduceRight((d,p,m)=>{let y,g=!1,w=null,C=null;u&&(y=o&&p.route.id?o[p.route.id]:void 0,w=p.route.errorElement||f2,i&&(l<0&&m===0?(rp("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),g=!0,C=null):l===m&&(g=!0,C=p.route.hydrateFallbackElement||null)));let x=t.concat(r.slice(0,m+1)),f=()=>{let h;return y?h=w:g?h=C:p.route.Component?h=k.createElement(p.route.Component,null):p.route.element?h=p.route.element:h=d,k.createElement(h2,{match:p,routeContext:{outlet:d,matches:x,isDataRoute:u!=null},children:h})};return u&&(p.route.ErrorBoundary||p.route.errorElement||m===0)?k.createElement(up,{location:u.location,revalidation:u.revalidation,component:w,error:y,children:f(),routeContext:{outlet:null,matches:x,isDataRoute:!0},onError:s}):f()},null)}function as(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function g2(e){let t=k.useContext(wu);return ie(t,as(e)),t}function x2(e){let t=k.useContext(gi);return ie(t,as(e)),t}function y2(e){let t=k.useContext(bt);return ie(t,as(e)),t}function ss(e){let t=y2(e),n=t.matches[t.matches.length-1];return ie(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function v2(){return ss("useRouteId")}function b2(){var u;let e=k.useContext(ls),t=x2("useRouteError"),n=ss("useRouteError");return e!==void 0?e:(u=t.errors)==null?void 0:u[n]}function k2(){let{router:e}=g2("useNavigate"),t=ss("useNavigate"),n=k.useRef(!1);return ep(()=>{n.current=!0}),k.useCallback(async(r,o={})=>{yt(n.current,Xf),n.current&&(typeof r=="number"?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...o}))},[e,t])}var qc={};function rp(e,t,n){!t&&!qc[e]&&(qc[e]=!0,yt(!1,n))}k.memo(w2);function w2({routes:e,manifest:t,future:n,state:u,isStatic:r,onError:o}){return np(e,void 0,{manifest:t,state:u,isStatic:r,onError:o})}function _2({to:e,replace:t,state:n,relative:u}){ie(_u()," may be used only in the context of a component.");let{static:r}=k.useContext(Xe);yt(!r," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:o}=k.useContext(bt),{pathname:i}=st(),l=Rr(),a=mi(e,is(o),i,u==="path"),s=JSON.stringify(a);return k.useEffect(()=>{l(JSON.parse(s),{replace:t,state:n,relative:u})},[l,s,u,t,n]),null}function Xt(e){ie(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function C2({basename:e="/",children:t=null,location:n,navigationType:u="POP",navigator:r,static:o=!1,useTransitions:i}){ie(!_u(),"You cannot render a inside another . You should never have more than one in your app.");let l=e.replace(/^\/*/,"/"),a=k.useMemo(()=>({basename:l,navigator:r,static:o,useTransitions:i,future:{}}),[l,r,o,i]);typeof n=="string"&&(n=ku(n));let{pathname:s="/",search:d="",hash:p="",state:m=null,key:y="default",mask:g}=n,w=k.useMemo(()=>{let C=Kt(s,l);return C==null?null:{location:{pathname:C,search:d,hash:p,state:m,key:y,mask:g},navigationType:u}},[l,s,d,p,m,y,u,g]);return yt(w!=null,` is not able to match the URL "${s}${d}${p}" because it does not start with the basename, so the won't render anything.`),w==null?null:k.createElement(Xe.Provider,{value:a},k.createElement(jr.Provider,{children:t,value:w}))}function E2({children:e,location:t}){return c2(ua(e),t)}function ua(e,t=[]){let n=[];return k.Children.forEach(e,(u,r)=>{if(!k.isValidElement(u))return;let o=[...t,r];if(u.type===k.Fragment){n.push.apply(n,ua(u.props.children,o));return}ie(u.type===Xt,`[${typeof u.type=="string"?u.type:u.type.name}] is not a component. All component children of must be a or `),ie(!u.props.index||!u.props.children,"An index route cannot have child routes.");let i={id:u.props.id||o.join("-"),caseSensitive:u.props.caseSensitive,element:u.props.element,Component:u.props.Component,index:u.props.index,path:u.props.path,middleware:u.props.middleware,loader:u.props.loader,action:u.props.action,hydrateFallbackElement:u.props.hydrateFallbackElement,HydrateFallback:u.props.HydrateFallback,errorElement:u.props.errorElement,ErrorBoundary:u.props.ErrorBoundary,hasErrorBoundary:u.props.hasErrorBoundary===!0||u.props.ErrorBoundary!=null||u.props.errorElement!=null,shouldRevalidate:u.props.shouldRevalidate,handle:u.props.handle,lazy:u.props.lazy};u.props.children&&(i.children=ua(u.props.children,o)),n.push(i)}),n}var ko="get",wo="application/x-www-form-urlencoded";function xi(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function S2(e){return xi(e)&&e.tagName.toLowerCase()==="button"}function A2(e){return xi(e)&&e.tagName.toLowerCase()==="form"}function F2(e){return xi(e)&&e.tagName.toLowerCase()==="input"}function D2(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function z2(e,t){return e.button===0&&(!t||t==="_self")&&!D2(e)}var ro=null;function N2(){if(ro===null)try{new FormData(document.createElement("form"),0),ro=!1}catch{ro=!0}return ro}var j2=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Ji(e){return e!=null&&!j2.has(e)?(yt(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${wo}"`),null):e}function R2(e,t){let n,u,r,o,i;if(A2(e)){let l=e.getAttribute("action");u=l?Kt(l,t):null,n=e.getAttribute("method")||ko,r=Ji(e.getAttribute("enctype"))||wo,o=new FormData(e)}else if(S2(e)||F2(e)&&(e.type==="submit"||e.type==="image")){let l=e.form;if(l==null)throw new Error('Cannot submit a +
+
+ +
+ {search ? ( + <> +

没有匹配「{search}」的账号

+ + + ) : ( + <> +

还没有创建任何账号

+ + )}
)} diff --git a/web/client/src/components/assets/AssetGallery.tsx b/web/client/src/components/assets/AssetGallery.tsx index 88e467a..fee50ef 100644 --- a/web/client/src/components/assets/AssetGallery.tsx +++ b/web/client/src/components/assets/AssetGallery.tsx @@ -16,6 +16,22 @@ interface ManifestGroup { type TypeTab = 'all' | 'image' | 'video'; +function AssetGroupSkeleton() { + return ( +
+
+
+
+
+
+ {Array.from({ length: 4 }).map((_, i) => ( +
+ ))} +
+
+ ); +} + export function AssetGallery() { const [accountFilter, setAccountFilter] = useState(''); const [typeTab, setTypeTab] = useState('all'); @@ -31,13 +47,11 @@ export function AssetGallery() { fetch('/api/assets/manifests').then((r) => r.json()).then(setManifests).catch(() => {}); }, []); - // Filter by type tab const filtered = useMemo(() => { if (typeTab === 'all') return assets; return assets.filter((a) => a.type === typeTab); }, [assets, typeTab]); - // Group filtered assets by manifest_path const grouped = useMemo(() => { const map = new Map(); for (const asset of filtered) { @@ -73,7 +87,6 @@ export function AssetGallery() { return parts.join(' · '); }; - // Filter manifests by account const filteredGroups = useMemo(() => { if (!accountFilter) return [...grouped.entries()]; return [...grouped.entries()].filter(([key]) => { @@ -92,21 +105,20 @@ export function AssetGallery() { return (
{/* Header */} -
- {/* Type tabs */} -
+
+
{tabs.map(({ key, label, icon: Icon, count }) => ( @@ -116,7 +128,7 @@ export function AssetGallery() {
- @@ -134,12 +146,16 @@ export function AssetGallery() { {/* Content */}
{loading ? ( -

加载中...

+
+ {Array.from({ length: 3 }).map((_, i) => )} +
) : filteredGroups.length === 0 ? ( -
- -

{typeTab === 'all' ? '暂无资产' : `暂无${typeTab === 'image' ? '图片' : '视频'}`}

-

点击"扫描"从 output 目录导入

+
+
+ +
+

{typeTab === 'all' ? '暂无资产' : `暂无${typeTab === 'image' ? '图片' : '视频'}`}

+

点击「扫描」从 output 目录导入

) : ( filteredGroups.map(([manifestPath, groupAssets]) => ( diff --git a/web/client/src/components/chat/ChatMessage.tsx b/web/client/src/components/chat/ChatMessage.tsx index 822e31d..98c0997 100644 --- a/web/client/src/components/chat/ChatMessage.tsx +++ b/web/client/src/components/chat/ChatMessage.tsx @@ -2,6 +2,8 @@ import { useState, useCallback } from 'react'; import { cn } from '@/lib/utils'; import { renderMarkdown } from '@/lib/markdown'; import { Bot, User, Copy, Trash2, ChevronDown, ChevronRight, RefreshCw, ArrowRight, Quote, Brain } from 'lucide-react'; +import { ConfirmDialog } from '@/components/ui/confirm'; +import { useConfirm } from '@/hooks/useConfirm'; import { useToast } from '@/hooks/useToast'; import type { Message } from '@/types'; @@ -29,6 +31,7 @@ export function ChatMessage({ message, isLast, isThinking, onRegenerate, onConti const isTool = message.role === 'tool'; const [reasoningOpen, setReasoningOpen] = useState(false); const { toast } = useToast(); + const { confirmState, confirm, handleConfirm, handleCancel } = useConfirm(); const state = getState(message, !!isLast, !!isThinking); const handleCopy = useCallback(() => { @@ -37,10 +40,15 @@ export function ChatMessage({ message, isLast, isThinking, onRegenerate, onConti }); }, [message.content, toast]); - const handleDelete = useCallback(() => { - if (!confirm('确定删除这条消息?')) return; - onDelete?.(message.id); - }, [message.id, onDelete]); + const handleDeleteClick = useCallback(async () => { + const ok = await confirm({ + title: '删除消息', + description: '确定要删除这条消息吗?', + confirmText: '删除', + variant: 'danger', + }); + if (ok) onDelete?.(message.id); + }, [message.id, onDelete, confirm]); // Tool messages if (isTool) { @@ -138,7 +146,7 @@ export function ChatMessage({ message, isLast, isThinking, onRegenerate, onConti className="flex items-center gap-1 px-1.5 py-0.5 rounded-md text-[10px] text-zinc-400 hover:text-zinc-600 hover:bg-zinc-100 transition-colors"> 引用 - @@ -153,6 +161,17 @@ export function ChatMessage({ message, isLast, isThinking, onRegenerate, onConti
)}
+ +
); } diff --git a/web/client/src/components/layout/AppLayout.tsx b/web/client/src/components/layout/AppLayout.tsx index bb79df2..c9998f6 100644 --- a/web/client/src/components/layout/AppLayout.tsx +++ b/web/client/src/components/layout/AppLayout.tsx @@ -1,4 +1,5 @@ -import { useLocation } from 'react-router-dom'; +import { useEffect } from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; import { Sidebar } from './Sidebar'; import { MiddlePanel } from './MiddlePanel'; import { ToastContainer } from '@/components/ui/Toast'; @@ -6,9 +7,24 @@ import { useToast } from '@/hooks/useToast'; export function AppLayout({ children }: { children: React.ReactNode }) { const { pathname } = useLocation(); + const navigate = useNavigate(); const isChat = pathname.startsWith('/chat'); const { toasts, dismiss } = useToast(); + // Keyboard navigation: Escape to go back from detail views + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key !== 'Escape') return; + if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) return; + + if (pathname.startsWith('/accounts/') && pathname !== '/accounts') { + navigate('/accounts'); + } + }; + document.addEventListener('keydown', handleKeyDown); + return () => document.removeEventListener('keydown', handleKeyDown); + }, [pathname, navigate]); + return (
diff --git a/web/client/src/components/layout/MiddlePanel.tsx b/web/client/src/components/layout/MiddlePanel.tsx index 509d34f..fd12c87 100644 --- a/web/client/src/components/layout/MiddlePanel.tsx +++ b/web/client/src/components/layout/MiddlePanel.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useMemo } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; -import { Plus, Pin, Trash2, MessageCircle, Search } from 'lucide-react'; +import { Pin, Trash2, MessageCircle, Search, Sparkles } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { ScrollArea } from '@/components/ui/scroll-area'; import { ConfirmDialog } from '@/components/ui/confirm'; @@ -16,7 +16,6 @@ export function MiddlePanel() { const location = useLocation(); const { toast } = useToast(); const { confirmState, confirm, handleConfirm, handleCancel } = useConfirm(); - const [pendingDeleteId, setPendingDeleteId] = useState(null); const conversationId = useMemo(() => { const match = location.pathname.match(/^\/chat\/(.+)$/); @@ -50,13 +49,20 @@ export function MiddlePanel() { loadConversations(); }; - const handleDelete = async (id: string, e: React.MouseEvent) => { + const handleDeleteClick = async (id: string, e: React.MouseEvent) => { e.stopPropagation(); - if (!confirm('确定删除这个对话?')) return; - await api.deleteConversation(id); - loadConversations(); - toast('对话已删除', 'success'); - if (id === conversationId) navigate('/chat'); + const ok = await confirm({ + title: '删除对话', + description: '确定要删除这个对话吗?此操作无法撤销。', + confirmText: '删除', + variant: 'danger', + }); + if (ok) { + await api.deleteConversation(id); + loadConversations(); + toast('对话已删除', 'success'); + if (id === conversationId) navigate('/chat'); + } }; const formatDate = (d: string) => { @@ -68,73 +74,166 @@ export function MiddlePanel() { return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' }); }; + // Split pinned and unpinned + const pinned = conversations.filter((c) => c.pinned); + const unpinned = conversations.filter((c) => !c.pinned); + + // Group unpinned by time bucket + const now = new Date(); + const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime(); + const yesterdayStart = todayStart - 86400000; + const weekStart = todayStart - 6 * 86400000; + + type Bucket = { label: string; items: typeof unpinned }; + const buckets: Bucket[] = [ + { label: '今天', items: [] }, + { label: '昨天', items: [] }, + { label: '7 天内', items: [] }, + { label: '更早', items: [] }, + ]; + for (const c of unpinned) { + const t = new Date(c.updated_at).getTime(); + if (t >= todayStart) buckets[0].items.push(c); + else if (t >= yesterdayStart) buckets[1].items.push(c); + else if (t >= weekStart) buckets[2].items.push(c); + else buckets[3].items.push(c); + } + return ( -