diff --git a/apps/canvas/server/front/assets/index-DITJ3yy7.css b/apps/canvas/server/front/assets/index-DITJ3yy7.css
new file mode 100644
index 0000000..400cea4
--- /dev/null
+++ b/apps/canvas/server/front/assets/index-DITJ3yy7.css
@@ -0,0 +1 @@
+*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 0 0% 3.9%;--card: 0 0% 100%;--card-foreground: 0 0% 3.9%;--popover: 0 0% 100%;--popover-foreground: 0 0% 3.9%;--primary: 0 0% 9%;--primary-foreground: 0 0% 98%;--secondary: 0 0% 96.1%;--secondary-foreground: 0 0% 9%;--muted: 0 0% 96.1%;--muted-foreground: 0 0% 45.1%;--accent: 0 0% 96.1%;--accent-foreground: 0 0% 9%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 0 0% 89.8%;--input: 0 0% 89.8%;--ring: 0 0% 3.9%;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%;--radius: .5rem ;--sidebar-background: 0 0% 98%;--sidebar-foreground: 240 5.3% 26.1%;--sidebar-primary: 240 5.9% 10%;--sidebar-primary-foreground: 0 0% 98%;--sidebar-accent: 240 4.8% 95.9%;--sidebar-accent-foreground: 240 5.9% 10%;--sidebar-border: 220 13% 91%;--sidebar-ring: 217.2 91.2% 59.8%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[100\]{z-index:100}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-4{width:1rem;height:1rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2\.5{height:.625rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-96{max-height:24rem}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-svh{min-height:100svh}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-5{width:1.25rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[400px\]{width:400px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-5{min-width:1.25rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-lg{max-width:32rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.caption-top{caption-side:top}.-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-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--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-x-px{--tw-translate-x: 1px;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-\[-50\%\]{--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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.\!justify-end{justify-content:flex-end!important}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.\!space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(1rem * var(--tw-space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-destructive{border-color:hsl(var(--destructive))}.border-input{border-color:hsl(var(--input))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-yellow-500{--tw-border-opacity: 1;border-color:rgb(234 179 8 / var(--tw-border-opacity))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity))}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-border{background-color:hsl(var(--border))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-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-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-\[0\.8rem\]{font-size:.8rem}.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}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.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-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 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-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.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}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--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))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1: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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-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-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);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))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);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 accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed],.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--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))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\: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)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:flex{display:flex}.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:block{display:block}.md\:flex{display:flex}.md\:max-w-\[420px\]{max-width:420px}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\: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)}}.\[\&\+div\]\:text-xs+div{font-size:.75rem;line-height:1rem}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;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))}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;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))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}.react-flow__handle.connectingto{background:#ff6060}.react-flow__handle.valid{background:#5d9}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgb(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgb(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}
diff --git a/apps/canvas/server/front/assets/index-DRnLehre.js b/apps/canvas/server/front/assets/index-DRnLehre.js
new file mode 100644
index 0000000..606d3cd
--- /dev/null
+++ b/apps/canvas/server/front/assets/index-DRnLehre.js
@@ -0,0 +1,126 @@
+function h3(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const o in r)if(o!=="default"&&!(o in e)){const i=Object.getOwnPropertyDescriptor(r,o);i&&Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:()=>r[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function Sh(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Hy={exports:{}},Cu={},By={exports:{}},Ee={};/**
+ * @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 qa=Symbol.for("react.element"),m3=Symbol.for("react.portal"),g3=Symbol.for("react.fragment"),v3=Symbol.for("react.strict_mode"),y3=Symbol.for("react.profiler"),x3=Symbol.for("react.provider"),w3=Symbol.for("react.context"),_3=Symbol.for("react.forward_ref"),S3=Symbol.for("react.suspense"),b3=Symbol.for("react.memo"),C3=Symbol.for("react.lazy"),Pg=Symbol.iterator;function E3(e){return e===null||typeof e!="object"?null:(e=Pg&&e[Pg]||e["@@iterator"],typeof e=="function"?e:null)}var Uy={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Wy=Object.assign,Zy={};function ls(e,t,n){this.props=e,this.context=t,this.refs=Zy,this.updater=n||Uy}ls.prototype.isReactComponent={};ls.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")};ls.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Gy(){}Gy.prototype=ls.prototype;function bh(e,t,n){this.props=e,this.context=t,this.refs=Zy,this.updater=n||Uy}var Ch=bh.prototype=new Gy;Ch.constructor=bh;Wy(Ch,ls.prototype);Ch.isPureReactComponent=!0;var Ig=Array.isArray,Yy=Object.prototype.hasOwnProperty,Eh={current:null},Ky={key:!0,ref:!0,__self:!0,__source:!0};function Xy(e,t,n){var r,o={},i=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(i=""+t.key),t)Yy.call(t,r)&&!Ky.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(a===1)o.children=n;else if(1<a){for(var l=Array(a),c=0;c<a;c++)l[c]=arguments[c+2];o.children=l}if(e&&e.defaultProps)for(r in a=e.defaultProps,a)o[r]===void 0&&(o[r]=a[r]);return{$$typeof:qa,type:e,key:i,ref:s,props:o,_owner:Eh.current}}function k3(e,t){return{$$typeof:qa,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function kh(e){return typeof e=="object"&&e!==null&&e.$$typeof===qa}function N3(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var Rg=/\/+/g;function jd(e,t){return typeof e=="object"&&e!==null&&e.key!=null?N3(""+e.key):t.toString(36)}function Ql(e,t,n,r,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(i){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case qa:case m3:s=!0}}if(s)return s=e,o=o(s),e=r===""?"."+jd(s,0):r,Ig(o)?(n="",e!=null&&(n=e.replace(Rg,"$&/")+"/"),Ql(o,t,n,"",function(c){return c})):o!=null&&(kh(o)&&(o=k3(o,n+(!o.key||s&&s.key===o.key?"":(""+o.key).replace(Rg,"$&/")+"/")+e)),t.push(o)),1;if(s=0,r=r===""?".":r+":",Ig(e))for(var a=0;a<e.length;a++){i=e[a];var l=r+jd(i,a);s+=Ql(i,t,n,l,o)}else if(l=E3(e),typeof l=="function")for(e=l.call(e),a=0;!(i=e.next()).done;)i=i.value,l=r+jd(i,a++),s+=Ql(i,t,n,l,o);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function yl(e,t,n){if(e==null)return e;var r=[],o=0;return Ql(e,r,"","",function(i){return t.call(n,i,o++)}),r}function T3(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var bt={current:null},Jl={transition:null},P3={ReactCurrentDispatcher:bt,ReactCurrentBatchConfig:Jl,ReactCurrentOwner:Eh};function qy(){throw Error("act(...) is not supported in production builds of React.")}Ee.Children={map:yl,forEach:function(e,t,n){yl(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return yl(e,function(){t++}),t},toArray:function(e){return yl(e,function(t){return t})||[]},only:function(e){if(!kh(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};Ee.Component=ls;Ee.Fragment=g3;Ee.Profiler=y3;Ee.PureComponent=bh;Ee.StrictMode=v3;Ee.Suspense=S3;Ee.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P3;Ee.act=qy;Ee.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=Wy({},e.props),o=e.key,i=e.ref,s=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,s=Eh.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var a=e.type.defaultProps;for(l in t)Yy.call(t,l)&&!Ky.hasOwnProperty(l)&&(r[l]=t[l]===void 0&&a!==void 0?a[l]:t[l])}var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){a=Array(l);for(var c=0;c<l;c++)a[c]=arguments[c+2];r.children=a}return{$$typeof:qa,type:e.type,key:o,ref:i,props:r,_owner:s}};Ee.createContext=function(e){return e={$$typeof:w3,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:x3,_context:e},e.Consumer=e};Ee.createElement=Xy;Ee.createFactory=function(e){var t=Xy.bind(null,e);return t.type=e,t};Ee.createRef=function(){return{current:null}};Ee.forwardRef=function(e){return{$$typeof:_3,render:e}};Ee.isValidElement=kh;Ee.lazy=function(e){return{$$typeof:C3,_payload:{_status:-1,_result:e},_init:T3}};Ee.memo=function(e,t){return{$$typeof:b3,type:e,compare:t===void 0?null:t}};Ee.startTransition=function(e){var t=Jl.transition;Jl.transition={};try{e()}finally{Jl.transition=t}};Ee.unstable_act=qy;Ee.useCallback=function(e,t){return bt.current.useCallback(e,t)};Ee.useContext=function(e){return bt.current.useContext(e)};Ee.useDebugValue=function(){};Ee.useDeferredValue=function(e){return bt.current.useDeferredValue(e)};Ee.useEffect=function(e,t){return bt.current.useEffect(e,t)};Ee.useId=function(){return bt.current.useId()};Ee.useImperativeHandle=function(e,t,n){return bt.current.useImperativeHandle(e,t,n)};Ee.useInsertionEffect=function(e,t){return bt.current.useInsertionEffect(e,t)};Ee.useLayoutEffect=function(e,t){return bt.current.useLayoutEffect(e,t)};Ee.useMemo=function(e,t){return bt.current.useMemo(e,t)};Ee.useReducer=function(e,t,n){return bt.current.useReducer(e,t,n)};Ee.useRef=function(e){return bt.current.useRef(e)};Ee.useState=function(e){return bt.current.useState(e)};Ee.useSyncExternalStore=function(e,t,n){return bt.current.useSyncExternalStore(e,t,n)};Ee.useTransition=function(){return bt.current.useTransition()};Ee.version="18.3.1";By.exports=Ee;var x=By.exports;const de=Sh(x),Nh=h3({__proto__:null,default:de},[x]);/**
+ * @license React
+ * react-jsx-runtime.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 I3=x,R3=Symbol.for("react.element"),A3=Symbol.for("react.fragment"),M3=Object.prototype.hasOwnProperty,j3=I3.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,O3={key:!0,ref:!0,__self:!0,__source:!0};function Qy(e,t,n){var r,o={},i=null,s=null;n!==void 0&&(i=""+n),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(s=t.ref);for(r in t)M3.call(t,r)&&!O3.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)o[r]===void 0&&(o[r]=t[r]);return{$$typeof:R3,type:e,key:i,ref:s,props:o,_owner:j3.current}}Cu.Fragment=A3;Cu.jsx=Qy;Cu.jsxs=Qy;Hy.exports=Cu;var h=Hy.exports,Jy={exports:{}},Xt={},e1={exports:{}},t1={};/**
+ * @license React
+ * scheduler.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.
+ */(function(e){function t(k,I){var z=k.length;k.push(I);e:for(;0<z;){var U=z-1>>>1,Y=k[U];if(0<o(Y,I))k[U]=I,k[z]=Y,z=U;else break e}}function n(k){return k.length===0?null:k[0]}function r(k){if(k.length===0)return null;var I=k[0],z=k.pop();if(z!==I){k[0]=z;e:for(var U=0,Y=k.length,H=Y>>>1;U<H;){var Z=2*(U+1)-1,K=k[Z],G=Z+1,V=k[G];if(0>o(K,z))G<Y&&0>o(V,K)?(k[U]=V,k[G]=z,U=G):(k[U]=K,k[Z]=z,U=Z);else if(G<Y&&0>o(V,z))k[U]=V,k[G]=z,U=G;else break e}}return I}function o(k,I){var z=k.sortIndex-I.sortIndex;return z!==0?z:k.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],c=[],d=1,u=null,f=3,p=!1,y=!1,v=!1,_=typeof setTimeout=="function"?setTimeout:null,m=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(k){for(var I=n(c);I!==null;){if(I.callback===null)r(c);else if(I.startTime<=k)r(c),I.sortIndex=I.expirationTime,t(l,I);else break;I=n(c)}}function S(k){if(v=!1,w(k),!y)if(n(l)!==null)y=!0,T(C);else{var I=n(c);I!==null&&D(S,I.startTime-k)}}function C(k,I){y=!1,v&&(v=!1,m(P),P=-1),p=!0;var z=f;try{for(w(I),u=n(l);u!==null&&(!(u.expirationTime>I)||k&&!$());){var U=u.callback;if(typeof U=="function"){u.callback=null,f=u.priorityLevel;var Y=U(u.expirationTime<=I);I=e.unstable_now(),typeof Y=="function"?u.callback=Y:u===n(l)&&r(l),w(I)}else r(l);u=n(l)}if(u!==null)var H=!0;else{var Z=n(c);Z!==null&&D(S,Z.startTime-I),H=!1}return H}finally{u=null,f=z,p=!1}}var N=!1,E=null,P=-1,O=5,j=-1;function $(){return!(e.unstable_now()-j<O)}function A(){if(E!==null){var k=e.unstable_now();j=k;var I=!0;try{I=E(!0,k)}finally{I?L():(N=!1,E=null)}}else N=!1}var L;if(typeof g=="function")L=function(){g(A)};else if(typeof MessageChannel<"u"){var b=new MessageChannel,M=b.port2;b.port1.onmessage=A,L=function(){M.postMessage(null)}}else L=function(){_(A,0)};function T(k){E=k,N||(N=!0,L())}function D(k,I){P=_(function(){k(e.unstable_now())},I)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(k){k.callback=null},e.unstable_continueExecution=function(){y||p||(y=!0,T(C))},e.unstable_forceFrameRate=function(k){0>k||125<k?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):O=0<k?Math.floor(1e3/k):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function(k){switch(f){case 1:case 2:case 3:var I=3;break;default:I=f}var z=f;f=I;try{return k()}finally{f=z}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(k,I){switch(k){case 1:case 2:case 3:case 4:case 5:break;default:k=3}var z=f;f=k;try{return I()}finally{f=z}},e.unstable_scheduleCallback=function(k,I,z){var U=e.unstable_now();switch(typeof z=="object"&&z!==null?(z=z.delay,z=typeof z=="number"&&0<z?U+z:U):z=U,k){case 1:var Y=-1;break;case 2:Y=250;break;case 5:Y=1073741823;break;case 4:Y=1e4;break;default:Y=5e3}return Y=z+Y,k={id:d++,callback:I,priorityLevel:k,startTime:z,expirationTime:Y,sortIndex:-1},z>U?(k.sortIndex=z,t(c,k),n(l)===null&&k===n(c)&&(v?(m(P),P=-1):v=!0,D(S,z-U))):(k.sortIndex=Y,t(l,k),y||p||(y=!0,T(C))),k},e.unstable_shouldYield=$,e.unstable_wrapCallback=function(k){var I=f;return function(){var z=f;f=I;try{return k.apply(this,arguments)}finally{f=z}}}})(t1);e1.exports=t1;var D3=e1.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 L3=x,Yt=D3;function Q(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var n1=new Set,ia={};function Wo(e,t){Vi(e,t),Vi(e+"Capture",t)}function Vi(e,t){for(ia[e]=t,e=0;e<t.length;e++)n1.add(t[e])}var fr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ff=Object.prototype.hasOwnProperty,z3=/^[: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]*$/,Ag={},Mg={};function $3(e){return Ff.call(Mg,e)?!0:Ff.call(Ag,e)?!1:z3.test(e)?Mg[e]=!0:(Ag[e]=!0,!1)}function F3(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function V3(e,t,n,r){if(t===null||typeof t>"u"||F3(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ct(e,t,n,r,o,i,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=s}var ft={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ft[e]=new Ct(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ft[t]=new Ct(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ft[e]=new Ct(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ft[e]=new Ct(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){ft[e]=new Ct(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ft[e]=new Ct(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ft[e]=new Ct(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ft[e]=new Ct(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ft[e]=new Ct(e,5,!1,e.toLowerCase(),null,!1,!1)});var Th=/[\-:]([a-z])/g;function Ph(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(Th,Ph);ft[t]=new Ct(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(Th,Ph);ft[t]=new Ct(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(Th,Ph);ft[t]=new Ct(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ft[e]=new Ct(e,1,!1,e.toLowerCase(),null,!1,!1)});ft.xlinkHref=new Ct("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ft[e]=new Ct(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ih(e,t,n,r){var o=ft.hasOwnProperty(t)?ft[t]:null;(o!==null?o.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(V3(t,n,o,r)&&(n=null),r||o===null?$3(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=n===null?o.type===3?!1:"":n:(t=o.attributeName,r=o.attributeNamespace,n===null?e.removeAttribute(t):(o=o.type,n=o===3||o===4&&n===!0?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var br=L3.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,xl=Symbol.for("react.element"),ci=Symbol.for("react.portal"),ui=Symbol.for("react.fragment"),Rh=Symbol.for("react.strict_mode"),Vf=Symbol.for("react.profiler"),r1=Symbol.for("react.provider"),o1=Symbol.for("react.context"),Ah=Symbol.for("react.forward_ref"),Hf=Symbol.for("react.suspense"),Bf=Symbol.for("react.suspense_list"),Mh=Symbol.for("react.memo"),jr=Symbol.for("react.lazy"),i1=Symbol.for("react.offscreen"),jg=Symbol.iterator;function xs(e){return e===null||typeof e!="object"?null:(e=jg&&e[jg]||e["@@iterator"],typeof e=="function"?e:null)}var We=Object.assign,Od;function js(e){if(Od===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Od=t&&t[1]||""}return`
+`+Od+e}var Dd=!1;function Ld(e,t){if(!e||Dd)return"";Dd=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&typeof c.stack=="string"){for(var o=c.stack.split(`
+`),i=r.stack.split(`
+`),s=o.length-1,a=i.length-1;1<=s&&0<=a&&o[s]!==i[a];)a--;for(;1<=s&&0<=a;s--,a--)if(o[s]!==i[a]){if(s!==1||a!==1)do if(s--,a--,0>a||o[s]!==i[a]){var l=`
+`+o[s].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{Dd=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?js(e):""}function H3(e){switch(e.tag){case 5:return js(e.type);case 16:return js("Lazy");case 13:return js("Suspense");case 19:return js("SuspenseList");case 0:case 2:case 15:return e=Ld(e.type,!1),e;case 11:return e=Ld(e.type.render,!1),e;case 1:return e=Ld(e.type,!0),e;default:return""}}function Uf(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 ui:return"Fragment";case ci:return"Portal";case Vf:return"Profiler";case Rh:return"StrictMode";case Hf:return"Suspense";case Bf:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case o1:return(e.displayName||"Context")+".Consumer";case r1:return(e._context.displayName||"Context")+".Provider";case Ah:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Mh:return t=e.displayName||null,t!==null?t:Uf(e.type)||"Memo";case jr:t=e._payload,e=e._init;try{return Uf(e(t))}catch{}}return null}function B3(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 Uf(t);case 8:return t===Rh?"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 Jr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function s1(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function U3(e){var t=s1(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(s){r=""+s,i.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function wl(e){e._valueTracker||(e._valueTracker=U3(e))}function a1(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=s1(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Sc(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 Wf(e,t){var n=t.checked;return We({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Og(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Jr(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function l1(e,t){t=t.checked,t!=null&&Ih(e,"checked",t,!1)}function Zf(e,t){l1(e,t);var n=Jr(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Gf(e,t.type,n):t.hasOwnProperty("defaultValue")&&Gf(e,t.type,Jr(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Dg(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Gf(e,t,n){(t!=="number"||Sc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Os=Array.isArray;function Ei(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Jr(n),t=null,o=0;o<e.length;o++){if(e[o].value===n){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}t!==null||e[o].disabled||(t=e[o])}t!==null&&(t.selected=!0)}}function Yf(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(Q(91));return We({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Lg(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(Q(92));if(Os(n)){if(1<n.length)throw Error(Q(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:Jr(n)}}function c1(e,t){var n=Jr(t.value),r=Jr(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function zg(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function u1(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Kf(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?u1(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var _l,d1=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(_l=_l||document.createElement("div"),_l.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=_l.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function sa(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Ws={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},W3=["Webkit","ms","Moz","O"];Object.keys(Ws).forEach(function(e){W3.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ws[t]=Ws[e]})});function f1(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Ws.hasOwnProperty(e)&&Ws[e]?(""+t).trim():t+"px"}function p1(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=f1(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var Z3=We({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 Xf(e,t){if(t){if(Z3[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(Q(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(Q(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(Q(61))}if(t.style!=null&&typeof t.style!="object")throw Error(Q(62))}}function qf(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 Qf=null;function jh(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Jf=null,ki=null,Ni=null;function $g(e){if(e=el(e)){if(typeof Jf!="function")throw Error(Q(280));var t=e.stateNode;t&&(t=Pu(t),Jf(e.stateNode,e.type,t))}}function h1(e){ki?Ni?Ni.push(e):Ni=[e]:ki=e}function m1(){if(ki){var e=ki,t=Ni;if(Ni=ki=null,$g(e),t)for(e=0;e<t.length;e++)$g(t[e])}}function g1(e,t){return e(t)}function v1(){}var zd=!1;function y1(e,t,n){if(zd)return e(t,n);zd=!0;try{return g1(e,t,n)}finally{zd=!1,(ki!==null||Ni!==null)&&(v1(),m1())}}function aa(e,t){var n=e.stateNode;if(n===null)return null;var r=Pu(n);if(r===null)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(e=e.type,r=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(Q(231,t,typeof n));return n}var ep=!1;if(fr)try{var ws={};Object.defineProperty(ws,"passive",{get:function(){ep=!0}}),window.addEventListener("test",ws,ws),window.removeEventListener("test",ws,ws)}catch{ep=!1}function G3(e,t,n,r,o,i,s,a,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(d){this.onError(d)}}var Zs=!1,bc=null,Cc=!1,tp=null,Y3={onError:function(e){Zs=!0,bc=e}};function K3(e,t,n,r,o,i,s,a,l){Zs=!1,bc=null,G3.apply(Y3,arguments)}function X3(e,t,n,r,o,i,s,a,l){if(K3.apply(this,arguments),Zs){if(Zs){var c=bc;Zs=!1,bc=null}else throw Error(Q(198));Cc||(Cc=!0,tp=c)}}function Zo(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function x1(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Fg(e){if(Zo(e)!==e)throw Error(Q(188))}function q3(e){var t=e.alternate;if(!t){if(t=Zo(e),t===null)throw Error(Q(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(o===null)break;var i=o.alternate;if(i===null){if(r=o.return,r!==null){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Fg(o),e;if(i===r)return Fg(o),t;i=i.sibling}throw Error(Q(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,a=o.child;a;){if(a===n){s=!0,n=o,r=i;break}if(a===r){s=!0,r=o,n=i;break}a=a.sibling}if(!s){for(a=i.child;a;){if(a===n){s=!0,n=i,r=o;break}if(a===r){s=!0,r=i,n=o;break}a=a.sibling}if(!s)throw Error(Q(189))}}if(n.alternate!==r)throw Error(Q(190))}if(n.tag!==3)throw Error(Q(188));return n.stateNode.current===n?e:t}function w1(e){return e=q3(e),e!==null?_1(e):null}function _1(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=_1(e);if(t!==null)return t;e=e.sibling}return null}var S1=Yt.unstable_scheduleCallback,Vg=Yt.unstable_cancelCallback,Q3=Yt.unstable_shouldYield,J3=Yt.unstable_requestPaint,Ke=Yt.unstable_now,ek=Yt.unstable_getCurrentPriorityLevel,Oh=Yt.unstable_ImmediatePriority,b1=Yt.unstable_UserBlockingPriority,Ec=Yt.unstable_NormalPriority,tk=Yt.unstable_LowPriority,C1=Yt.unstable_IdlePriority,Eu=null,jn=null;function nk(e){if(jn&&typeof jn.onCommitFiberRoot=="function")try{jn.onCommitFiberRoot(Eu,e,void 0,(e.current.flags&128)===128)}catch{}}var vn=Math.clz32?Math.clz32:ik,rk=Math.log,ok=Math.LN2;function ik(e){return e>>>=0,e===0?32:31-(rk(e)/ok|0)|0}var Sl=64,bl=4194304;function Ds(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 kc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~o;a!==0?r=Ds(a):(i&=s,i!==0&&(r=Ds(i)))}else s=n&~o,s!==0?r=Ds(s):i!==0&&(r=Ds(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-vn(t),o=1<<n,r|=e[n],t&=~o;return r}function sk(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 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 t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ak(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,i=e.pendingLanes;0<i;){var s=31-vn(i),a=1<<s,l=o[s];l===-1?(!(a&n)||a&r)&&(o[s]=sk(a,t)):l<=t&&(e.expiredLanes|=a),i&=~a}}function np(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function E1(){var e=Sl;return Sl<<=1,!(Sl&4194240)&&(Sl=64),e}function $d(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Qa(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-vn(t),e[t]=n}function lk(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-vn(n),i=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~i}}function Dh(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-vn(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var Re=0;function k1(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var N1,Lh,T1,P1,I1,rp=!1,Cl=[],Wr=null,Zr=null,Gr=null,la=new Map,ca=new Map,Lr=[],ck="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Hg(e,t){switch(e){case"focusin":case"focusout":Wr=null;break;case"dragenter":case"dragleave":Zr=null;break;case"mouseover":case"mouseout":Gr=null;break;case"pointerover":case"pointerout":la.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ca.delete(t.pointerId)}}function _s(e,t,n,r,o,i){return e===null||e.nativeEvent!==i?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:i,targetContainers:[o]},t!==null&&(t=el(t),t!==null&&Lh(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,o!==null&&t.indexOf(o)===-1&&t.push(o),e)}function uk(e,t,n,r,o){switch(t){case"focusin":return Wr=_s(Wr,e,t,n,r,o),!0;case"dragenter":return Zr=_s(Zr,e,t,n,r,o),!0;case"mouseover":return Gr=_s(Gr,e,t,n,r,o),!0;case"pointerover":var i=o.pointerId;return la.set(i,_s(la.get(i)||null,e,t,n,r,o)),!0;case"gotpointercapture":return i=o.pointerId,ca.set(i,_s(ca.get(i)||null,e,t,n,r,o)),!0}return!1}function R1(e){var t=xo(e.target);if(t!==null){var n=Zo(t);if(n!==null){if(t=n.tag,t===13){if(t=x1(n),t!==null){e.blockedOn=t,I1(e.priority,function(){T1(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function ec(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=op(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);Qf=r,n.target.dispatchEvent(r),Qf=null}else return t=el(n),t!==null&&Lh(t),e.blockedOn=n,!1;t.shift()}return!0}function Bg(e,t,n){ec(e)&&n.delete(t)}function dk(){rp=!1,Wr!==null&&ec(Wr)&&(Wr=null),Zr!==null&&ec(Zr)&&(Zr=null),Gr!==null&&ec(Gr)&&(Gr=null),la.forEach(Bg),ca.forEach(Bg)}function Ss(e,t){e.blockedOn===t&&(e.blockedOn=null,rp||(rp=!0,Yt.unstable_scheduleCallback(Yt.unstable_NormalPriority,dk)))}function ua(e){function t(o){return Ss(o,e)}if(0<Cl.length){Ss(Cl[0],e);for(var n=1;n<Cl.length;n++){var r=Cl[n];r.blockedOn===e&&(r.blockedOn=null)}}for(Wr!==null&&Ss(Wr,e),Zr!==null&&Ss(Zr,e),Gr!==null&&Ss(Gr,e),la.forEach(t),ca.forEach(t),n=0;n<Lr.length;n++)r=Lr[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<Lr.length&&(n=Lr[0],n.blockedOn===null);)R1(n),n.blockedOn===null&&Lr.shift()}var Ti=br.ReactCurrentBatchConfig,Nc=!0;function fk(e,t,n,r){var o=Re,i=Ti.transition;Ti.transition=null;try{Re=1,zh(e,t,n,r)}finally{Re=o,Ti.transition=i}}function pk(e,t,n,r){var o=Re,i=Ti.transition;Ti.transition=null;try{Re=4,zh(e,t,n,r)}finally{Re=o,Ti.transition=i}}function zh(e,t,n,r){if(Nc){var o=op(e,t,n,r);if(o===null)Kd(e,t,r,Tc,n),Hg(e,r);else if(uk(o,e,t,n,r))r.stopPropagation();else if(Hg(e,r),t&4&&-1<ck.indexOf(e)){for(;o!==null;){var i=el(o);if(i!==null&&N1(i),i=op(e,t,n,r),i===null&&Kd(e,t,r,Tc,n),i===o)break;o=i}o!==null&&r.stopPropagation()}else Kd(e,t,r,null,n)}}var Tc=null;function op(e,t,n,r){if(Tc=null,e=jh(r),e=xo(e),e!==null)if(t=Zo(e),t===null)e=null;else if(n=t.tag,n===13){if(e=x1(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Tc=e,null}function A1(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(ek()){case Oh:return 1;case b1:return 4;case Ec:case tk:return 16;case C1:return 536870912;default:return 16}default:return 16}}var Br=null,$h=null,tc=null;function M1(){if(tc)return tc;var e,t=$h,n=t.length,r,o="value"in Br?Br.value:Br.textContent,i=o.length;for(e=0;e<n&&t[e]===o[e];e++);var s=n-e;for(r=1;r<=s&&t[n-r]===o[i-r];r++);return tc=o.slice(e,1<r?1-r:void 0)}function nc(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function El(){return!0}function Ug(){return!1}function qt(e){function t(n,r,o,i,s){this._reactName=n,this._targetInst=o,this.type=r,this.nativeEvent=i,this.target=s,this.currentTarget=null;for(var a in e)e.hasOwnProperty(a)&&(n=e[a],this[a]=n?n(i):i[a]);return this.isDefaultPrevented=(i.defaultPrevented!=null?i.defaultPrevented:i.returnValue===!1)?El:Ug,this.isPropagationStopped=Ug,this}return We(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=El)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=El)},persist:function(){},isPersistent:El}),t}var cs={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Fh=qt(cs),Ja=We({},cs,{view:0,detail:0}),hk=qt(Ja),Fd,Vd,bs,ku=We({},Ja,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Vh,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==bs&&(bs&&e.type==="mousemove"?(Fd=e.screenX-bs.screenX,Vd=e.screenY-bs.screenY):Vd=Fd=0,bs=e),Fd)},movementY:function(e){return"movementY"in e?e.movementY:Vd}}),Wg=qt(ku),mk=We({},ku,{dataTransfer:0}),gk=qt(mk),vk=We({},Ja,{relatedTarget:0}),Hd=qt(vk),yk=We({},cs,{animationName:0,elapsedTime:0,pseudoElement:0}),xk=qt(yk),wk=We({},cs,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_k=qt(wk),Sk=We({},cs,{data:0}),Zg=qt(Sk),bk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Ck={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Ek={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function kk(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Ek[e])?!!t[e]:!1}function Vh(){return kk}var Nk=We({},Ja,{key:function(e){if(e.key){var t=bk[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=nc(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Ck[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Vh,charCode:function(e){return e.type==="keypress"?nc(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?nc(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Tk=qt(Nk),Pk=We({},ku,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Gg=qt(Pk),Ik=We({},Ja,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Vh}),Rk=qt(Ik),Ak=We({},cs,{propertyName:0,elapsedTime:0,pseudoElement:0}),Mk=qt(Ak),jk=We({},ku,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Ok=qt(jk),Dk=[9,13,27,32],Hh=fr&&"CompositionEvent"in window,Gs=null;fr&&"documentMode"in document&&(Gs=document.documentMode);var Lk=fr&&"TextEvent"in window&&!Gs,j1=fr&&(!Hh||Gs&&8<Gs&&11>=Gs),Yg=" ",Kg=!1;function O1(e,t){switch(e){case"keyup":return Dk.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function D1(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var di=!1;function zk(e,t){switch(e){case"compositionend":return D1(t);case"keypress":return t.which!==32?null:(Kg=!0,Yg);case"textInput":return e=t.data,e===Yg&&Kg?null:e;default:return null}}function $k(e,t){if(di)return e==="compositionend"||!Hh&&O1(e,t)?(e=M1(),tc=$h=Br=null,di=!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.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return j1&&t.locale!=="ko"?null:t.data;default:return null}}var Fk={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Xg(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!Fk[e.type]:t==="textarea"}function L1(e,t,n,r){h1(r),t=Pc(t,"onChange"),0<t.length&&(n=new Fh("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Ys=null,da=null;function Vk(e){Y1(e,0)}function Nu(e){var t=hi(e);if(a1(t))return e}function Hk(e,t){if(e==="change")return t}var z1=!1;if(fr){var Bd;if(fr){var Ud="oninput"in document;if(!Ud){var qg=document.createElement("div");qg.setAttribute("oninput","return;"),Ud=typeof qg.oninput=="function"}Bd=Ud}else Bd=!1;z1=Bd&&(!document.documentMode||9<document.documentMode)}function Qg(){Ys&&(Ys.detachEvent("onpropertychange",$1),da=Ys=null)}function $1(e){if(e.propertyName==="value"&&Nu(da)){var t=[];L1(t,da,e,jh(e)),y1(Vk,t)}}function Bk(e,t,n){e==="focusin"?(Qg(),Ys=t,da=n,Ys.attachEvent("onpropertychange",$1)):e==="focusout"&&Qg()}function Uk(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Nu(da)}function Wk(e,t){if(e==="click")return Nu(t)}function Zk(e,t){if(e==="input"||e==="change")return Nu(t)}function Gk(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var bn=typeof Object.is=="function"?Object.is:Gk;function fa(e,t){if(bn(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!Ff.call(t,o)||!bn(e[o],t[o]))return!1}return!0}function Jg(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function e0(e,t){var n=Jg(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Jg(n)}}function F1(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?F1(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function V1(){for(var e=window,t=Sc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Sc(e.document)}return t}function Bh(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 Yk(e){var t=V1(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&F1(n.ownerDocument.documentElement,n)){if(r!==null&&Bh(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=e0(n,i);var s=e0(n,r);o&&s&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var Kk=fr&&"documentMode"in document&&11>=document.documentMode,fi=null,ip=null,Ks=null,sp=!1;function t0(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;sp||fi==null||fi!==Sc(r)||(r=fi,"selectionStart"in r&&Bh(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ks&&fa(Ks,r)||(Ks=r,r=Pc(ip,"onSelect"),0<r.length&&(t=new Fh("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=fi)))}function kl(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var pi={animationend:kl("Animation","AnimationEnd"),animationiteration:kl("Animation","AnimationIteration"),animationstart:kl("Animation","AnimationStart"),transitionend:kl("Transition","TransitionEnd")},Wd={},H1={};fr&&(H1=document.createElement("div").style,"AnimationEvent"in window||(delete pi.animationend.animation,delete pi.animationiteration.animation,delete pi.animationstart.animation),"TransitionEvent"in window||delete pi.transitionend.transition);function Tu(e){if(Wd[e])return Wd[e];if(!pi[e])return e;var t=pi[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in H1)return Wd[e]=t[n];return e}var B1=Tu("animationend"),U1=Tu("animationiteration"),W1=Tu("animationstart"),Z1=Tu("transitionend"),G1=new Map,n0="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function co(e,t){G1.set(e,t),Wo(t,[e])}for(var Zd=0;Zd<n0.length;Zd++){var Gd=n0[Zd],Xk=Gd.toLowerCase(),qk=Gd[0].toUpperCase()+Gd.slice(1);co(Xk,"on"+qk)}co(B1,"onAnimationEnd");co(U1,"onAnimationIteration");co(W1,"onAnimationStart");co("dblclick","onDoubleClick");co("focusin","onFocus");co("focusout","onBlur");co(Z1,"onTransitionEnd");Vi("onMouseEnter",["mouseout","mouseover"]);Vi("onMouseLeave",["mouseout","mouseover"]);Vi("onPointerEnter",["pointerout","pointerover"]);Vi("onPointerLeave",["pointerout","pointerover"]);Wo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Wo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Wo("onBeforeInput",["compositionend","keypress","textInput","paste"]);Wo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Wo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Wo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ls="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Qk=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ls));function r0(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,X3(r,t,void 0,e),e.currentTarget=null}function Y1(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var i=void 0;if(t)for(var s=r.length-1;0<=s;s--){var a=r[s],l=a.instance,c=a.currentTarget;if(a=a.listener,l!==i&&o.isPropagationStopped())break e;r0(o,a,c),i=l}else for(s=0;s<r.length;s++){if(a=r[s],l=a.instance,c=a.currentTarget,a=a.listener,l!==i&&o.isPropagationStopped())break e;r0(o,a,c),i=l}}}if(Cc)throw e=tp,Cc=!1,tp=null,e}function Oe(e,t){var n=t[dp];n===void 0&&(n=t[dp]=new Set);var r=e+"__bubble";n.has(r)||(K1(t,e,2,!1),n.add(r))}function Yd(e,t,n){var r=0;t&&(r|=4),K1(n,e,r,t)}var Nl="_reactListening"+Math.random().toString(36).slice(2);function pa(e){if(!e[Nl]){e[Nl]=!0,n1.forEach(function(n){n!=="selectionchange"&&(Qk.has(n)||Yd(n,!1,e),Yd(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Nl]||(t[Nl]=!0,Yd("selectionchange",!1,t))}}function K1(e,t,n,r){switch(A1(t)){case 1:var o=fk;break;case 4:o=pk;break;default:o=zh}n=o.bind(null,t,n,e),o=void 0,!ep||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(o=!0),r?o!==void 0?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):o!==void 0?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Kd(e,t,n,r,o){var i=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var s=r.tag;if(s===3||s===4){var a=r.stateNode.containerInfo;if(a===o||a.nodeType===8&&a.parentNode===o)break;if(s===4)for(s=r.return;s!==null;){var l=s.tag;if((l===3||l===4)&&(l=s.stateNode.containerInfo,l===o||l.nodeType===8&&l.parentNode===o))return;s=s.return}for(;a!==null;){if(s=xo(a),s===null)return;if(l=s.tag,l===5||l===6){r=i=s;continue e}a=a.parentNode}}r=r.return}y1(function(){var c=i,d=jh(n),u=[];e:{var f=G1.get(e);if(f!==void 0){var p=Fh,y=e;switch(e){case"keypress":if(nc(n)===0)break e;case"keydown":case"keyup":p=Tk;break;case"focusin":y="focus",p=Hd;break;case"focusout":y="blur",p=Hd;break;case"beforeblur":case"afterblur":p=Hd;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":p=Wg;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":p=gk;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":p=Rk;break;case B1:case U1:case W1:p=xk;break;case Z1:p=Mk;break;case"scroll":p=hk;break;case"wheel":p=Ok;break;case"copy":case"cut":case"paste":p=_k;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":p=Gg}var v=(t&4)!==0,_=!v&&e==="scroll",m=v?f!==null?f+"Capture":null:f;v=[];for(var g=c,w;g!==null;){w=g;var S=w.stateNode;if(w.tag===5&&S!==null&&(w=S,m!==null&&(S=aa(g,m),S!=null&&v.push(ha(g,S,w)))),_)break;g=g.return}0<v.length&&(f=new p(f,y,null,n,d),u.push({event:f,listeners:v}))}}if(!(t&7)){e:{if(f=e==="mouseover"||e==="pointerover",p=e==="mouseout"||e==="pointerout",f&&n!==Qf&&(y=n.relatedTarget||n.fromElement)&&(xo(y)||y[pr]))break e;if((p||f)&&(f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window,p?(y=n.relatedTarget||n.toElement,p=c,y=y?xo(y):null,y!==null&&(_=Zo(y),y!==_||y.tag!==5&&y.tag!==6)&&(y=null)):(p=null,y=c),p!==y)){if(v=Wg,S="onMouseLeave",m="onMouseEnter",g="mouse",(e==="pointerout"||e==="pointerover")&&(v=Gg,S="onPointerLeave",m="onPointerEnter",g="pointer"),_=p==null?f:hi(p),w=y==null?f:hi(y),f=new v(S,g+"leave",p,n,d),f.target=_,f.relatedTarget=w,S=null,xo(d)===c&&(v=new v(m,g+"enter",y,n,d),v.target=w,v.relatedTarget=_,S=v),_=S,p&&y)t:{for(v=p,m=y,g=0,w=v;w;w=Jo(w))g++;for(w=0,S=m;S;S=Jo(S))w++;for(;0<g-w;)v=Jo(v),g--;for(;0<w-g;)m=Jo(m),w--;for(;g--;){if(v===m||m!==null&&v===m.alternate)break t;v=Jo(v),m=Jo(m)}v=null}else v=null;p!==null&&o0(u,f,p,v,!1),y!==null&&_!==null&&o0(u,_,y,v,!0)}}e:{if(f=c?hi(c):window,p=f.nodeName&&f.nodeName.toLowerCase(),p==="select"||p==="input"&&f.type==="file")var C=Hk;else if(Xg(f))if(z1)C=Zk;else{C=Uk;var N=Bk}else(p=f.nodeName)&&p.toLowerCase()==="input"&&(f.type==="checkbox"||f.type==="radio")&&(C=Wk);if(C&&(C=C(e,c))){L1(u,C,n,d);break e}N&&N(e,f,c),e==="focusout"&&(N=f._wrapperState)&&N.controlled&&f.type==="number"&&Gf(f,"number",f.value)}switch(N=c?hi(c):window,e){case"focusin":(Xg(N)||N.contentEditable==="true")&&(fi=N,ip=c,Ks=null);break;case"focusout":Ks=ip=fi=null;break;case"mousedown":sp=!0;break;case"contextmenu":case"mouseup":case"dragend":sp=!1,t0(u,n,d);break;case"selectionchange":if(Kk)break;case"keydown":case"keyup":t0(u,n,d)}var E;if(Hh)e:{switch(e){case"compositionstart":var P="onCompositionStart";break e;case"compositionend":P="onCompositionEnd";break e;case"compositionupdate":P="onCompositionUpdate";break e}P=void 0}else di?O1(e,n)&&(P="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(P="onCompositionStart");P&&(j1&&n.locale!=="ko"&&(di||P!=="onCompositionStart"?P==="onCompositionEnd"&&di&&(E=M1()):(Br=d,$h="value"in Br?Br.value:Br.textContent,di=!0)),N=Pc(c,P),0<N.length&&(P=new Zg(P,e,null,n,d),u.push({event:P,listeners:N}),E?P.data=E:(E=D1(n),E!==null&&(P.data=E)))),(E=Lk?zk(e,n):$k(e,n))&&(c=Pc(c,"onBeforeInput"),0<c.length&&(d=new Zg("onBeforeInput","beforeinput",null,n,d),u.push({event:d,listeners:c}),d.data=E))}Y1(u,t)})}function ha(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Pc(e,t){for(var n=t+"Capture",r=[];e!==null;){var o=e,i=o.stateNode;o.tag===5&&i!==null&&(o=i,i=aa(e,n),i!=null&&r.unshift(ha(e,i,o)),i=aa(e,t),i!=null&&r.push(ha(e,i,o))),e=e.return}return r}function Jo(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function o0(e,t,n,r,o){for(var i=t._reactName,s=[];n!==null&&n!==r;){var a=n,l=a.alternate,c=a.stateNode;if(l!==null&&l===r)break;a.tag===5&&c!==null&&(a=c,o?(l=aa(n,i),l!=null&&s.unshift(ha(n,l,a))):o||(l=aa(n,i),l!=null&&s.push(ha(n,l,a)))),n=n.return}s.length!==0&&e.push({event:t,listeners:s})}var Jk=/\r\n?/g,e5=/\u0000|\uFFFD/g;function i0(e){return(typeof e=="string"?e:""+e).replace(Jk,`
+`).replace(e5,"")}function Tl(e,t,n){if(t=i0(t),i0(e)!==t&&n)throw Error(Q(425))}function Ic(){}var ap=null,lp=null;function cp(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var up=typeof setTimeout=="function"?setTimeout:void 0,t5=typeof clearTimeout=="function"?clearTimeout:void 0,s0=typeof Promise=="function"?Promise:void 0,n5=typeof queueMicrotask=="function"?queueMicrotask:typeof s0<"u"?function(e){return s0.resolve(null).then(e).catch(r5)}:up;function r5(e){setTimeout(function(){throw e})}function Xd(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&o.nodeType===8)if(n=o.data,n==="/$"){if(r===0){e.removeChild(o),ua(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=o}while(n);ua(t)}function Yr(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function a0(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var us=Math.random().toString(36).slice(2),Rn="__reactFiber$"+us,ma="__reactProps$"+us,pr="__reactContainer$"+us,dp="__reactEvents$"+us,o5="__reactListeners$"+us,i5="__reactHandles$"+us;function xo(e){var t=e[Rn];if(t)return t;for(var n=e.parentNode;n;){if(t=n[pr]||n[Rn]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=a0(e);e!==null;){if(n=e[Rn])return n;e=a0(e)}return t}e=n,n=e.parentNode}return null}function el(e){return e=e[Rn]||e[pr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function hi(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(Q(33))}function Pu(e){return e[ma]||null}var fp=[],mi=-1;function uo(e){return{current:e}}function De(e){0>mi||(e.current=fp[mi],fp[mi]=null,mi--)}function Me(e,t){mi++,fp[mi]=e.current,e.current=t}var eo={},vt=uo(eo),Mt=uo(!1),Ao=eo;function Hi(e,t){var n=e.type.contextTypes;if(!n)return eo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function jt(e){return e=e.childContextTypes,e!=null}function Rc(){De(Mt),De(vt)}function l0(e,t,n){if(vt.current!==eo)throw Error(Q(168));Me(vt,t),Me(Mt,n)}function X1(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(Q(108,B3(e)||"Unknown",o));return We({},n,r)}function Ac(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||eo,Ao=vt.current,Me(vt,e),Me(Mt,Mt.current),!0}function c0(e,t,n){var r=e.stateNode;if(!r)throw Error(Q(169));n?(e=X1(e,t,Ao),r.__reactInternalMemoizedMergedChildContext=e,De(Mt),De(vt),Me(vt,e)):De(Mt),Me(Mt,n)}var tr=null,Iu=!1,qd=!1;function q1(e){tr===null?tr=[e]:tr.push(e)}function s5(e){Iu=!0,q1(e)}function fo(){if(!qd&&tr!==null){qd=!0;var e=0,t=Re;try{var n=tr;for(Re=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}tr=null,Iu=!1}catch(o){throw tr!==null&&(tr=tr.slice(e+1)),S1(Oh,fo),o}finally{Re=t,qd=!1}}return null}var gi=[],vi=0,Mc=null,jc=0,Jt=[],en=0,Mo=null,rr=1,or="";function go(e,t){gi[vi++]=jc,gi[vi++]=Mc,Mc=e,jc=t}function Q1(e,t,n){Jt[en++]=rr,Jt[en++]=or,Jt[en++]=Mo,Mo=e;var r=rr;e=or;var o=32-vn(r)-1;r&=~(1<<o),n+=1;var i=32-vn(t)+o;if(30<i){var s=o-o%5;i=(r&(1<<s)-1).toString(32),r>>=s,o-=s,rr=1<<32-vn(t)+o|n<<o|r,or=i+e}else rr=1<<i|n<<o|r,or=e}function Uh(e){e.return!==null&&(go(e,1),Q1(e,1,0))}function Wh(e){for(;e===Mc;)Mc=gi[--vi],gi[vi]=null,jc=gi[--vi],gi[vi]=null;for(;e===Mo;)Mo=Jt[--en],Jt[en]=null,or=Jt[--en],Jt[en]=null,rr=Jt[--en],Jt[en]=null}var Ut=null,Bt=null,$e=!1,fn=null;function J1(e,t){var n=tn(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function u0(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Ut=e,Bt=Yr(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Ut=e,Bt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=Mo!==null?{id:rr,overflow:or}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=tn(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Ut=e,Bt=null,!0):!1;default:return!1}}function pp(e){return(e.mode&1)!==0&&(e.flags&128)===0}function hp(e){if($e){var t=Bt;if(t){var n=t;if(!u0(e,t)){if(pp(e))throw Error(Q(418));t=Yr(n.nextSibling);var r=Ut;t&&u0(e,t)?J1(r,n):(e.flags=e.flags&-4097|2,$e=!1,Ut=e)}}else{if(pp(e))throw Error(Q(418));e.flags=e.flags&-4097|2,$e=!1,Ut=e}}}function d0(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Ut=e}function Pl(e){if(e!==Ut)return!1;if(!$e)return d0(e),$e=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!cp(e.type,e.memoizedProps)),t&&(t=Bt)){if(pp(e))throw ex(),Error(Q(418));for(;t;)J1(e,t),t=Yr(t.nextSibling)}if(d0(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(Q(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Bt=Yr(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Bt=null}}else Bt=Ut?Yr(e.stateNode.nextSibling):null;return!0}function ex(){for(var e=Bt;e;)e=Yr(e.nextSibling)}function Bi(){Bt=Ut=null,$e=!1}function Zh(e){fn===null?fn=[e]:fn.push(e)}var a5=br.ReactCurrentBatchConfig;function Cs(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(Q(309));var r=n.stateNode}if(!r)throw Error(Q(147,e));var o=r,i=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===i?t.ref:(t=function(s){var a=o.refs;s===null?delete a[i]:a[i]=s},t._stringRef=i,t)}if(typeof e!="string")throw Error(Q(284));if(!n._owner)throw Error(Q(290,e))}return e}function Il(e,t){throw e=Object.prototype.toString.call(t),Error(Q(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function f0(e){var t=e._init;return t(e._payload)}function tx(e){function t(m,g){if(e){var w=m.deletions;w===null?(m.deletions=[g],m.flags|=16):w.push(g)}}function n(m,g){if(!e)return null;for(;g!==null;)t(m,g),g=g.sibling;return null}function r(m,g){for(m=new Map;g!==null;)g.key!==null?m.set(g.key,g):m.set(g.index,g),g=g.sibling;return m}function o(m,g){return m=Qr(m,g),m.index=0,m.sibling=null,m}function i(m,g,w){return m.index=w,e?(w=m.alternate,w!==null?(w=w.index,w<g?(m.flags|=2,g):w):(m.flags|=2,g)):(m.flags|=1048576,g)}function s(m){return e&&m.alternate===null&&(m.flags|=2),m}function a(m,g,w,S){return g===null||g.tag!==6?(g=of(w,m.mode,S),g.return=m,g):(g=o(g,w),g.return=m,g)}function l(m,g,w,S){var C=w.type;return C===ui?d(m,g,w.props.children,S,w.key):g!==null&&(g.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===jr&&f0(C)===g.type)?(S=o(g,w.props),S.ref=Cs(m,g,w),S.return=m,S):(S=cc(w.type,w.key,w.props,null,m.mode,S),S.ref=Cs(m,g,w),S.return=m,S)}function c(m,g,w,S){return g===null||g.tag!==4||g.stateNode.containerInfo!==w.containerInfo||g.stateNode.implementation!==w.implementation?(g=sf(w,m.mode,S),g.return=m,g):(g=o(g,w.children||[]),g.return=m,g)}function d(m,g,w,S,C){return g===null||g.tag!==7?(g=ko(w,m.mode,S,C),g.return=m,g):(g=o(g,w),g.return=m,g)}function u(m,g,w){if(typeof g=="string"&&g!==""||typeof g=="number")return g=of(""+g,m.mode,w),g.return=m,g;if(typeof g=="object"&&g!==null){switch(g.$$typeof){case xl:return w=cc(g.type,g.key,g.props,null,m.mode,w),w.ref=Cs(m,null,g),w.return=m,w;case ci:return g=sf(g,m.mode,w),g.return=m,g;case jr:var S=g._init;return u(m,S(g._payload),w)}if(Os(g)||xs(g))return g=ko(g,m.mode,w,null),g.return=m,g;Il(m,g)}return null}function f(m,g,w,S){var C=g!==null?g.key:null;if(typeof w=="string"&&w!==""||typeof w=="number")return C!==null?null:a(m,g,""+w,S);if(typeof w=="object"&&w!==null){switch(w.$$typeof){case xl:return w.key===C?l(m,g,w,S):null;case ci:return w.key===C?c(m,g,w,S):null;case jr:return C=w._init,f(m,g,C(w._payload),S)}if(Os(w)||xs(w))return C!==null?null:d(m,g,w,S,null);Il(m,w)}return null}function p(m,g,w,S,C){if(typeof S=="string"&&S!==""||typeof S=="number")return m=m.get(w)||null,a(g,m,""+S,C);if(typeof S=="object"&&S!==null){switch(S.$$typeof){case xl:return m=m.get(S.key===null?w:S.key)||null,l(g,m,S,C);case ci:return m=m.get(S.key===null?w:S.key)||null,c(g,m,S,C);case jr:var N=S._init;return p(m,g,w,N(S._payload),C)}if(Os(S)||xs(S))return m=m.get(w)||null,d(g,m,S,C,null);Il(g,S)}return null}function y(m,g,w,S){for(var C=null,N=null,E=g,P=g=0,O=null;E!==null&&P<w.length;P++){E.index>P?(O=E,E=null):O=E.sibling;var j=f(m,E,w[P],S);if(j===null){E===null&&(E=O);break}e&&E&&j.alternate===null&&t(m,E),g=i(j,g,P),N===null?C=j:N.sibling=j,N=j,E=O}if(P===w.length)return n(m,E),$e&&go(m,P),C;if(E===null){for(;P<w.length;P++)E=u(m,w[P],S),E!==null&&(g=i(E,g,P),N===null?C=E:N.sibling=E,N=E);return $e&&go(m,P),C}for(E=r(m,E);P<w.length;P++)O=p(E,m,P,w[P],S),O!==null&&(e&&O.alternate!==null&&E.delete(O.key===null?P:O.key),g=i(O,g,P),N===null?C=O:N.sibling=O,N=O);return e&&E.forEach(function($){return t(m,$)}),$e&&go(m,P),C}function v(m,g,w,S){var C=xs(w);if(typeof C!="function")throw Error(Q(150));if(w=C.call(w),w==null)throw Error(Q(151));for(var N=C=null,E=g,P=g=0,O=null,j=w.next();E!==null&&!j.done;P++,j=w.next()){E.index>P?(O=E,E=null):O=E.sibling;var $=f(m,E,j.value,S);if($===null){E===null&&(E=O);break}e&&E&&$.alternate===null&&t(m,E),g=i($,g,P),N===null?C=$:N.sibling=$,N=$,E=O}if(j.done)return n(m,E),$e&&go(m,P),C;if(E===null){for(;!j.done;P++,j=w.next())j=u(m,j.value,S),j!==null&&(g=i(j,g,P),N===null?C=j:N.sibling=j,N=j);return $e&&go(m,P),C}for(E=r(m,E);!j.done;P++,j=w.next())j=p(E,m,P,j.value,S),j!==null&&(e&&j.alternate!==null&&E.delete(j.key===null?P:j.key),g=i(j,g,P),N===null?C=j:N.sibling=j,N=j);return e&&E.forEach(function(A){return t(m,A)}),$e&&go(m,P),C}function _(m,g,w,S){if(typeof w=="object"&&w!==null&&w.type===ui&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case xl:e:{for(var C=w.key,N=g;N!==null;){if(N.key===C){if(C=w.type,C===ui){if(N.tag===7){n(m,N.sibling),g=o(N,w.props.children),g.return=m,m=g;break e}}else if(N.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===jr&&f0(C)===N.type){n(m,N.sibling),g=o(N,w.props),g.ref=Cs(m,N,w),g.return=m,m=g;break e}n(m,N);break}else t(m,N);N=N.sibling}w.type===ui?(g=ko(w.props.children,m.mode,S,w.key),g.return=m,m=g):(S=cc(w.type,w.key,w.props,null,m.mode,S),S.ref=Cs(m,g,w),S.return=m,m=S)}return s(m);case ci:e:{for(N=w.key;g!==null;){if(g.key===N)if(g.tag===4&&g.stateNode.containerInfo===w.containerInfo&&g.stateNode.implementation===w.implementation){n(m,g.sibling),g=o(g,w.children||[]),g.return=m,m=g;break e}else{n(m,g);break}else t(m,g);g=g.sibling}g=sf(w,m.mode,S),g.return=m,m=g}return s(m);case jr:return N=w._init,_(m,g,N(w._payload),S)}if(Os(w))return y(m,g,w,S);if(xs(w))return v(m,g,w,S);Il(m,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,g!==null&&g.tag===6?(n(m,g.sibling),g=o(g,w),g.return=m,m=g):(n(m,g),g=of(w,m.mode,S),g.return=m,m=g),s(m)):n(m,g)}return _}var Ui=tx(!0),nx=tx(!1),Oc=uo(null),Dc=null,yi=null,Gh=null;function Yh(){Gh=yi=Dc=null}function Kh(e){var t=Oc.current;De(Oc),e._currentValue=t}function mp(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Pi(e,t){Dc=e,Gh=yi=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Rt=!0),e.firstContext=null)}function on(e){var t=e._currentValue;if(Gh!==e)if(e={context:e,memoizedValue:t,next:null},yi===null){if(Dc===null)throw Error(Q(308));yi=e,Dc.dependencies={lanes:0,firstContext:e}}else yi=yi.next=e;return t}var wo=null;function Xh(e){wo===null?wo=[e]:wo.push(e)}function rx(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,Xh(t)):(n.next=o.next,o.next=n),t.interleaved=n,hr(e,r)}function hr(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 Or=!1;function qh(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ox(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 ar(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Kr(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Te&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,hr(e,n)}return o=r.interleaved,o===null?(t.next=t,Xh(r)):(t.next=o.next,o.next=t),r.interleaved=t,hr(e,n)}function rc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Dh(e,n)}}function p0(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=s:i=i.next=s,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Lc(e,t,n,r){var o=e.updateQueue;Or=!1;var i=o.firstBaseUpdate,s=o.lastBaseUpdate,a=o.shared.pending;if(a!==null){o.shared.pending=null;var l=a,c=l.next;l.next=null,s===null?i=c:s.next=c,s=l;var d=e.alternate;d!==null&&(d=d.updateQueue,a=d.lastBaseUpdate,a!==s&&(a===null?d.firstBaseUpdate=c:a.next=c,d.lastBaseUpdate=l))}if(i!==null){var u=o.baseState;s=0,d=c=l=null,a=i;do{var f=a.lane,p=a.eventTime;if((r&f)===f){d!==null&&(d=d.next={eventTime:p,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var y=e,v=a;switch(f=t,p=n,v.tag){case 1:if(y=v.payload,typeof y=="function"){u=y.call(p,u,f);break e}u=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=v.payload,f=typeof y=="function"?y.call(p,u,f):y,f==null)break e;u=We({},u,f);break e;case 2:Or=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,f=o.effects,f===null?o.effects=[a]:f.push(a))}else p={eventTime:p,lane:f,tag:a.tag,payload:a.payload,callback:a.callback,next:null},d===null?(c=d=p,l=u):d=d.next=p,s|=f;if(a=a.next,a===null){if(a=o.shared.pending,a===null)break;f=a,a=f.next,f.next=null,o.lastBaseUpdate=f,o.shared.pending=null}}while(!0);if(d===null&&(l=u),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=d,t=o.shared.interleaved,t!==null){o=t;do s|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);Oo|=s,e.lanes=s,e.memoizedState=u}}function h0(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(o!==null){if(r.callback=null,r=n,typeof o!="function")throw Error(Q(191,o));o.call(r)}}}var tl={},On=uo(tl),ga=uo(tl),va=uo(tl);function _o(e){if(e===tl)throw Error(Q(174));return e}function Qh(e,t){switch(Me(va,t),Me(ga,e),Me(On,tl),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Kf(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Kf(t,e)}De(On),Me(On,t)}function Wi(){De(On),De(ga),De(va)}function ix(e){_o(va.current);var t=_o(On.current),n=Kf(t,e.type);t!==n&&(Me(ga,e),Me(On,n))}function Jh(e){ga.current===e&&(De(On),De(ga))}var Be=uo(0);function zc(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Qd=[];function em(){for(var e=0;e<Qd.length;e++)Qd[e]._workInProgressVersionPrimary=null;Qd.length=0}var oc=br.ReactCurrentDispatcher,Jd=br.ReactCurrentBatchConfig,jo=0,Ue=null,tt=null,rt=null,$c=!1,Xs=!1,ya=0,l5=0;function ht(){throw Error(Q(321))}function tm(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!bn(e[n],t[n]))return!1;return!0}function nm(e,t,n,r,o,i){if(jo=i,Ue=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,oc.current=e===null||e.memoizedState===null?f5:p5,e=n(r,o),Xs){i=0;do{if(Xs=!1,ya=0,25<=i)throw Error(Q(301));i+=1,rt=tt=null,t.updateQueue=null,oc.current=h5,e=n(r,o)}while(Xs)}if(oc.current=Fc,t=tt!==null&&tt.next!==null,jo=0,rt=tt=Ue=null,$c=!1,t)throw Error(Q(300));return e}function rm(){var e=ya!==0;return ya=0,e}function In(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return rt===null?Ue.memoizedState=rt=e:rt=rt.next=e,rt}function sn(){if(tt===null){var e=Ue.alternate;e=e!==null?e.memoizedState:null}else e=tt.next;var t=rt===null?Ue.memoizedState:rt.next;if(t!==null)rt=t,tt=e;else{if(e===null)throw Error(Q(310));tt=e,e={memoizedState:tt.memoizedState,baseState:tt.baseState,baseQueue:tt.baseQueue,queue:tt.queue,next:null},rt===null?Ue.memoizedState=rt=e:rt=rt.next=e}return rt}function xa(e,t){return typeof t=="function"?t(e):t}function ef(e){var t=sn(),n=t.queue;if(n===null)throw Error(Q(311));n.lastRenderedReducer=e;var r=tt,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(o!==null){i=o.next,r=r.baseState;var a=s=null,l=null,c=i;do{var d=c.lane;if((jo&d)===d)l!==null&&(l=l.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),r=c.hasEagerState?c.eagerState:e(r,c.action);else{var u={lane:d,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};l===null?(a=l=u,s=r):l=l.next=u,Ue.lanes|=d,Oo|=d}c=c.next}while(c!==null&&c!==i);l===null?s=r:l.next=a,bn(r,t.memoizedState)||(Rt=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=l,n.lastRenderedState=r}if(e=n.interleaved,e!==null){o=e;do i=o.lane,Ue.lanes|=i,Oo|=i,o=o.next;while(o!==e)}else o===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function tf(e){var t=sn(),n=t.queue;if(n===null)throw Error(Q(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var s=o=o.next;do i=e(i,s.action),s=s.next;while(s!==o);bn(i,t.memoizedState)||(Rt=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function sx(){}function ax(e,t){var n=Ue,r=sn(),o=t(),i=!bn(r.memoizedState,o);if(i&&(r.memoizedState=o,Rt=!0),r=r.queue,om(ux.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||rt!==null&&rt.memoizedState.tag&1){if(n.flags|=2048,wa(9,cx.bind(null,n,r,o,t),void 0,null),at===null)throw Error(Q(349));jo&30||lx(n,t,o)}return o}function lx(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ue.updateQueue,t===null?(t={lastEffect:null,stores:null},Ue.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function cx(e,t,n,r){t.value=n,t.getSnapshot=r,dx(t)&&fx(e)}function ux(e,t,n){return n(function(){dx(t)&&fx(e)})}function dx(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!bn(e,n)}catch{return!0}}function fx(e){var t=hr(e,1);t!==null&&yn(t,e,1,-1)}function m0(e){var t=In();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:xa,lastRenderedState:e},t.queue=e,e=e.dispatch=d5.bind(null,Ue,e),[t.memoizedState,e]}function wa(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=Ue.updateQueue,t===null?(t={lastEffect:null,stores:null},Ue.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function px(){return sn().memoizedState}function ic(e,t,n,r){var o=In();Ue.flags|=e,o.memoizedState=wa(1|t,n,void 0,r===void 0?null:r)}function Ru(e,t,n,r){var o=sn();r=r===void 0?null:r;var i=void 0;if(tt!==null){var s=tt.memoizedState;if(i=s.destroy,r!==null&&tm(r,s.deps)){o.memoizedState=wa(t,n,i,r);return}}Ue.flags|=e,o.memoizedState=wa(1|t,n,i,r)}function g0(e,t){return ic(8390656,8,e,t)}function om(e,t){return Ru(2048,8,e,t)}function hx(e,t){return Ru(4,2,e,t)}function mx(e,t){return Ru(4,4,e,t)}function gx(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function vx(e,t,n){return n=n!=null?n.concat([e]):null,Ru(4,4,gx.bind(null,t,e),n)}function im(){}function yx(e,t){var n=sn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&tm(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function xx(e,t){var n=sn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&tm(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function wx(e,t,n){return jo&21?(bn(n,t)||(n=E1(),Ue.lanes|=n,Oo|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Rt=!0),e.memoizedState=n)}function c5(e,t){var n=Re;Re=n!==0&&4>n?n:4,e(!0);var r=Jd.transition;Jd.transition={};try{e(!1),t()}finally{Re=n,Jd.transition=r}}function _x(){return sn().memoizedState}function u5(e,t,n){var r=qr(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Sx(e))bx(t,n);else if(n=rx(e,t,n,r),n!==null){var o=_t();yn(n,e,r,o),Cx(n,t,r)}}function d5(e,t,n){var r=qr(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Sx(e))bx(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var s=t.lastRenderedState,a=i(s,n);if(o.hasEagerState=!0,o.eagerState=a,bn(a,s)){var l=t.interleaved;l===null?(o.next=o,Xh(t)):(o.next=l.next,l.next=o),t.interleaved=o;return}}catch{}finally{}n=rx(e,t,o,r),n!==null&&(o=_t(),yn(n,e,r,o),Cx(n,t,r))}}function Sx(e){var t=e.alternate;return e===Ue||t!==null&&t===Ue}function bx(e,t){Xs=$c=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Cx(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Dh(e,n)}}var Fc={readContext:on,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useInsertionEffect:ht,useLayoutEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useMutableSource:ht,useSyncExternalStore:ht,useId:ht,unstable_isNewReconciler:!1},f5={readContext:on,useCallback:function(e,t){return In().memoizedState=[e,t===void 0?null:t],e},useContext:on,useEffect:g0,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ic(4194308,4,gx.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ic(4194308,4,e,t)},useInsertionEffect:function(e,t){return ic(4,2,e,t)},useMemo:function(e,t){var n=In();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=In();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=u5.bind(null,Ue,e),[r.memoizedState,e]},useRef:function(e){var t=In();return e={current:e},t.memoizedState=e},useState:m0,useDebugValue:im,useDeferredValue:function(e){return In().memoizedState=e},useTransition:function(){var e=m0(!1),t=e[0];return e=c5.bind(null,e[1]),In().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ue,o=In();if($e){if(n===void 0)throw Error(Q(407));n=n()}else{if(n=t(),at===null)throw Error(Q(349));jo&30||lx(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,g0(ux.bind(null,r,i,e),[e]),r.flags|=2048,wa(9,cx.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=In(),t=at.identifierPrefix;if($e){var n=or,r=rr;n=(r&~(1<<32-vn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ya++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=l5++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},p5={readContext:on,useCallback:yx,useContext:on,useEffect:om,useImperativeHandle:vx,useInsertionEffect:hx,useLayoutEffect:mx,useMemo:xx,useReducer:ef,useRef:px,useState:function(){return ef(xa)},useDebugValue:im,useDeferredValue:function(e){var t=sn();return wx(t,tt.memoizedState,e)},useTransition:function(){var e=ef(xa)[0],t=sn().memoizedState;return[e,t]},useMutableSource:sx,useSyncExternalStore:ax,useId:_x,unstable_isNewReconciler:!1},h5={readContext:on,useCallback:yx,useContext:on,useEffect:om,useImperativeHandle:vx,useInsertionEffect:hx,useLayoutEffect:mx,useMemo:xx,useReducer:tf,useRef:px,useState:function(){return tf(xa)},useDebugValue:im,useDeferredValue:function(e){var t=sn();return tt===null?t.memoizedState=e:wx(t,tt.memoizedState,e)},useTransition:function(){var e=tf(xa)[0],t=sn().memoizedState;return[e,t]},useMutableSource:sx,useSyncExternalStore:ax,useId:_x,unstable_isNewReconciler:!1};function cn(e,t){if(e&&e.defaultProps){t=We({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function gp(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:We({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Au={isMounted:function(e){return(e=e._reactInternals)?Zo(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=_t(),o=qr(e),i=ar(r,o);i.payload=t,n!=null&&(i.callback=n),t=Kr(e,i,o),t!==null&&(yn(t,e,o,r),rc(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=_t(),o=qr(e),i=ar(r,o);i.tag=1,i.payload=t,n!=null&&(i.callback=n),t=Kr(e,i,o),t!==null&&(yn(t,e,o,r),rc(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=_t(),r=qr(e),o=ar(n,r);o.tag=2,t!=null&&(o.callback=t),t=Kr(e,o,r),t!==null&&(yn(t,e,r,n),rc(t,e,r))}};function v0(e,t,n,r,o,i,s){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(r,i,s):t.prototype&&t.prototype.isPureReactComponent?!fa(n,r)||!fa(o,i):!0}function Ex(e,t,n){var r=!1,o=eo,i=t.contextType;return typeof i=="object"&&i!==null?i=on(i):(o=jt(t)?Ao:vt.current,r=t.contextTypes,i=(r=r!=null)?Hi(e,o):eo),t=new t(n,i),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Au,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function y0(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Au.enqueueReplaceState(t,t.state,null)}function vp(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs={},qh(e);var i=t.contextType;typeof i=="object"&&i!==null?o.context=on(i):(i=jt(t)?Ao:vt.current,o.context=Hi(e,i)),o.state=e.memoizedState,i=t.getDerivedStateFromProps,typeof i=="function"&&(gp(e,t,i,n),o.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof o.getSnapshotBeforeUpdate=="function"||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(t=o.state,typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount(),t!==o.state&&Au.enqueueReplaceState(o,o.state,null),Lc(e,n,o,r),o.state=e.memoizedState),typeof o.componentDidMount=="function"&&(e.flags|=4194308)}function Zi(e,t){try{var n="",r=t;do n+=H3(r),r=r.return;while(r);var o=n}catch(i){o=`
+Error generating stack: `+i.message+`
+`+i.stack}return{value:e,source:t,stack:o,digest:null}}function nf(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function yp(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var m5=typeof WeakMap=="function"?WeakMap:Map;function kx(e,t,n){n=ar(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hc||(Hc=!0,Tp=r),yp(e,t)},n}function Nx(e,t,n){n=ar(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){yp(e,t)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){yp(e,t),typeof r!="function"&&(Xr===null?Xr=new Set([this]):Xr.add(this));var s=t.stack;this.componentDidCatch(t.value,{componentStack:s!==null?s:""})}),n}function x0(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new m5;var o=new Set;r.set(t,o)}else o=r.get(t),o===void 0&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=P5.bind(null,e,t,n),t.then(e,e))}function w0(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function _0(e,t,n,r,o){return e.mode&1?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=ar(-1,1),t.tag=2,Kr(n,t,1))),n.lanes|=1),e)}var g5=br.ReactCurrentOwner,Rt=!1;function xt(e,t,n,r){t.child=e===null?nx(t,null,n,r):Ui(t,e.child,n,r)}function S0(e,t,n,r,o){n=n.render;var i=t.ref;return Pi(t,o),r=nm(e,t,n,r,i,o),n=rm(),e!==null&&!Rt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,mr(e,t,o)):($e&&n&&Uh(t),t.flags|=1,xt(e,t,r,o),t.child)}function b0(e,t,n,r,o){if(e===null){var i=n.type;return typeof i=="function"&&!pm(i)&&i.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=i,Tx(e,t,i,r,o)):(e=cc(n.type,null,r,t,t.mode,o),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!(e.lanes&o)){var s=i.memoizedProps;if(n=n.compare,n=n!==null?n:fa,n(s,r)&&e.ref===t.ref)return mr(e,t,o)}return t.flags|=1,e=Qr(i,r),e.ref=t.ref,e.return=t,t.child=e}function Tx(e,t,n,r,o){if(e!==null){var i=e.memoizedProps;if(fa(i,r)&&e.ref===t.ref)if(Rt=!1,t.pendingProps=r=i,(e.lanes&o)!==0)e.flags&131072&&(Rt=!0);else return t.lanes=e.lanes,mr(e,t,o)}return xp(e,t,n,r,o)}function Px(e,t,n){var r=t.pendingProps,o=r.children,i=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Me(wi,$t),$t|=n;else{if(!(n&1073741824))return e=i!==null?i.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Me(wi,$t),$t|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=i!==null?i.baseLanes:n,Me(wi,$t),$t|=r}else i!==null?(r=i.baseLanes|n,t.memoizedState=null):r=n,Me(wi,$t),$t|=r;return xt(e,t,o,n),t.child}function Ix(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function xp(e,t,n,r,o){var i=jt(n)?Ao:vt.current;return i=Hi(t,i),Pi(t,o),n=nm(e,t,n,r,i,o),r=rm(),e!==null&&!Rt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,mr(e,t,o)):($e&&r&&Uh(t),t.flags|=1,xt(e,t,n,o),t.child)}function C0(e,t,n,r,o){if(jt(n)){var i=!0;Ac(t)}else i=!1;if(Pi(t,o),t.stateNode===null)sc(e,t),Ex(t,n,r),vp(t,n,r,o),r=!0;else if(e===null){var s=t.stateNode,a=t.memoizedProps;s.props=a;var l=s.context,c=n.contextType;typeof c=="object"&&c!==null?c=on(c):(c=jt(n)?Ao:vt.current,c=Hi(t,c));var d=n.getDerivedStateFromProps,u=typeof d=="function"||typeof s.getSnapshotBeforeUpdate=="function";u||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(a!==r||l!==c)&&y0(t,s,r,c),Or=!1;var f=t.memoizedState;s.state=f,Lc(t,r,s,o),l=t.memoizedState,a!==r||f!==l||Mt.current||Or?(typeof d=="function"&&(gp(t,n,d,r),l=t.memoizedState),(a=Or||v0(t,n,a,r,f,l,c))?(u||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(t.flags|=4194308)):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),s.props=r,s.state=l,s.context=c,r=a):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{s=t.stateNode,ox(e,t),a=t.memoizedProps,c=t.type===t.elementType?a:cn(t.type,a),s.props=c,u=t.pendingProps,f=s.context,l=n.contextType,typeof l=="object"&&l!==null?l=on(l):(l=jt(n)?Ao:vt.current,l=Hi(t,l));var p=n.getDerivedStateFromProps;(d=typeof p=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(a!==u||f!==l)&&y0(t,s,r,l),Or=!1,f=t.memoizedState,s.state=f,Lc(t,r,s,o);var y=t.memoizedState;a!==u||f!==y||Mt.current||Or?(typeof p=="function"&&(gp(t,n,p,r),y=t.memoizedState),(c=Or||v0(t,n,c,r,f,y,l)||!1)?(d||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(r,y,l),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(r,y,l)),typeof s.componentDidUpdate=="function"&&(t.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof s.componentDidUpdate!="function"||a===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||a===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=y),s.props=r,s.state=y,s.context=l,r=c):(typeof s.componentDidUpdate!="function"||a===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||a===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return wp(e,t,n,r,i,o)}function wp(e,t,n,r,o,i){Ix(e,t);var s=(t.flags&128)!==0;if(!r&&!s)return o&&c0(t,n,!1),mr(e,t,i);r=t.stateNode,g5.current=t;var a=s&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&s?(t.child=Ui(t,e.child,null,i),t.child=Ui(t,null,a,i)):xt(e,t,a,i),t.memoizedState=r.state,o&&c0(t,n,!0),t.child}function Rx(e){var t=e.stateNode;t.pendingContext?l0(e,t.pendingContext,t.pendingContext!==t.context):t.context&&l0(e,t.context,!1),Qh(e,t.containerInfo)}function E0(e,t,n,r,o){return Bi(),Zh(o),t.flags|=256,xt(e,t,n,r),t.child}var _p={dehydrated:null,treeContext:null,retryLane:0};function Sp(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ax(e,t,n){var r=t.pendingProps,o=Be.current,i=!1,s=(t.flags&128)!==0,a;if((a=s)||(a=e!==null&&e.memoizedState===null?!1:(o&2)!==0),a?(i=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(o|=1),Me(Be,o&1),e===null)return hp(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(s=r.children,e=r.fallback,i?(r=t.mode,i=t.child,s={mode:"hidden",children:s},!(r&1)&&i!==null?(i.childLanes=0,i.pendingProps=s):i=Ou(s,r,0,null),e=ko(e,r,n,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=Sp(n),t.memoizedState=_p,e):sm(t,s));if(o=e.memoizedState,o!==null&&(a=o.dehydrated,a!==null))return v5(e,t,s,r,a,o,n);if(i){i=r.fallback,s=t.mode,o=e.child,a=o.sibling;var l={mode:"hidden",children:r.children};return!(s&1)&&t.child!==o?(r=t.child,r.childLanes=0,r.pendingProps=l,t.deletions=null):(r=Qr(o,l),r.subtreeFlags=o.subtreeFlags&14680064),a!==null?i=Qr(a,i):(i=ko(i,s,n,null),i.flags|=2),i.return=t,r.return=t,r.sibling=i,t.child=r,r=i,i=t.child,s=e.child.memoizedState,s=s===null?Sp(n):{baseLanes:s.baseLanes|n,cachePool:null,transitions:s.transitions},i.memoizedState=s,i.childLanes=e.childLanes&~n,t.memoizedState=_p,r}return i=e.child,e=i.sibling,r=Qr(i,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function sm(e,t){return t=Ou({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Rl(e,t,n,r){return r!==null&&Zh(r),Ui(t,e.child,null,n),e=sm(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function v5(e,t,n,r,o,i,s){if(n)return t.flags&256?(t.flags&=-257,r=nf(Error(Q(422))),Rl(e,t,s,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ou({mode:"visible",children:r.children},o,0,null),i=ko(i,o,s,null),i.flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,t.mode&1&&Ui(t,e.child,null,s),t.child.memoizedState=Sp(s),t.memoizedState=_p,i);if(!(t.mode&1))return Rl(e,t,s,null);if(o.data==="$!"){if(r=o.nextSibling&&o.nextSibling.dataset,r)var a=r.dgst;return r=a,i=Error(Q(419)),r=nf(i,r,void 0),Rl(e,t,s,r)}if(a=(s&e.childLanes)!==0,Rt||a){if(r=at,r!==null){switch(s&-s){case 4:o=2;break;case 16:o=8;break;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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}o=o&(r.suspendedLanes|s)?0:o,o!==0&&o!==i.retryLane&&(i.retryLane=o,hr(e,o),yn(r,e,o,-1))}return fm(),r=nf(Error(Q(421))),Rl(e,t,s,r)}return o.data==="$?"?(t.flags|=128,t.child=e.child,t=I5.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,Bt=Yr(o.nextSibling),Ut=t,$e=!0,fn=null,e!==null&&(Jt[en++]=rr,Jt[en++]=or,Jt[en++]=Mo,rr=e.id,or=e.overflow,Mo=t),t=sm(t,r.children),t.flags|=4096,t)}function k0(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),mp(e.return,t,n)}function rf(e,t,n,r,o){var i=e.memoizedState;i===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o)}function Mx(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(xt(e,t,r.children,n),r=Be.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&k0(e,n,t);else if(e.tag===19)k0(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Me(Be,r),!(t.mode&1))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;n!==null;)e=n.alternate,e!==null&&zc(e)===null&&(o=n),n=n.sibling;n=o,n===null?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rf(t,!1,o,n,i);break;case"backwards":for(n=null,o=t.child,t.child=null;o!==null;){if(e=o.alternate,e!==null&&zc(e)===null){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rf(t,!0,n,null,i);break;case"together":rf(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function sc(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function mr(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Oo|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(Q(153));if(t.child!==null){for(e=t.child,n=Qr(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Qr(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function y5(e,t,n){switch(t.tag){case 3:Rx(t),Bi();break;case 5:ix(t);break;case 1:jt(t.type)&&Ac(t);break;case 4:Qh(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Me(Oc,r._currentValue),r._currentValue=o;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(Me(Be,Be.current&1),t.flags|=128,null):n&t.child.childLanes?Ax(e,t,n):(Me(Be,Be.current&1),e=mr(e,t,n),e!==null?e.sibling:null);Me(Be,Be.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return Mx(e,t,n);t.flags|=128}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Me(Be,Be.current),r)break;return null;case 22:case 23:return t.lanes=0,Px(e,t,n)}return mr(e,t,n)}var jx,bp,Ox,Dx;jx=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};bp=function(){};Ox=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,_o(On.current);var i=null;switch(n){case"input":o=Wf(e,o),r=Wf(e,r),i=[];break;case"select":o=We({},o,{value:void 0}),r=We({},r,{value:void 0}),i=[];break;case"textarea":o=Yf(e,o),r=Yf(e,r),i=[];break;default:typeof o.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Ic)}Xf(n,r);var s;n=null;for(c in o)if(!r.hasOwnProperty(c)&&o.hasOwnProperty(c)&&o[c]!=null)if(c==="style"){var a=o[c];for(s in a)a.hasOwnProperty(s)&&(n||(n={}),n[s]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(ia.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null));for(c in r){var l=r[c];if(a=o!=null?o[c]:void 0,r.hasOwnProperty(c)&&l!==a&&(l!=null||a!=null))if(c==="style")if(a){for(s in a)!a.hasOwnProperty(s)||l&&l.hasOwnProperty(s)||(n||(n={}),n[s]="");for(s in l)l.hasOwnProperty(s)&&a[s]!==l[s]&&(n||(n={}),n[s]=l[s])}else n||(i||(i=[]),i.push(c,n)),n=l;else c==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,a=a?a.__html:void 0,l!=null&&a!==l&&(i=i||[]).push(c,l)):c==="children"?typeof l!="string"&&typeof l!="number"||(i=i||[]).push(c,""+l):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(ia.hasOwnProperty(c)?(l!=null&&c==="onScroll"&&Oe("scroll",e),i||a===l||(i=[])):(i=i||[]).push(c,l))}n&&(i=i||[]).push("style",n);var c=i;(t.updateQueue=c)&&(t.flags|=4)}};Dx=function(e,t,n,r){n!==r&&(t.flags|=4)};function Es(e,t){if(!$e)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function mt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;o!==null;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags&14680064,r|=o.flags&14680064,o.return=e,o=o.sibling;else for(o=e.child;o!==null;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function x5(e,t,n){var r=t.pendingProps;switch(Wh(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return mt(t),null;case 1:return jt(t.type)&&Rc(),mt(t),null;case 3:return r=t.stateNode,Wi(),De(Mt),De(vt),em(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Pl(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,fn!==null&&(Rp(fn),fn=null))),bp(e,t),mt(t),null;case 5:Jh(t);var o=_o(va.current);if(n=t.type,e!==null&&t.stateNode!=null)Ox(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(Q(166));return mt(t),null}if(e=_o(On.current),Pl(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[Rn]=t,r[ma]=i,e=(t.mode&1)!==0,n){case"dialog":Oe("cancel",r),Oe("close",r);break;case"iframe":case"object":case"embed":Oe("load",r);break;case"video":case"audio":for(o=0;o<Ls.length;o++)Oe(Ls[o],r);break;case"source":Oe("error",r);break;case"img":case"image":case"link":Oe("error",r),Oe("load",r);break;case"details":Oe("toggle",r);break;case"input":Og(r,i),Oe("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Oe("invalid",r);break;case"textarea":Lg(r,i),Oe("invalid",r)}Xf(n,i),o=null;for(var s in i)if(i.hasOwnProperty(s)){var a=i[s];s==="children"?typeof a=="string"?r.textContent!==a&&(i.suppressHydrationWarning!==!0&&Tl(r.textContent,a,e),o=["children",a]):typeof a=="number"&&r.textContent!==""+a&&(i.suppressHydrationWarning!==!0&&Tl(r.textContent,a,e),o=["children",""+a]):ia.hasOwnProperty(s)&&a!=null&&s==="onScroll"&&Oe("scroll",r)}switch(n){case"input":wl(r),Dg(r,i,!0);break;case"textarea":wl(r),zg(r);break;case"select":case"option":break;default:typeof i.onClick=="function"&&(r.onclick=Ic)}r=o,t.updateQueue=r,r!==null&&(t.flags|=4)}else{s=o.nodeType===9?o:o.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=u1(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=s.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[Rn]=t,e[ma]=r,jx(e,t,!1,!1),t.stateNode=e;e:{switch(s=qf(n,r),n){case"dialog":Oe("cancel",e),Oe("close",e),o=r;break;case"iframe":case"object":case"embed":Oe("load",e),o=r;break;case"video":case"audio":for(o=0;o<Ls.length;o++)Oe(Ls[o],e);o=r;break;case"source":Oe("error",e),o=r;break;case"img":case"image":case"link":Oe("error",e),Oe("load",e),o=r;break;case"details":Oe("toggle",e),o=r;break;case"input":Og(e,r),o=Wf(e,r),Oe("invalid",e);break;case"option":o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=We({},r,{value:void 0}),Oe("invalid",e);break;case"textarea":Lg(e,r),o=Yf(e,r),Oe("invalid",e);break;default:o=r}Xf(n,o),a=o;for(i in a)if(a.hasOwnProperty(i)){var l=a[i];i==="style"?p1(e,l):i==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&d1(e,l)):i==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&sa(e,l):typeof l=="number"&&sa(e,""+l):i!=="suppressContentEditableWarning"&&i!=="suppressHydrationWarning"&&i!=="autoFocus"&&(ia.hasOwnProperty(i)?l!=null&&i==="onScroll"&&Oe("scroll",e):l!=null&&Ih(e,i,l,s))}switch(n){case"input":wl(e),Dg(e,r,!1);break;case"textarea":wl(e),zg(e);break;case"option":r.value!=null&&e.setAttribute("value",""+Jr(r.value));break;case"select":e.multiple=!!r.multiple,i=r.value,i!=null?Ei(e,!!r.multiple,i,!1):r.defaultValue!=null&&Ei(e,!!r.multiple,r.defaultValue,!0);break;default:typeof o.onClick=="function"&&(e.onclick=Ic)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return mt(t),null;case 6:if(e&&t.stateNode!=null)Dx(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(Q(166));if(n=_o(va.current),_o(On.current),Pl(t)){if(r=t.stateNode,n=t.memoizedProps,r[Rn]=t,(i=r.nodeValue!==n)&&(e=Ut,e!==null))switch(e.tag){case 3:Tl(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Tl(r.nodeValue,n,(e.mode&1)!==0)}i&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[Rn]=t,t.stateNode=r}return mt(t),null;case 13:if(De(Be),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if($e&&Bt!==null&&t.mode&1&&!(t.flags&128))ex(),Bi(),t.flags|=98560,i=!1;else if(i=Pl(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(Q(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(Q(317));i[Rn]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;mt(t),i=!1}else fn!==null&&(Rp(fn),fn=null),i=!0;if(!i)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||Be.current&1?nt===0&&(nt=3):fm())),t.updateQueue!==null&&(t.flags|=4),mt(t),null);case 4:return Wi(),bp(e,t),e===null&&pa(t.stateNode.containerInfo),mt(t),null;case 10:return Kh(t.type._context),mt(t),null;case 17:return jt(t.type)&&Rc(),mt(t),null;case 19:if(De(Be),i=t.memoizedState,i===null)return mt(t),null;if(r=(t.flags&128)!==0,s=i.rendering,s===null)if(r)Es(i,!1);else{if(nt!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(s=zc(e),s!==null){for(t.flags|=128,Es(i,!1),r=s.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)i=n,e=r,i.flags&=14680066,s=i.alternate,s===null?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=s.childLanes,i.lanes=s.lanes,i.child=s.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=s.memoizedProps,i.memoizedState=s.memoizedState,i.updateQueue=s.updateQueue,i.type=s.type,e=s.dependencies,i.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Me(Be,Be.current&1|2),t.child}e=e.sibling}i.tail!==null&&Ke()>Gi&&(t.flags|=128,r=!0,Es(i,!1),t.lanes=4194304)}else{if(!r)if(e=zc(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Es(i,!0),i.tail===null&&i.tailMode==="hidden"&&!s.alternate&&!$e)return mt(t),null}else 2*Ke()-i.renderingStartTime>Gi&&n!==1073741824&&(t.flags|=128,r=!0,Es(i,!1),t.lanes=4194304);i.isBackwards?(s.sibling=t.child,t.child=s):(n=i.last,n!==null?n.sibling=s:t.child=s,i.last=s)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ke(),t.sibling=null,n=Be.current,Me(Be,r?n&1|2:n&1),t):(mt(t),null);case 22:case 23:return dm(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?$t&1073741824&&(mt(t),t.subtreeFlags&6&&(t.flags|=8192)):mt(t),null;case 24:return null;case 25:return null}throw Error(Q(156,t.tag))}function w5(e,t){switch(Wh(t),t.tag){case 1:return jt(t.type)&&Rc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Wi(),De(Mt),De(vt),em(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Jh(t),null;case 13:if(De(Be),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(Q(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return De(Be),null;case 4:return Wi(),null;case 10:return Kh(t.type._context),null;case 22:case 23:return dm(),null;case 24:return null;default:return null}}var Al=!1,gt=!1,_5=typeof WeakSet=="function"?WeakSet:Set,ce=null;function xi(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Ge(e,t,r)}else n.current=null}function Cp(e,t,n){try{n()}catch(r){Ge(e,t,r)}}var N0=!1;function S5(e,t){if(ap=Nc,e=V1(),Bh(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,c=0,d=0,u=e,f=null;t:for(;;){for(var p;u!==n||o!==0&&u.nodeType!==3||(a=s+o),u!==i||r!==0&&u.nodeType!==3||(l=s+r),u.nodeType===3&&(s+=u.nodeValue.length),(p=u.firstChild)!==null;)f=u,u=p;for(;;){if(u===e)break t;if(f===n&&++c===o&&(a=s),f===i&&++d===r&&(l=s),(p=u.nextSibling)!==null)break;u=f,f=u.parentNode}u=p}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(lp={focusedElem:e,selectionRange:n},Nc=!1,ce=t;ce!==null;)if(t=ce,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ce=e;else for(;ce!==null;){t=ce;try{var y=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var v=y.memoizedProps,_=y.memoizedState,m=t.stateNode,g=m.getSnapshotBeforeUpdate(t.elementType===t.type?v:cn(t.type,v),_);m.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var w=t.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Q(163))}}catch(S){Ge(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,ce=e;break}ce=t.return}return y=N0,N0=!1,y}function qs(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&Cp(t,n,i)}o=o.next}while(o!==r)}}function Mu(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Ep(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 Lx(e){var t=e.alternate;t!==null&&(e.alternate=null,Lx(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Rn],delete t[ma],delete t[dp],delete t[o5],delete t[i5])),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 zx(e){return e.tag===5||e.tag===3||e.tag===4}function T0(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||zx(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 kp(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Ic));else if(r!==4&&(e=e.child,e!==null))for(kp(e,t,n),e=e.sibling;e!==null;)kp(e,t,n),e=e.sibling}function Np(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Np(e,t,n),e=e.sibling;e!==null;)Np(e,t,n),e=e.sibling}var ct=null,un=!1;function Tr(e,t,n){for(n=n.child;n!==null;)$x(e,t,n),n=n.sibling}function $x(e,t,n){if(jn&&typeof jn.onCommitFiberUnmount=="function")try{jn.onCommitFiberUnmount(Eu,n)}catch{}switch(n.tag){case 5:gt||xi(n,t);case 6:var r=ct,o=un;ct=null,Tr(e,t,n),ct=r,un=o,ct!==null&&(un?(e=ct,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ct.removeChild(n.stateNode));break;case 18:ct!==null&&(un?(e=ct,n=n.stateNode,e.nodeType===8?Xd(e.parentNode,n):e.nodeType===1&&Xd(e,n),ua(e)):Xd(ct,n.stateNode));break;case 4:r=ct,o=un,ct=n.stateNode.containerInfo,un=!0,Tr(e,t,n),ct=r,un=o;break;case 0:case 11:case 14:case 15:if(!gt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,s=i.destroy;i=i.tag,s!==void 0&&(i&2||i&4)&&Cp(n,t,s),o=o.next}while(o!==r)}Tr(e,t,n);break;case 1:if(!gt&&(xi(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Ge(n,t,a)}Tr(e,t,n);break;case 21:Tr(e,t,n);break;case 22:n.mode&1?(gt=(r=gt)||n.memoizedState!==null,Tr(e,t,n),gt=r):Tr(e,t,n);break;default:Tr(e,t,n)}}function P0(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new _5),t.forEach(function(r){var o=R5.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function an(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,a=s;e:for(;a!==null;){switch(a.tag){case 5:ct=a.stateNode,un=!1;break e;case 3:ct=a.stateNode.containerInfo,un=!0;break e;case 4:ct=a.stateNode.containerInfo,un=!0;break e}a=a.return}if(ct===null)throw Error(Q(160));$x(i,s,o),ct=null,un=!1;var l=o.alternate;l!==null&&(l.return=null),o.return=null}catch(c){Ge(o,t,c)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Fx(t,e),t=t.sibling}function Fx(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(an(t,e),Pn(e),r&4){try{qs(3,e,e.return),Mu(3,e)}catch(v){Ge(e,e.return,v)}try{qs(5,e,e.return)}catch(v){Ge(e,e.return,v)}}break;case 1:an(t,e),Pn(e),r&512&&n!==null&&xi(n,n.return);break;case 5:if(an(t,e),Pn(e),r&512&&n!==null&&xi(n,n.return),e.flags&32){var o=e.stateNode;try{sa(o,"")}catch(v){Ge(e,e.return,v)}}if(r&4&&(o=e.stateNode,o!=null)){var i=e.memoizedProps,s=n!==null?n.memoizedProps:i,a=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{a==="input"&&i.type==="radio"&&i.name!=null&&l1(o,i),qf(a,s);var c=qf(a,i);for(s=0;s<l.length;s+=2){var d=l[s],u=l[s+1];d==="style"?p1(o,u):d==="dangerouslySetInnerHTML"?d1(o,u):d==="children"?sa(o,u):Ih(o,d,u,c)}switch(a){case"input":Zf(o,i);break;case"textarea":c1(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var p=i.value;p!=null?Ei(o,!!i.multiple,p,!1):f!==!!i.multiple&&(i.defaultValue!=null?Ei(o,!!i.multiple,i.defaultValue,!0):Ei(o,!!i.multiple,i.multiple?[]:"",!1))}o[ma]=i}catch(v){Ge(e,e.return,v)}}break;case 6:if(an(t,e),Pn(e),r&4){if(e.stateNode===null)throw Error(Q(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(v){Ge(e,e.return,v)}}break;case 3:if(an(t,e),Pn(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{ua(t.containerInfo)}catch(v){Ge(e,e.return,v)}break;case 4:an(t,e),Pn(e);break;case 13:an(t,e),Pn(e),o=e.child,o.flags&8192&&(i=o.memoizedState!==null,o.stateNode.isHidden=i,!i||o.alternate!==null&&o.alternate.memoizedState!==null||(cm=Ke())),r&4&&P0(e);break;case 22:if(d=n!==null&&n.memoizedState!==null,e.mode&1?(gt=(c=gt)||d,an(t,e),gt=c):an(t,e),Pn(e),r&8192){if(c=e.memoizedState!==null,(e.stateNode.isHidden=c)&&!d&&e.mode&1)for(ce=e,d=e.child;d!==null;){for(u=ce=d;ce!==null;){switch(f=ce,p=f.child,f.tag){case 0:case 11:case 14:case 15:qs(4,f,f.return);break;case 1:xi(f,f.return);var y=f.stateNode;if(typeof y.componentWillUnmount=="function"){r=f,n=f.return;try{t=r,y.props=t.memoizedProps,y.state=t.memoizedState,y.componentWillUnmount()}catch(v){Ge(r,n,v)}}break;case 5:xi(f,f.return);break;case 22:if(f.memoizedState!==null){R0(u);continue}}p!==null?(p.return=f,ce=p):R0(u)}d=d.sibling}e:for(d=null,u=e;;){if(u.tag===5){if(d===null){d=u;try{o=u.stateNode,c?(i=o.style,typeof i.setProperty=="function"?i.setProperty("display","none","important"):i.display="none"):(a=u.stateNode,l=u.memoizedProps.style,s=l!=null&&l.hasOwnProperty("display")?l.display:null,a.style.display=f1("display",s))}catch(v){Ge(e,e.return,v)}}}else if(u.tag===6){if(d===null)try{u.stateNode.nodeValue=c?"":u.memoizedProps}catch(v){Ge(e,e.return,v)}}else if((u.tag!==22&&u.tag!==23||u.memoizedState===null||u===e)&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===e)break e;for(;u.sibling===null;){if(u.return===null||u.return===e)break e;d===u&&(d=null),u=u.return}d===u&&(d=null),u.sibling.return=u.return,u=u.sibling}}break;case 19:an(t,e),Pn(e),r&4&&P0(e);break;case 21:break;default:an(t,e),Pn(e)}}function Pn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(zx(n)){var r=n;break e}n=n.return}throw Error(Q(160))}switch(r.tag){case 5:var o=r.stateNode;r.flags&32&&(sa(o,""),r.flags&=-33);var i=T0(e);Np(e,i,o);break;case 3:case 4:var s=r.stateNode.containerInfo,a=T0(e);kp(e,a,s);break;default:throw Error(Q(161))}}catch(l){Ge(e,e.return,l)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function b5(e,t,n){ce=e,Vx(e)}function Vx(e,t,n){for(var r=(e.mode&1)!==0;ce!==null;){var o=ce,i=o.child;if(o.tag===22&&r){var s=o.memoizedState!==null||Al;if(!s){var a=o.alternate,l=a!==null&&a.memoizedState!==null||gt;a=Al;var c=gt;if(Al=s,(gt=l)&&!c)for(ce=o;ce!==null;)s=ce,l=s.child,s.tag===22&&s.memoizedState!==null?A0(o):l!==null?(l.return=s,ce=l):A0(o);for(;i!==null;)ce=i,Vx(i),i=i.sibling;ce=o,Al=a,gt=c}I0(e)}else o.subtreeFlags&8772&&i!==null?(i.return=o,ce=i):I0(e)}}function I0(e){for(;ce!==null;){var t=ce;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:gt||Mu(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!gt)if(n===null)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:cn(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;i!==null&&h0(t,i,r);break;case 3:var s=t.updateQueue;if(s!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}h0(t,s,n)}break;case 5:var a=t.stateNode;if(n===null&&t.flags&4){n=a;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var c=t.alternate;if(c!==null){var d=c.memoizedState;if(d!==null){var u=d.dehydrated;u!==null&&ua(u)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(Q(163))}gt||t.flags&512&&Ep(t)}catch(f){Ge(t,t.return,f)}}if(t===e){ce=null;break}if(n=t.sibling,n!==null){n.return=t.return,ce=n;break}ce=t.return}}function R0(e){for(;ce!==null;){var t=ce;if(t===e){ce=null;break}var n=t.sibling;if(n!==null){n.return=t.return,ce=n;break}ce=t.return}}function A0(e){for(;ce!==null;){var t=ce;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Mu(4,t)}catch(l){Ge(t,n,l)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount=="function"){var o=t.return;try{r.componentDidMount()}catch(l){Ge(t,o,l)}}var i=t.return;try{Ep(t)}catch(l){Ge(t,i,l)}break;case 5:var s=t.return;try{Ep(t)}catch(l){Ge(t,s,l)}}}catch(l){Ge(t,t.return,l)}if(t===e){ce=null;break}var a=t.sibling;if(a!==null){a.return=t.return,ce=a;break}ce=t.return}}var C5=Math.ceil,Vc=br.ReactCurrentDispatcher,am=br.ReactCurrentOwner,rn=br.ReactCurrentBatchConfig,Te=0,at=null,Qe=null,dt=0,$t=0,wi=uo(0),nt=0,_a=null,Oo=0,ju=0,lm=0,Qs=null,It=null,cm=0,Gi=1/0,er=null,Hc=!1,Tp=null,Xr=null,Ml=!1,Ur=null,Bc=0,Js=0,Pp=null,ac=-1,lc=0;function _t(){return Te&6?Ke():ac!==-1?ac:ac=Ke()}function qr(e){return e.mode&1?Te&2&&dt!==0?dt&-dt:a5.transition!==null?(lc===0&&(lc=E1()),lc):(e=Re,e!==0||(e=window.event,e=e===void 0?16:A1(e.type)),e):1}function yn(e,t,n,r){if(50<Js)throw Js=0,Pp=null,Error(Q(185));Qa(e,n,r),(!(Te&2)||e!==at)&&(e===at&&(!(Te&2)&&(ju|=n),nt===4&&zr(e,dt)),Ot(e,r),n===1&&Te===0&&!(t.mode&1)&&(Gi=Ke()+500,Iu&&fo()))}function Ot(e,t){var n=e.callbackNode;ak(e,t);var r=kc(e,e===at?dt:0);if(r===0)n!==null&&Vg(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&Vg(n),t===1)e.tag===0?s5(M0.bind(null,e)):q1(M0.bind(null,e)),n5(function(){!(Te&6)&&fo()}),n=null;else{switch(k1(r)){case 1:n=Oh;break;case 4:n=b1;break;case 16:n=Ec;break;case 536870912:n=C1;break;default:n=Ec}n=Kx(n,Hx.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function Hx(e,t){if(ac=-1,lc=0,Te&6)throw Error(Q(327));var n=e.callbackNode;if(Ii()&&e.callbackNode!==n)return null;var r=kc(e,e===at?dt:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=Uc(e,r);else{t=r;var o=Te;Te|=2;var i=Ux();(at!==e||dt!==t)&&(er=null,Gi=Ke()+500,Eo(e,t));do try{N5();break}catch(a){Bx(e,a)}while(!0);Yh(),Vc.current=i,Te=o,Qe!==null?t=0:(at=null,dt=0,t=nt)}if(t!==0){if(t===2&&(o=np(e),o!==0&&(r=o,t=Ip(e,o))),t===1)throw n=_a,Eo(e,0),zr(e,r),Ot(e,Ke()),n;if(t===6)zr(e,r);else{if(o=e.current.alternate,!(r&30)&&!E5(o)&&(t=Uc(e,r),t===2&&(i=np(e),i!==0&&(r=i,t=Ip(e,i))),t===1))throw n=_a,Eo(e,0),zr(e,r),Ot(e,Ke()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(Q(345));case 2:vo(e,It,er);break;case 3:if(zr(e,r),(r&130023424)===r&&(t=cm+500-Ke(),10<t)){if(kc(e,0)!==0)break;if(o=e.suspendedLanes,(o&r)!==r){_t(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=up(vo.bind(null,e,It,er),t);break}vo(e,It,er);break;case 4:if(zr(e,r),(r&4194240)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-vn(r);i=1<<s,s=t[s],s>o&&(o=s),r&=~i}if(r=o,r=Ke()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*C5(r/1960))-r,10<r){e.timeoutHandle=up(vo.bind(null,e,It,er),r);break}vo(e,It,er);break;case 5:vo(e,It,er);break;default:throw Error(Q(329))}}}return Ot(e,Ke()),e.callbackNode===n?Hx.bind(null,e):null}function Ip(e,t){var n=Qs;return e.current.memoizedState.isDehydrated&&(Eo(e,t).flags|=256),e=Uc(e,t),e!==2&&(t=It,It=n,t!==null&&Rp(t)),e}function Rp(e){It===null?It=e:It.push.apply(It,e)}function E5(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var o=n[r],i=o.getSnapshot;o=o.value;try{if(!bn(i(),o))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function zr(e,t){for(t&=~lm,t&=~ju,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-vn(t),r=1<<n;e[n]=-1,t&=~r}}function M0(e){if(Te&6)throw Error(Q(327));Ii();var t=kc(e,0);if(!(t&1))return Ot(e,Ke()),null;var n=Uc(e,t);if(e.tag!==0&&n===2){var r=np(e);r!==0&&(t=r,n=Ip(e,r))}if(n===1)throw n=_a,Eo(e,0),zr(e,t),Ot(e,Ke()),n;if(n===6)throw Error(Q(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,vo(e,It,er),Ot(e,Ke()),null}function um(e,t){var n=Te;Te|=1;try{return e(t)}finally{Te=n,Te===0&&(Gi=Ke()+500,Iu&&fo())}}function Do(e){Ur!==null&&Ur.tag===0&&!(Te&6)&&Ii();var t=Te;Te|=1;var n=rn.transition,r=Re;try{if(rn.transition=null,Re=1,e)return e()}finally{Re=r,rn.transition=n,Te=t,!(Te&6)&&fo()}}function dm(){$t=wi.current,De(wi)}function Eo(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,t5(n)),Qe!==null)for(n=Qe.return;n!==null;){var r=n;switch(Wh(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&Rc();break;case 3:Wi(),De(Mt),De(vt),em();break;case 5:Jh(r);break;case 4:Wi();break;case 13:De(Be);break;case 19:De(Be);break;case 10:Kh(r.type._context);break;case 22:case 23:dm()}n=n.return}if(at=e,Qe=e=Qr(e.current,null),dt=$t=t,nt=0,_a=null,lm=ju=Oo=0,It=Qs=null,wo!==null){for(t=0;t<wo.length;t++)if(n=wo[t],r=n.interleaved,r!==null){n.interleaved=null;var o=r.next,i=n.pending;if(i!==null){var s=i.next;i.next=o,r.next=s}n.pending=r}wo=null}return e}function Bx(e,t){do{var n=Qe;try{if(Yh(),oc.current=Fc,$c){for(var r=Ue.memoizedState;r!==null;){var o=r.queue;o!==null&&(o.pending=null),r=r.next}$c=!1}if(jo=0,rt=tt=Ue=null,Xs=!1,ya=0,am.current=null,n===null||n.return===null){nt=1,_a=t,Qe=null;break}e:{var i=e,s=n.return,a=n,l=t;if(t=dt,a.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var c=l,d=a,u=d.tag;if(!(d.mode&1)&&(u===0||u===11||u===15)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var p=w0(s);if(p!==null){p.flags&=-257,_0(p,s,a,i,t),p.mode&1&&x0(i,c,t),t=p,l=c;var y=t.updateQueue;if(y===null){var v=new Set;v.add(l),t.updateQueue=v}else y.add(l);break e}else{if(!(t&1)){x0(i,c,t),fm();break e}l=Error(Q(426))}}else if($e&&a.mode&1){var _=w0(s);if(_!==null){!(_.flags&65536)&&(_.flags|=256),_0(_,s,a,i,t),Zh(Zi(l,a));break e}}i=l=Zi(l,a),nt!==4&&(nt=2),Qs===null?Qs=[i]:Qs.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t;var m=kx(i,l,t);p0(i,m);break e;case 1:a=l;var g=i.type,w=i.stateNode;if(!(i.flags&128)&&(typeof g.getDerivedStateFromError=="function"||w!==null&&typeof w.componentDidCatch=="function"&&(Xr===null||!Xr.has(w)))){i.flags|=65536,t&=-t,i.lanes|=t;var S=Nx(i,a,t);p0(i,S);break e}}i=i.return}while(i!==null)}Zx(n)}catch(C){t=C,Qe===n&&n!==null&&(Qe=n=n.return);continue}break}while(!0)}function Ux(){var e=Vc.current;return Vc.current=Fc,e===null?Fc:e}function fm(){(nt===0||nt===3||nt===2)&&(nt=4),at===null||!(Oo&268435455)&&!(ju&268435455)||zr(at,dt)}function Uc(e,t){var n=Te;Te|=2;var r=Ux();(at!==e||dt!==t)&&(er=null,Eo(e,t));do try{k5();break}catch(o){Bx(e,o)}while(!0);if(Yh(),Te=n,Vc.current=r,Qe!==null)throw Error(Q(261));return at=null,dt=0,nt}function k5(){for(;Qe!==null;)Wx(Qe)}function N5(){for(;Qe!==null&&!Q3();)Wx(Qe)}function Wx(e){var t=Yx(e.alternate,e,$t);e.memoizedProps=e.pendingProps,t===null?Zx(e):Qe=t,am.current=null}function Zx(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=w5(n,t),n!==null){n.flags&=32767,Qe=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{nt=6,Qe=null;return}}else if(n=x5(n,t,$t),n!==null){Qe=n;return}if(t=t.sibling,t!==null){Qe=t;return}Qe=t=e}while(t!==null);nt===0&&(nt=5)}function vo(e,t,n){var r=Re,o=rn.transition;try{rn.transition=null,Re=1,T5(e,t,n,r)}finally{rn.transition=o,Re=r}return null}function T5(e,t,n,r){do Ii();while(Ur!==null);if(Te&6)throw Error(Q(327));n=e.finishedWork;var o=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(Q(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(lk(e,i),e===at&&(Qe=at=null,dt=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||Ml||(Ml=!0,Kx(Ec,function(){return Ii(),null})),i=(n.flags&15990)!==0,n.subtreeFlags&15990||i){i=rn.transition,rn.transition=null;var s=Re;Re=1;var a=Te;Te|=4,am.current=null,S5(e,n),Fx(n,e),Yk(lp),Nc=!!ap,lp=ap=null,e.current=n,b5(n),J3(),Te=a,Re=s,rn.transition=i}else e.current=n;if(Ml&&(Ml=!1,Ur=e,Bc=o),i=e.pendingLanes,i===0&&(Xr=null),nk(n.stateNode),Ot(e,Ke()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Hc)throw Hc=!1,e=Tp,Tp=null,e;return Bc&1&&e.tag!==0&&Ii(),i=e.pendingLanes,i&1?e===Pp?Js++:(Js=0,Pp=e):Js=0,fo(),null}function Ii(){if(Ur!==null){var e=k1(Bc),t=rn.transition,n=Re;try{if(rn.transition=null,Re=16>e?16:e,Ur===null)var r=!1;else{if(e=Ur,Ur=null,Bc=0,Te&6)throw Error(Q(331));var o=Te;for(Te|=4,ce=e.current;ce!==null;){var i=ce,s=i.child;if(ce.flags&16){var a=i.deletions;if(a!==null){for(var l=0;l<a.length;l++){var c=a[l];for(ce=c;ce!==null;){var d=ce;switch(d.tag){case 0:case 11:case 15:qs(8,d,i)}var u=d.child;if(u!==null)u.return=d,ce=u;else for(;ce!==null;){d=ce;var f=d.sibling,p=d.return;if(Lx(d),d===c){ce=null;break}if(f!==null){f.return=p,ce=f;break}ce=p}}}var y=i.alternate;if(y!==null){var v=y.child;if(v!==null){y.child=null;do{var _=v.sibling;v.sibling=null,v=_}while(v!==null)}}ce=i}}if(i.subtreeFlags&2064&&s!==null)s.return=i,ce=s;else e:for(;ce!==null;){if(i=ce,i.flags&2048)switch(i.tag){case 0:case 11:case 15:qs(9,i,i.return)}var m=i.sibling;if(m!==null){m.return=i.return,ce=m;break e}ce=i.return}}var g=e.current;for(ce=g;ce!==null;){s=ce;var w=s.child;if(s.subtreeFlags&2064&&w!==null)w.return=s,ce=w;else e:for(s=g;ce!==null;){if(a=ce,a.flags&2048)try{switch(a.tag){case 0:case 11:case 15:Mu(9,a)}}catch(C){Ge(a,a.return,C)}if(a===s){ce=null;break e}var S=a.sibling;if(S!==null){S.return=a.return,ce=S;break e}ce=a.return}}if(Te=o,fo(),jn&&typeof jn.onPostCommitFiberRoot=="function")try{jn.onPostCommitFiberRoot(Eu,e)}catch{}r=!0}return r}finally{Re=n,rn.transition=t}}return!1}function j0(e,t,n){t=Zi(n,t),t=kx(e,t,1),e=Kr(e,t,1),t=_t(),e!==null&&(Qa(e,1,t),Ot(e,t))}function Ge(e,t,n){if(e.tag===3)j0(e,e,n);else for(;t!==null;){if(t.tag===3){j0(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(Xr===null||!Xr.has(r))){e=Zi(n,e),e=Nx(t,e,1),t=Kr(t,e,1),e=_t(),t!==null&&(Qa(t,1,e),Ot(t,e));break}}t=t.return}}function P5(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=_t(),e.pingedLanes|=e.suspendedLanes&n,at===e&&(dt&n)===n&&(nt===4||nt===3&&(dt&130023424)===dt&&500>Ke()-cm?Eo(e,0):lm|=n),Ot(e,t)}function Gx(e,t){t===0&&(e.mode&1?(t=bl,bl<<=1,!(bl&130023424)&&(bl=4194304)):t=1);var n=_t();e=hr(e,t),e!==null&&(Qa(e,t,n),Ot(e,n))}function I5(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Gx(e,n)}function R5(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(Q(314))}r!==null&&r.delete(t),Gx(e,n)}var Yx;Yx=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Mt.current)Rt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Rt=!1,y5(e,t,n);Rt=!!(e.flags&131072)}else Rt=!1,$e&&t.flags&1048576&&Q1(t,jc,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;sc(e,t),e=t.pendingProps;var o=Hi(t,vt.current);Pi(t,n),o=nm(null,t,r,e,o,n);var i=rm();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,jt(r)?(i=!0,Ac(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,qh(t),o.updater=Au,t.stateNode=o,o._reactInternals=t,vp(t,r,e,n),t=wp(null,t,r,!0,i,n)):(t.tag=0,$e&&i&&Uh(t),xt(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(sc(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=M5(r),e=cn(r,e),o){case 0:t=xp(null,t,r,e,n);break e;case 1:t=C0(null,t,r,e,n);break e;case 11:t=S0(null,t,r,e,n);break e;case 14:t=b0(null,t,r,cn(r.type,e),n);break e}throw Error(Q(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:cn(r,o),xp(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:cn(r,o),C0(e,t,r,o,n);case 3:e:{if(Rx(t),e===null)throw Error(Q(387));r=t.pendingProps,i=t.memoizedState,o=i.element,ox(e,t),Lc(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=Zi(Error(Q(423)),t),t=E0(e,t,r,n,o);break e}else if(r!==o){o=Zi(Error(Q(424)),t),t=E0(e,t,r,n,o);break e}else for(Bt=Yr(t.stateNode.containerInfo.firstChild),Ut=t,$e=!0,fn=null,n=nx(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Bi(),r===o){t=mr(e,t,n);break e}xt(e,t,r,n)}t=t.child}return t;case 5:return ix(t),e===null&&hp(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,s=o.children,cp(r,o)?s=null:i!==null&&cp(r,i)&&(t.flags|=32),Ix(e,t),xt(e,t,s,n),t.child;case 6:return e===null&&hp(t),null;case 13:return Ax(e,t,n);case 4:return Qh(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ui(t,null,r,n):xt(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:cn(r,o),S0(e,t,r,o,n);case 7:return xt(e,t,t.pendingProps,n),t.child;case 8:return xt(e,t,t.pendingProps.children,n),t.child;case 12:return xt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,Me(Oc,r._currentValue),r._currentValue=s,i!==null)if(bn(i.value,s)){if(i.children===o.children&&!Mt.current){t=mr(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){s=i.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(i.tag===1){l=ar(-1,n&-n),l.tag=2;var c=i.updateQueue;if(c!==null){c=c.shared;var d=c.pending;d===null?l.next=l:(l.next=d.next,d.next=l),c.pending=l}}i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),mp(i.return,n,t),a.lanes|=n;break}l=l.next}}else if(i.tag===10)s=i.type===t.type?null:i.child;else if(i.tag===18){if(s=i.return,s===null)throw Error(Q(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),mp(s,n,t),s=i.sibling}else s=i.child;if(s!==null)s.return=i;else for(s=i;s!==null;){if(s===t){s=null;break}if(i=s.sibling,i!==null){i.return=s.return,s=i;break}s=s.return}i=s}xt(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Pi(t,n),o=on(o),r=r(o),t.flags|=1,xt(e,t,r,n),t.child;case 14:return r=t.type,o=cn(r,t.pendingProps),o=cn(r.type,o),b0(e,t,r,o,n);case 15:return Tx(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:cn(r,o),sc(e,t),t.tag=1,jt(r)?(e=!0,Ac(t)):e=!1,Pi(t,n),Ex(t,r,o),vp(t,r,o,n),wp(null,t,r,!0,e,n);case 19:return Mx(e,t,n);case 22:return Px(e,t,n)}throw Error(Q(156,t.tag))};function Kx(e,t){return S1(e,t)}function A5(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function tn(e,t,n,r){return new A5(e,t,n,r)}function pm(e){return e=e.prototype,!(!e||!e.isReactComponent)}function M5(e){if(typeof e=="function")return pm(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ah)return 11;if(e===Mh)return 14}return 2}function Qr(e,t){var n=e.alternate;return n===null?(n=tn(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 cc(e,t,n,r,o,i){var s=2;if(r=e,typeof e=="function")pm(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case ui:return ko(n.children,o,i,t);case Rh:s=8,o|=8;break;case Vf:return e=tn(12,n,t,o|2),e.elementType=Vf,e.lanes=i,e;case Hf:return e=tn(13,n,t,o),e.elementType=Hf,e.lanes=i,e;case Bf:return e=tn(19,n,t,o),e.elementType=Bf,e.lanes=i,e;case i1:return Ou(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case r1:s=10;break e;case o1:s=9;break e;case Ah:s=11;break e;case Mh:s=14;break e;case jr:s=16,r=null;break e}throw Error(Q(130,e==null?e:typeof e,""))}return t=tn(s,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function ko(e,t,n,r){return e=tn(7,e,r,t),e.lanes=n,e}function Ou(e,t,n,r){return e=tn(22,e,r,t),e.elementType=i1,e.lanes=n,e.stateNode={isHidden:!1},e}function of(e,t,n){return e=tn(6,e,null,t),e.lanes=n,e}function sf(e,t,n){return t=tn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function j5(e,t,n,r,o){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=$d(0),this.expirationTimes=$d(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$d(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function hm(e,t,n,r,o,i,s,a,l){return e=new j5(e,t,n,a,l),t===1?(t=1,i===!0&&(t|=8)):t=0,i=tn(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},qh(i),e}function O5(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:ci,key:r==null?null:""+r,children:e,containerInfo:t,implementation:n}}function Xx(e){if(!e)return eo;e=e._reactInternals;e:{if(Zo(e)!==e||e.tag!==1)throw Error(Q(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(jt(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(Q(171))}if(e.tag===1){var n=e.type;if(jt(n))return X1(e,n,t)}return t}function qx(e,t,n,r,o,i,s,a,l){return e=hm(n,r,!0,e,o,i,s,a,l),e.context=Xx(null),n=e.current,r=_t(),o=qr(n),i=ar(r,o),i.callback=t??null,Kr(n,i,o),e.current.lanes=o,Qa(e,o,r),Ot(e,r),e}function Du(e,t,n,r){var o=t.current,i=_t(),s=qr(o);return n=Xx(n),t.context===null?t.context=n:t.pendingContext=n,t=ar(i,s),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=Kr(o,t,s),e!==null&&(yn(e,o,s,i),rc(e,o,s)),s}function Wc(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function O0(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function mm(e,t){O0(e,t),(e=e.alternate)&&O0(e,t)}function D5(){return null}var Qx=typeof reportError=="function"?reportError:function(e){console.error(e)};function gm(e){this._internalRoot=e}Lu.prototype.render=gm.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(Q(409));Du(e,t,null,null)};Lu.prototype.unmount=gm.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Do(function(){Du(null,e,null,null)}),t[pr]=null}};function Lu(e){this._internalRoot=e}Lu.prototype.unstable_scheduleHydration=function(e){if(e){var t=P1();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Lr.length&&t!==0&&t<Lr[n].priority;n++);Lr.splice(n,0,e),n===0&&R1(e)}};function vm(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function zu(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function D0(){}function L5(e,t,n,r,o){if(o){if(typeof r=="function"){var i=r;r=function(){var c=Wc(s);i.call(c)}}var s=qx(t,r,e,0,null,!1,!1,"",D0);return e._reactRootContainer=s,e[pr]=s.current,pa(e.nodeType===8?e.parentNode:e),Do(),s}for(;o=e.lastChild;)e.removeChild(o);if(typeof r=="function"){var a=r;r=function(){var c=Wc(l);a.call(c)}}var l=hm(e,0,!1,null,null,!1,!1,"",D0);return e._reactRootContainer=l,e[pr]=l.current,pa(e.nodeType===8?e.parentNode:e),Do(function(){Du(t,l,n,r)}),l}function $u(e,t,n,r,o){var i=n._reactRootContainer;if(i){var s=i;if(typeof o=="function"){var a=o;o=function(){var l=Wc(s);a.call(l)}}Du(t,s,e,o)}else s=L5(n,t,e,o,r);return Wc(s)}N1=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Ds(t.pendingLanes);n!==0&&(Dh(t,n|1),Ot(t,Ke()),!(Te&6)&&(Gi=Ke()+500,fo()))}break;case 13:Do(function(){var r=hr(e,1);if(r!==null){var o=_t();yn(r,e,1,o)}}),mm(e,1)}};Lh=function(e){if(e.tag===13){var t=hr(e,134217728);if(t!==null){var n=_t();yn(t,e,134217728,n)}mm(e,134217728)}};T1=function(e){if(e.tag===13){var t=qr(e),n=hr(e,t);if(n!==null){var r=_t();yn(n,e,t,r)}mm(e,t)}};P1=function(){return Re};I1=function(e,t){var n=Re;try{return Re=e,t()}finally{Re=n}};Jf=function(e,t,n){switch(t){case"input":if(Zf(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Pu(r);if(!o)throw Error(Q(90));a1(r),Zf(r,o)}}}break;case"textarea":c1(e,n);break;case"select":t=n.value,t!=null&&Ei(e,!!n.multiple,t,!1)}};g1=um;v1=Do;var z5={usingClientEntryPoint:!1,Events:[el,hi,Pu,h1,m1,um]},ks={findFiberByHostInstance:xo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},$5={bundleType:ks.bundleType,version:ks.version,rendererPackageName:ks.rendererPackageName,rendererConfig:ks.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:br.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=w1(e),e===null?null:e.stateNode},findFiberByHostInstance:ks.findFiberByHostInstance||D5,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var jl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!jl.isDisabled&&jl.supportsFiber)try{Eu=jl.inject($5),jn=jl}catch{}}Xt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=z5;Xt.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!vm(t))throw Error(Q(200));return O5(e,t,null,n)};Xt.createRoot=function(e,t){if(!vm(e))throw Error(Q(299));var n=!1,r="",o=Qx;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(o=t.onRecoverableError)),t=hm(e,1,!1,null,null,n,!1,r,o),e[pr]=t.current,pa(e.nodeType===8?e.parentNode:e),new gm(t)};Xt.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(Q(188)):(e=Object.keys(e).join(","),Error(Q(268,e)));return e=w1(t),e=e===null?null:e.stateNode,e};Xt.flushSync=function(e){return Do(e)};Xt.hydrate=function(e,t,n){if(!zu(t))throw Error(Q(200));return $u(null,e,t,!0,n)};Xt.hydrateRoot=function(e,t,n){if(!vm(e))throw Error(Q(405));var r=n!=null&&n.hydratedSources||null,o=!1,i="",s=Qx;if(n!=null&&(n.unstable_strictMode===!0&&(o=!0),n.identifierPrefix!==void 0&&(i=n.identifierPrefix),n.onRecoverableError!==void 0&&(s=n.onRecoverableError)),t=qx(t,null,e,1,n??null,o,!1,i,s),e[pr]=t.current,pa(e),r)for(e=0;e<r.length;e++)n=r[e],o=n._getVersion,o=o(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Lu(t)};Xt.render=function(e,t,n){if(!zu(t))throw Error(Q(200));return $u(null,e,t,!1,n)};Xt.unmountComponentAtNode=function(e){if(!zu(e))throw Error(Q(40));return e._reactRootContainer?(Do(function(){$u(null,null,e,!1,function(){e._reactRootContainer=null,e[pr]=null})}),!0):!1};Xt.unstable_batchedUpdates=um;Xt.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!zu(n))throw Error(Q(200));if(e==null||e._reactInternals===void 0)throw Error(Q(38));return $u(e,t,n,!1,r)};Xt.version="18.3.1-next-f1338f8080-20240426";function Jx(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Jx)}catch(e){console.error(e)}}Jx(),Jy.exports=Xt;var Go=Jy.exports;const F5=Sh(Go);var ew,L0=Go;ew=L0.createRoot,L0.hydrateRoot;function Je(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n<e.length;n++)(r=Je(e[n]))!==""&&(t+=(t&&" ")+r);else for(let n in e)e[n]&&(t+=(t&&" ")+n);return t}var V5={value:()=>{}};function Fu(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+"")||r in n||/[\s.]/.test(r))throw new Error("illegal type: "+r);n[r]=[]}return new uc(n)}function uc(e){this._=e}function H5(e,t){return e.trim().split(/^|\s+/).map(function(n){var r="",o=n.indexOf(".");if(o>=0&&(r=n.slice(o+1),n=n.slice(0,o)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}uc.prototype=Fu.prototype={constructor:uc,on:function(e,t){var n=this._,r=H5(e+"",n),o,i=-1,s=r.length;if(arguments.length<2){for(;++i<s;)if((o=(e=r[i]).type)&&(o=B5(n[o],e.name)))return o;return}if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++i<s;)if(o=(e=r[i]).type)n[o]=z0(n[o],e.name,t);else if(t==null)for(o in n)n[o]=z0(n[o],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new uc(e)},call:function(e,t){if((o=arguments.length-2)>0)for(var n=new Array(o),r=0,o,i;r<o;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(i=this._[e],r=0,o=i.length;r<o;++r)i[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var r=this._[e],o=0,i=r.length;o<i;++o)r[o].value.apply(t,n)}};function B5(e,t){for(var n=0,r=e.length,o;n<r;++n)if((o=e[n]).name===t)return o.value}function z0(e,t,n){for(var r=0,o=e.length;r<o;++r)if(e[r].name===t){e[r]=V5,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var Ap="http://www.w3.org/1999/xhtml";const $0={svg:"http://www.w3.org/2000/svg",xhtml:Ap,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Vu(e){var t=e+="",n=t.indexOf(":");return n>=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),$0.hasOwnProperty(t)?{space:$0[t],local:e}:e}function U5(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Ap&&t.documentElement.namespaceURI===Ap?t.createElement(e):t.createElementNS(n,e)}}function W5(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function tw(e){var t=Vu(e);return(t.local?W5:U5)(t)}function Z5(){}function ym(e){return e==null?Z5:function(){return this.querySelector(e)}}function G5(e){typeof e!="function"&&(e=ym(e));for(var t=this._groups,n=t.length,r=new Array(n),o=0;o<n;++o)for(var i=t[o],s=i.length,a=r[o]=new Array(s),l,c,d=0;d<s;++d)(l=i[d])&&(c=e.call(l,l.__data__,d,i))&&("__data__"in l&&(c.__data__=l.__data__),a[d]=c);return new Kt(r,this._parents)}function Y5(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function K5(){return[]}function nw(e){return e==null?K5:function(){return this.querySelectorAll(e)}}function X5(e){return function(){return Y5(e.apply(this,arguments))}}function q5(e){typeof e=="function"?e=X5(e):e=nw(e);for(var t=this._groups,n=t.length,r=[],o=[],i=0;i<n;++i)for(var s=t[i],a=s.length,l,c=0;c<a;++c)(l=s[c])&&(r.push(e.call(l,l.__data__,c,s)),o.push(l));return new Kt(r,o)}function rw(e){return function(){return this.matches(e)}}function ow(e){return function(t){return t.matches(e)}}var Q5=Array.prototype.find;function J5(e){return function(){return Q5.call(this.children,e)}}function e4(){return this.firstElementChild}function t4(e){return this.select(e==null?e4:J5(typeof e=="function"?e:ow(e)))}var n4=Array.prototype.filter;function r4(){return Array.from(this.children)}function o4(e){return function(){return n4.call(this.children,e)}}function i4(e){return this.selectAll(e==null?r4:o4(typeof e=="function"?e:ow(e)))}function s4(e){typeof e!="function"&&(e=rw(e));for(var t=this._groups,n=t.length,r=new Array(n),o=0;o<n;++o)for(var i=t[o],s=i.length,a=r[o]=[],l,c=0;c<s;++c)(l=i[c])&&e.call(l,l.__data__,c,i)&&a.push(l);return new Kt(r,this._parents)}function iw(e){return new Array(e.length)}function a4(){return new Kt(this._enter||this._groups.map(iw),this._parents)}function Zc(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Zc.prototype={constructor:Zc,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function l4(e){return function(){return e}}function c4(e,t,n,r,o,i){for(var s=0,a,l=t.length,c=i.length;s<c;++s)(a=t[s])?(a.__data__=i[s],r[s]=a):n[s]=new Zc(e,i[s]);for(;s<l;++s)(a=t[s])&&(o[s]=a)}function u4(e,t,n,r,o,i,s){var a,l,c=new Map,d=t.length,u=i.length,f=new Array(d),p;for(a=0;a<d;++a)(l=t[a])&&(f[a]=p=s.call(l,l.__data__,a,t)+"",c.has(p)?o[a]=l:c.set(p,l));for(a=0;a<u;++a)p=s.call(e,i[a],a,i)+"",(l=c.get(p))?(r[a]=l,l.__data__=i[a],c.delete(p)):n[a]=new Zc(e,i[a]);for(a=0;a<d;++a)(l=t[a])&&c.get(f[a])===l&&(o[a]=l)}function d4(e){return e.__data__}function f4(e,t){if(!arguments.length)return Array.from(this,d4);var n=t?u4:c4,r=this._parents,o=this._groups;typeof e!="function"&&(e=l4(e));for(var i=o.length,s=new Array(i),a=new Array(i),l=new Array(i),c=0;c<i;++c){var d=r[c],u=o[c],f=u.length,p=p4(e.call(d,d&&d.__data__,c,r)),y=p.length,v=a[c]=new Array(y),_=s[c]=new Array(y),m=l[c]=new Array(f);n(d,u,v,_,m,p,t);for(var g=0,w=0,S,C;g<y;++g)if(S=v[g]){for(g>=w&&(w=g+1);!(C=_[w])&&++w<y;);S._next=C||null}}return s=new Kt(s,r),s._enter=a,s._exit=l,s}function p4(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function h4(){return new Kt(this._exit||this._groups.map(iw),this._parents)}function m4(e,t,n){var r=this.enter(),o=this,i=this.exit();return typeof e=="function"?(r=e(r),r&&(r=r.selection())):r=r.append(e+""),t!=null&&(o=t(o),o&&(o=o.selection())),n==null?i.remove():n(i),r&&o?r.merge(o).order():o}function g4(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,o=n.length,i=r.length,s=Math.min(o,i),a=new Array(o),l=0;l<s;++l)for(var c=n[l],d=r[l],u=c.length,f=a[l]=new Array(u),p,y=0;y<u;++y)(p=c[y]||d[y])&&(f[y]=p);for(;l<o;++l)a[l]=n[l];return new Kt(a,this._parents)}function v4(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],o=r.length-1,i=r[o],s;--o>=0;)(s=r[o])&&(i&&s.compareDocumentPosition(i)^4&&i.parentNode.insertBefore(s,i),i=s);return this}function y4(e){e||(e=x4);function t(u,f){return u&&f?e(u.__data__,f.__data__):!u-!f}for(var n=this._groups,r=n.length,o=new Array(r),i=0;i<r;++i){for(var s=n[i],a=s.length,l=o[i]=new Array(a),c,d=0;d<a;++d)(c=s[d])&&(l[d]=c);l.sort(t)}return new Kt(o,this._parents).order()}function x4(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function w4(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function _4(){return Array.from(this)}function S4(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],o=0,i=r.length;o<i;++o){var s=r[o];if(s)return s}return null}function b4(){let e=0;for(const t of this)++e;return e}function C4(){return!this.node()}function E4(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var o=t[n],i=0,s=o.length,a;i<s;++i)(a=o[i])&&e.call(a,a.__data__,i,o);return this}function k4(e){return function(){this.removeAttribute(e)}}function N4(e){return function(){this.removeAttributeNS(e.space,e.local)}}function T4(e,t){return function(){this.setAttribute(e,t)}}function P4(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function I4(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function R4(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function A4(e,t){var n=Vu(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?N4:k4:typeof t=="function"?n.local?R4:I4:n.local?P4:T4)(n,t))}function sw(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function M4(e){return function(){this.style.removeProperty(e)}}function j4(e,t,n){return function(){this.style.setProperty(e,t,n)}}function O4(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function D4(e,t,n){return arguments.length>1?this.each((t==null?M4:typeof t=="function"?O4:j4)(e,t,n??"")):Yi(this.node(),e)}function Yi(e,t){return e.style.getPropertyValue(t)||sw(e).getComputedStyle(e,null).getPropertyValue(t)}function L4(e){return function(){delete this[e]}}function z4(e,t){return function(){this[e]=t}}function $4(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function F4(e,t){return arguments.length>1?this.each((t==null?L4:typeof t=="function"?$4:z4)(e,t)):this.node()[e]}function aw(e){return e.trim().split(/^|\s+/)}function xm(e){return e.classList||new lw(e)}function lw(e){this._node=e,this._names=aw(e.getAttribute("class")||"")}lw.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function cw(e,t){for(var n=xm(e),r=-1,o=t.length;++r<o;)n.add(t[r])}function uw(e,t){for(var n=xm(e),r=-1,o=t.length;++r<o;)n.remove(t[r])}function V4(e){return function(){cw(this,e)}}function H4(e){return function(){uw(this,e)}}function B4(e,t){return function(){(t.apply(this,arguments)?cw:uw)(this,e)}}function U4(e,t){var n=aw(e+"");if(arguments.length<2){for(var r=xm(this.node()),o=-1,i=n.length;++o<i;)if(!r.contains(n[o]))return!1;return!0}return this.each((typeof t=="function"?B4:t?V4:H4)(n,t))}function W4(){this.textContent=""}function Z4(e){return function(){this.textContent=e}}function G4(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function Y4(e){return arguments.length?this.each(e==null?W4:(typeof e=="function"?G4:Z4)(e)):this.node().textContent}function K4(){this.innerHTML=""}function X4(e){return function(){this.innerHTML=e}}function q4(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function Q4(e){return arguments.length?this.each(e==null?K4:(typeof e=="function"?q4:X4)(e)):this.node().innerHTML}function J4(){this.nextSibling&&this.parentNode.appendChild(this)}function eN(){return this.each(J4)}function tN(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function nN(){return this.each(tN)}function rN(e){var t=typeof e=="function"?e:tw(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function oN(){return null}function iN(e,t){var n=typeof e=="function"?e:tw(e),r=t==null?oN:typeof t=="function"?t:ym(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function sN(){var e=this.parentNode;e&&e.removeChild(this)}function aN(){return this.each(sN)}function lN(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function cN(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function uN(e){return this.select(e?cN:lN)}function dN(e){return arguments.length?this.property("__data__",e):this.node().__data__}function fN(e){return function(t){e.call(this,t,this.__data__)}}function pN(e){return e.trim().split(/^|\s+/).map(function(t){var n="",r=t.indexOf(".");return r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function hN(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,o=t.length,i;n<o;++n)i=t[n],(!e.type||i.type===e.type)&&i.name===e.name?this.removeEventListener(i.type,i.listener,i.options):t[++r]=i;++r?t.length=r:delete this.__on}}}function mN(e,t,n){return function(){var r=this.__on,o,i=fN(t);if(r){for(var s=0,a=r.length;s<a;++s)if((o=r[s]).type===e.type&&o.name===e.name){this.removeEventListener(o.type,o.listener,o.options),this.addEventListener(o.type,o.listener=i,o.options=n),o.value=t;return}}this.addEventListener(e.type,i,n),o={type:e.type,name:e.name,value:t,listener:i,options:n},r?r.push(o):this.__on=[o]}}function gN(e,t,n){var r=pN(e+""),o,i=r.length,s;if(arguments.length<2){var a=this.node().__on;if(a){for(var l=0,c=a.length,d;l<c;++l)for(o=0,d=a[l];o<i;++o)if((s=r[o]).type===d.type&&s.name===d.name)return d.value}return}for(a=t?mN:hN,o=0;o<i;++o)this.each(a(r[o],t,n));return this}function dw(e,t,n){var r=sw(e),o=r.CustomEvent;typeof o=="function"?o=new o(t,n):(o=r.document.createEvent("Event"),n?(o.initEvent(t,n.bubbles,n.cancelable),o.detail=n.detail):o.initEvent(t,!1,!1)),e.dispatchEvent(o)}function vN(e,t){return function(){return dw(this,e,t)}}function yN(e,t){return function(){return dw(this,e,t.apply(this,arguments))}}function xN(e,t){return this.each((typeof t=="function"?yN:vN)(e,t))}function*wN(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],o=0,i=r.length,s;o<i;++o)(s=r[o])&&(yield s)}var fw=[null];function Kt(e,t){this._groups=e,this._parents=t}function nl(){return new Kt([[document.documentElement]],fw)}function _N(){return this}Kt.prototype=nl.prototype={constructor:Kt,select:G5,selectAll:q5,selectChild:t4,selectChildren:i4,filter:s4,data:f4,enter:a4,exit:h4,join:m4,merge:g4,selection:_N,order:v4,sort:y4,call:w4,nodes:_4,node:S4,size:b4,empty:C4,each:E4,attr:A4,style:D4,property:F4,classed:U4,text:Y4,html:Q4,raise:eN,lower:nN,append:rN,insert:iN,remove:aN,clone:uN,datum:dN,on:gN,dispatch:xN,[Symbol.iterator]:wN};function Ht(e){return typeof e=="string"?new Kt([[document.querySelector(e)]],[document.documentElement]):new Kt([[e]],fw)}function SN(e){let t;for(;t=e.sourceEvent;)e=t;return e}function dn(e,t){if(e=SN(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var o=t.getBoundingClientRect();return[e.clientX-o.left-t.clientLeft,e.clientY-o.top-t.clientTop]}}return[e.pageX,e.pageY]}const bN={passive:!1},Sa={capture:!0,passive:!1};function af(e){e.stopImmediatePropagation()}function Ri(e){e.preventDefault(),e.stopImmediatePropagation()}function pw(e){var t=e.document.documentElement,n=Ht(e).on("dragstart.drag",Ri,Sa);"onselectstart"in t?n.on("selectstart.drag",Ri,Sa):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")}function hw(e,t){var n=e.document.documentElement,r=Ht(e).on("dragstart.drag",null);t&&(r.on("click.drag",Ri,Sa),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}const Ol=e=>()=>e;function Mp(e,{sourceEvent:t,subject:n,target:r,identifier:o,active:i,x:s,y:a,dx:l,dy:c,dispatch:d}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:i,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:c,enumerable:!0,configurable:!0},_:{value:d}})}Mp.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function CN(e){return!e.ctrlKey&&!e.button}function EN(){return this.parentNode}function kN(e,t){return t??{x:e.x,y:e.y}}function NN(){return navigator.maxTouchPoints||"ontouchstart"in this}function mw(){var e=CN,t=EN,n=kN,r=NN,o={},i=Fu("start","drag","end"),s=0,a,l,c,d,u=0;function f(S){S.on("mousedown.drag",p).filter(r).on("touchstart.drag",_).on("touchmove.drag",m,bN).on("touchend.drag touchcancel.drag",g).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(S,C){if(!(d||!e.call(this,S,C))){var N=w(this,t.call(this,S,C),S,C,"mouse");N&&(Ht(S.view).on("mousemove.drag",y,Sa).on("mouseup.drag",v,Sa),pw(S.view),af(S),c=!1,a=S.clientX,l=S.clientY,N("start",S))}}function y(S){if(Ri(S),!c){var C=S.clientX-a,N=S.clientY-l;c=C*C+N*N>u}o.mouse("drag",S)}function v(S){Ht(S.view).on("mousemove.drag mouseup.drag",null),hw(S.view,c),Ri(S),o.mouse("end",S)}function _(S,C){if(e.call(this,S,C)){var N=S.changedTouches,E=t.call(this,S,C),P=N.length,O,j;for(O=0;O<P;++O)(j=w(this,E,S,C,N[O].identifier,N[O]))&&(af(S),j("start",S,N[O]))}}function m(S){var C=S.changedTouches,N=C.length,E,P;for(E=0;E<N;++E)(P=o[C[E].identifier])&&(Ri(S),P("drag",S,C[E]))}function g(S){var C=S.changedTouches,N=C.length,E,P;for(d&&clearTimeout(d),d=setTimeout(function(){d=null},500),E=0;E<N;++E)(P=o[C[E].identifier])&&(af(S),P("end",S,C[E]))}function w(S,C,N,E,P,O){var j=i.copy(),$=dn(O||N,C),A,L,b;if((b=n.call(S,new Mp("beforestart",{sourceEvent:N,target:f,identifier:P,active:s,x:$[0],y:$[1],dx:0,dy:0,dispatch:j}),E))!=null)return A=b.x-$[0]||0,L=b.y-$[1]||0,function M(T,D,k){var I=$,z;switch(T){case"start":o[P]=M,z=s++;break;case"end":delete o[P],--s;case"drag":$=dn(k||D,C),z=s;break}j.call(T,S,new Mp(T,{sourceEvent:D,subject:b,target:f,identifier:P,active:z,x:$[0]+A,y:$[1]+L,dx:$[0]-I[0],dy:$[1]-I[1],dispatch:j}),E)}}return f.filter=function(S){return arguments.length?(e=typeof S=="function"?S:Ol(!!S),f):e},f.container=function(S){return arguments.length?(t=typeof S=="function"?S:Ol(S),f):t},f.subject=function(S){return arguments.length?(n=typeof S=="function"?S:Ol(S),f):n},f.touchable=function(S){return arguments.length?(r=typeof S=="function"?S:Ol(!!S),f):r},f.on=function(){var S=i.on.apply(i,arguments);return S===i?f:S},f.clickDistance=function(S){return arguments.length?(u=(S=+S)*S,f):Math.sqrt(u)},f}function wm(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function gw(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function rl(){}var ba=.7,Gc=1/ba,Ai="\\s*([+-]?\\d+)\\s*",Ca="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Dn="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",TN=/^#([0-9a-f]{3,8})$/,PN=new RegExp(`^rgb\\(${Ai},${Ai},${Ai}\\)$`),IN=new RegExp(`^rgb\\(${Dn},${Dn},${Dn}\\)$`),RN=new RegExp(`^rgba\\(${Ai},${Ai},${Ai},${Ca}\\)$`),AN=new RegExp(`^rgba\\(${Dn},${Dn},${Dn},${Ca}\\)$`),MN=new RegExp(`^hsl\\(${Ca},${Dn},${Dn}\\)$`),jN=new RegExp(`^hsla\\(${Ca},${Dn},${Dn},${Ca}\\)$`),F0={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};wm(rl,Ea,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:V0,formatHex:V0,formatHex8:ON,formatHsl:DN,formatRgb:H0,toString:H0});function V0(){return this.rgb().formatHex()}function ON(){return this.rgb().formatHex8()}function DN(){return vw(this).formatHsl()}function H0(){return this.rgb().formatRgb()}function Ea(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=TN.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?B0(t):n===3?new At(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Dl(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Dl(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=PN.exec(e))?new At(t[1],t[2],t[3],1):(t=IN.exec(e))?new At(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=RN.exec(e))?Dl(t[1],t[2],t[3],t[4]):(t=AN.exec(e))?Dl(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=MN.exec(e))?Z0(t[1],t[2]/100,t[3]/100,1):(t=jN.exec(e))?Z0(t[1],t[2]/100,t[3]/100,t[4]):F0.hasOwnProperty(e)?B0(F0[e]):e==="transparent"?new At(NaN,NaN,NaN,0):null}function B0(e){return new At(e>>16&255,e>>8&255,e&255,1)}function Dl(e,t,n,r){return r<=0&&(e=t=n=NaN),new At(e,t,n,r)}function LN(e){return e instanceof rl||(e=Ea(e)),e?(e=e.rgb(),new At(e.r,e.g,e.b,e.opacity)):new At}function jp(e,t,n,r){return arguments.length===1?LN(e):new At(e,t,n,r??1)}function At(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}wm(At,jp,gw(rl,{brighter(e){return e=e==null?Gc:Math.pow(Gc,e),new At(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?ba:Math.pow(ba,e),new At(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new At(No(this.r),No(this.g),No(this.b),Yc(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:U0,formatHex:U0,formatHex8:zN,formatRgb:W0,toString:W0}));function U0(){return`#${So(this.r)}${So(this.g)}${So(this.b)}`}function zN(){return`#${So(this.r)}${So(this.g)}${So(this.b)}${So((isNaN(this.opacity)?1:this.opacity)*255)}`}function W0(){const e=Yc(this.opacity);return`${e===1?"rgb(":"rgba("}${No(this.r)}, ${No(this.g)}, ${No(this.b)}${e===1?")":`, ${e})`}`}function Yc(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function No(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function So(e){return e=No(e),(e<16?"0":"")+e.toString(16)}function Z0(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new pn(e,t,n,r)}function vw(e){if(e instanceof pn)return new pn(e.h,e.s,e.l,e.opacity);if(e instanceof rl||(e=Ea(e)),!e)return new pn;if(e instanceof pn)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,o=Math.min(t,n,r),i=Math.max(t,n,r),s=NaN,a=i-o,l=(i+o)/2;return a?(t===i?s=(n-r)/a+(n<r)*6:n===i?s=(r-t)/a+2:s=(t-n)/a+4,a/=l<.5?i+o:2-i-o,s*=60):a=l>0&&l<1?0:s,new pn(s,a,l,e.opacity)}function $N(e,t,n,r){return arguments.length===1?vw(e):new pn(e,t,n,r??1)}function pn(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}wm(pn,$N,gw(rl,{brighter(e){return e=e==null?Gc:Math.pow(Gc,e),new pn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?ba:Math.pow(ba,e),new pn(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,o=2*n-r;return new At(lf(e>=240?e-240:e+120,o,r),lf(e,o,r),lf(e<120?e+240:e-120,o,r),this.opacity)},clamp(){return new pn(G0(this.h),Ll(this.s),Ll(this.l),Yc(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Yc(this.opacity);return`${e===1?"hsl(":"hsla("}${G0(this.h)}, ${Ll(this.s)*100}%, ${Ll(this.l)*100}%${e===1?")":`, ${e})`}`}}));function G0(e){return e=(e||0)%360,e<0?e+360:e}function Ll(e){return Math.max(0,Math.min(1,e||0))}function lf(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const yw=e=>()=>e;function FN(e,t){return function(n){return e+n*t}}function VN(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function HN(e){return(e=+e)==1?xw:function(t,n){return n-t?VN(t,n,e):yw(isNaN(t)?n:t)}}function xw(e,t){var n=t-e;return n?FN(e,n):yw(isNaN(e)?t:e)}const Y0=function e(t){var n=HN(t);function r(o,i){var s=n((o=jp(o)).r,(i=jp(i)).r),a=n(o.g,i.g),l=n(o.b,i.b),c=xw(o.opacity,i.opacity);return function(d){return o.r=s(d),o.g=a(d),o.b=l(d),o.opacity=c(d),o+""}}return r.gamma=e,r}(1);function Dr(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var Op=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,cf=new RegExp(Op.source,"g");function BN(e){return function(){return e}}function UN(e){return function(t){return e(t)+""}}function WN(e,t){var n=Op.lastIndex=cf.lastIndex=0,r,o,i,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=Op.exec(e))&&(o=cf.exec(t));)(i=o.index)>n&&(i=t.slice(n,i),a[s]?a[s]+=i:a[++s]=i),(r=r[0])===(o=o[0])?a[s]?a[s]+=o:a[++s]=o:(a[++s]=null,l.push({i:s,x:Dr(r,o)})),n=cf.lastIndex;return n<t.length&&(i=t.slice(n),a[s]?a[s]+=i:a[++s]=i),a.length<2?l[0]?UN(l[0].x):BN(t):(t=l.length,function(c){for(var d=0,u;d<t;++d)a[(u=l[d]).i]=u.x(c);return a.join("")})}var K0=180/Math.PI,Dp={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function ww(e,t,n,r,o,i){var s,a,l;return(s=Math.sqrt(e*e+t*t))&&(e/=s,t/=s),(l=e*n+t*r)&&(n-=e*l,r-=t*l),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,l/=a),e*r<t*n&&(e=-e,t=-t,l=-l,s=-s),{translateX:o,translateY:i,rotate:Math.atan2(t,e)*K0,skewX:Math.atan(l)*K0,scaleX:s,scaleY:a}}var zl;function ZN(e){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?Dp:ww(t.a,t.b,t.c,t.d,t.e,t.f)}function GN(e){return e==null||(zl||(zl=document.createElementNS("http://www.w3.org/2000/svg","g")),zl.setAttribute("transform",e),!(e=zl.transform.baseVal.consolidate()))?Dp:(e=e.matrix,ww(e.a,e.b,e.c,e.d,e.e,e.f))}function _w(e,t,n,r){function o(c){return c.length?c.pop()+" ":""}function i(c,d,u,f,p,y){if(c!==u||d!==f){var v=p.push("translate(",null,t,null,n);y.push({i:v-4,x:Dr(c,u)},{i:v-2,x:Dr(d,f)})}else(u||f)&&p.push("translate("+u+t+f+n)}function s(c,d,u,f){c!==d?(c-d>180?d+=360:d-c>180&&(c+=360),f.push({i:u.push(o(u)+"rotate(",null,r)-2,x:Dr(c,d)})):d&&u.push(o(u)+"rotate("+d+r)}function a(c,d,u,f){c!==d?f.push({i:u.push(o(u)+"skewX(",null,r)-2,x:Dr(c,d)}):d&&u.push(o(u)+"skewX("+d+r)}function l(c,d,u,f,p,y){if(c!==u||d!==f){var v=p.push(o(p)+"scale(",null,",",null,")");y.push({i:v-4,x:Dr(c,u)},{i:v-2,x:Dr(d,f)})}else(u!==1||f!==1)&&p.push(o(p)+"scale("+u+","+f+")")}return function(c,d){var u=[],f=[];return c=e(c),d=e(d),i(c.translateX,c.translateY,d.translateX,d.translateY,u,f),s(c.rotate,d.rotate,u,f),a(c.skewX,d.skewX,u,f),l(c.scaleX,c.scaleY,d.scaleX,d.scaleY,u,f),c=d=null,function(p){for(var y=-1,v=f.length,_;++y<v;)u[(_=f[y]).i]=_.x(p);return u.join("")}}}var YN=_w(ZN,"px, ","px)","deg)"),KN=_w(GN,", ",")",")"),XN=1e-12;function X0(e){return((e=Math.exp(e))+1/e)/2}function qN(e){return((e=Math.exp(e))-1/e)/2}function QN(e){return((e=Math.exp(2*e))-1)/(e+1)}const JN=function e(t,n,r){function o(i,s){var a=i[0],l=i[1],c=i[2],d=s[0],u=s[1],f=s[2],p=d-a,y=u-l,v=p*p+y*y,_,m;if(v<XN)m=Math.log(f/c)/t,_=function(E){return[a+E*p,l+E*y,c*Math.exp(t*E*m)]};else{var g=Math.sqrt(v),w=(f*f-c*c+r*v)/(2*c*n*g),S=(f*f-c*c-r*v)/(2*f*n*g),C=Math.log(Math.sqrt(w*w+1)-w),N=Math.log(Math.sqrt(S*S+1)-S);m=(N-C)/t,_=function(E){var P=E*m,O=X0(C),j=c/(n*g)*(O*QN(t*P+C)-qN(C));return[a+j*p,l+j*y,c*O/X0(t*P+C)]}}return _.duration=m*1e3*t/Math.SQRT2,_}return o.rho=function(i){var s=Math.max(.001,+i),a=s*s,l=a*a;return e(s,a,l)},o}(Math.SQRT2,2,4);var Ki=0,zs=0,Ns=0,Sw=1e3,Kc,$s,Xc=0,Lo=0,Hu=0,ka=typeof performance=="object"&&performance.now?performance:Date,bw=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function _m(){return Lo||(bw(eT),Lo=ka.now()+Hu)}function eT(){Lo=0}function qc(){this._call=this._time=this._next=null}qc.prototype=Cw.prototype={constructor:qc,restart:function(e,t,n){if(typeof e!="function")throw new TypeError("callback is not a function");n=(n==null?_m():+n)+(t==null?0:+t),!this._next&&$s!==this&&($s?$s._next=this:Kc=this,$s=this),this._call=e,this._time=n,Lp()},stop:function(){this._call&&(this._call=null,this._time=1/0,Lp())}};function Cw(e,t,n){var r=new qc;return r.restart(e,t,n),r}function tT(){_m(),++Ki;for(var e=Kc,t;e;)(t=Lo-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Ki}function q0(){Lo=(Xc=ka.now())+Hu,Ki=zs=0;try{tT()}finally{Ki=0,rT(),Lo=0}}function nT(){var e=ka.now(),t=e-Xc;t>Sw&&(Hu-=t,Xc=e)}function rT(){for(var e,t=Kc,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Kc=n);$s=e,Lp(r)}function Lp(e){if(!Ki){zs&&(zs=clearTimeout(zs));var t=e-Lo;t>24?(e<1/0&&(zs=setTimeout(q0,e-ka.now()-Hu)),Ns&&(Ns=clearInterval(Ns))):(Ns||(Xc=ka.now(),Ns=setInterval(nT,Sw)),Ki=1,bw(q0))}}function Q0(e,t,n){var r=new qc;return t=t==null?0:+t,r.restart(o=>{r.stop(),e(o+t)},t,n),r}var oT=Fu("start","end","cancel","interrupt"),iT=[],Ew=0,J0=1,zp=2,dc=3,ev=4,$p=5,fc=6;function Bu(e,t,n,r,o,i){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;sT(e,n,{name:t,index:r,group:o,on:oT,tween:iT,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:Ew})}function Sm(e,t){var n=Nn(e,t);if(n.state>Ew)throw new Error("too late; already scheduled");return n}function Zn(e,t){var n=Nn(e,t);if(n.state>dc)throw new Error("too late; already running");return n}function Nn(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function sT(e,t,n){var r=e.__transition,o;r[t]=n,n.timer=Cw(i,0,n.time);function i(c){n.state=J0,n.timer.restart(s,n.delay,n.time),n.delay<=c&&s(c-n.delay)}function s(c){var d,u,f,p;if(n.state!==J0)return l();for(d in r)if(p=r[d],p.name===n.name){if(p.state===dc)return Q0(s);p.state===ev?(p.state=fc,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete r[d]):+d<t&&(p.state=fc,p.timer.stop(),p.on.call("cancel",e,e.__data__,p.index,p.group),delete r[d])}if(Q0(function(){n.state===dc&&(n.state=ev,n.timer.restart(a,n.delay,n.time),a(c))}),n.state=zp,n.on.call("start",e,e.__data__,n.index,n.group),n.state===zp){for(n.state=dc,o=new Array(f=n.tween.length),d=0,u=-1;d<f;++d)(p=n.tween[d].value.call(e,e.__data__,n.index,n.group))&&(o[++u]=p);o.length=u+1}}function a(c){for(var d=c<n.duration?n.ease.call(null,c/n.duration):(n.timer.restart(l),n.state=$p,1),u=-1,f=o.length;++u<f;)o[u].call(e,d);n.state===$p&&(n.on.call("end",e,e.__data__,n.index,n.group),l())}function l(){n.state=fc,n.timer.stop(),delete r[t];for(var c in r)return;delete e.__transition}}function pc(e,t){var n=e.__transition,r,o,i=!0,s;if(n){t=t==null?null:t+"";for(s in n){if((r=n[s]).name!==t){i=!1;continue}o=r.state>zp&&r.state<$p,r.state=fc,r.timer.stop(),r.on.call(o?"interrupt":"cancel",e,e.__data__,r.index,r.group),delete n[s]}i&&delete e.__transition}}function aT(e){return this.each(function(){pc(this,e)})}function lT(e,t){var n,r;return function(){var o=Zn(this,e),i=o.tween;if(i!==n){r=n=i;for(var s=0,a=r.length;s<a;++s)if(r[s].name===t){r=r.slice(),r.splice(s,1);break}}o.tween=r}}function cT(e,t,n){var r,o;if(typeof n!="function")throw new Error;return function(){var i=Zn(this,e),s=i.tween;if(s!==r){o=(r=s).slice();for(var a={name:t,value:n},l=0,c=o.length;l<c;++l)if(o[l].name===t){o[l]=a;break}l===c&&o.push(a)}i.tween=o}}function uT(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r=Nn(this.node(),n).tween,o=0,i=r.length,s;o<i;++o)if((s=r[o]).name===e)return s.value;return null}return this.each((t==null?lT:cT)(n,e,t))}function bm(e,t,n){var r=e._id;return e.each(function(){var o=Zn(this,r);(o.value||(o.value={}))[t]=n.apply(this,arguments)}),function(o){return Nn(o,r).value[t]}}function kw(e,t){var n;return(typeof t=="number"?Dr:t instanceof Ea?Y0:(n=Ea(t))?(t=n,Y0):WN)(e,t)}function dT(e){return function(){this.removeAttribute(e)}}function fT(e){return function(){this.removeAttributeNS(e.space,e.local)}}function pT(e,t,n){var r,o=n+"",i;return function(){var s=this.getAttribute(e);return s===o?null:s===r?i:i=t(r=s,n)}}function hT(e,t,n){var r,o=n+"",i;return function(){var s=this.getAttributeNS(e.space,e.local);return s===o?null:s===r?i:i=t(r=s,n)}}function mT(e,t,n){var r,o,i;return function(){var s,a=n(this),l;return a==null?void this.removeAttribute(e):(s=this.getAttribute(e),l=a+"",s===l?null:s===r&&l===o?i:(o=l,i=t(r=s,a)))}}function gT(e,t,n){var r,o,i;return function(){var s,a=n(this),l;return a==null?void this.removeAttributeNS(e.space,e.local):(s=this.getAttributeNS(e.space,e.local),l=a+"",s===l?null:s===r&&l===o?i:(o=l,i=t(r=s,a)))}}function vT(e,t){var n=Vu(e),r=n==="transform"?KN:kw;return this.attrTween(e,typeof t=="function"?(n.local?gT:mT)(n,r,bm(this,"attr."+e,t)):t==null?(n.local?fT:dT)(n):(n.local?hT:pT)(n,r,t))}function yT(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function xT(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function wT(e,t){var n,r;function o(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&xT(e,i)),n}return o._value=t,o}function _T(e,t){var n,r;function o(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&yT(e,i)),n}return o._value=t,o}function ST(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!="function")throw new Error;var r=Vu(e);return this.tween(n,(r.local?wT:_T)(r,t))}function bT(e,t){return function(){Sm(this,e).delay=+t.apply(this,arguments)}}function CT(e,t){return t=+t,function(){Sm(this,e).delay=t}}function ET(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?bT:CT)(t,e)):Nn(this.node(),t).delay}function kT(e,t){return function(){Zn(this,e).duration=+t.apply(this,arguments)}}function NT(e,t){return t=+t,function(){Zn(this,e).duration=t}}function TT(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?kT:NT)(t,e)):Nn(this.node(),t).duration}function PT(e,t){if(typeof t!="function")throw new Error;return function(){Zn(this,e).ease=t}}function IT(e){var t=this._id;return arguments.length?this.each(PT(t,e)):Nn(this.node(),t).ease}function RT(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!="function")throw new Error;Zn(this,e).ease=n}}function AT(e){if(typeof e!="function")throw new Error;return this.each(RT(this._id,e))}function MT(e){typeof e!="function"&&(e=rw(e));for(var t=this._groups,n=t.length,r=new Array(n),o=0;o<n;++o)for(var i=t[o],s=i.length,a=r[o]=[],l,c=0;c<s;++c)(l=i[c])&&e.call(l,l.__data__,c,i)&&a.push(l);return new gr(r,this._parents,this._name,this._id)}function jT(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,r=t.length,o=n.length,i=Math.min(r,o),s=new Array(r),a=0;a<i;++a)for(var l=t[a],c=n[a],d=l.length,u=s[a]=new Array(d),f,p=0;p<d;++p)(f=l[p]||c[p])&&(u[p]=f);for(;a<r;++a)s[a]=t[a];return new gr(s,this._parents,this._name,this._id)}function OT(e){return(e+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||t==="start"})}function DT(e,t,n){var r,o,i=OT(t)?Sm:Zn;return function(){var s=i(this,e),a=s.on;a!==r&&(o=(r=a).copy()).on(t,n),s.on=o}}function LT(e,t){var n=this._id;return arguments.length<2?Nn(this.node(),n).on.on(e):this.each(DT(n,e,t))}function zT(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function $T(){return this.on("end.remove",zT(this._id))}function FT(e){var t=this._name,n=this._id;typeof e!="function"&&(e=ym(e));for(var r=this._groups,o=r.length,i=new Array(o),s=0;s<o;++s)for(var a=r[s],l=a.length,c=i[s]=new Array(l),d,u,f=0;f<l;++f)(d=a[f])&&(u=e.call(d,d.__data__,f,a))&&("__data__"in d&&(u.__data__=d.__data__),c[f]=u,Bu(c[f],t,n,f,c,Nn(d,n)));return new gr(i,this._parents,t,n)}function VT(e){var t=this._name,n=this._id;typeof e!="function"&&(e=nw(e));for(var r=this._groups,o=r.length,i=[],s=[],a=0;a<o;++a)for(var l=r[a],c=l.length,d,u=0;u<c;++u)if(d=l[u]){for(var f=e.call(d,d.__data__,u,l),p,y=Nn(d,n),v=0,_=f.length;v<_;++v)(p=f[v])&&Bu(p,t,n,v,f,y);i.push(f),s.push(d)}return new gr(i,s,t,n)}var HT=nl.prototype.constructor;function BT(){return new HT(this._groups,this._parents)}function UT(e,t){var n,r,o;return function(){var i=Yi(this,e),s=(this.style.removeProperty(e),Yi(this,e));return i===s?null:i===n&&s===r?o:o=t(n=i,r=s)}}function Nw(e){return function(){this.style.removeProperty(e)}}function WT(e,t,n){var r,o=n+"",i;return function(){var s=Yi(this,e);return s===o?null:s===r?i:i=t(r=s,n)}}function ZT(e,t,n){var r,o,i;return function(){var s=Yi(this,e),a=n(this),l=a+"";return a==null&&(l=a=(this.style.removeProperty(e),Yi(this,e))),s===l?null:s===r&&l===o?i:(o=l,i=t(r=s,a))}}function GT(e,t){var n,r,o,i="style."+t,s="end."+i,a;return function(){var l=Zn(this,e),c=l.on,d=l.value[i]==null?a||(a=Nw(t)):void 0;(c!==n||o!==d)&&(r=(n=c).copy()).on(s,o=d),l.on=r}}function YT(e,t,n){var r=(e+="")=="transform"?YN:kw;return t==null?this.styleTween(e,UT(e,r)).on("end.style."+e,Nw(e)):typeof t=="function"?this.styleTween(e,ZT(e,r,bm(this,"style."+e,t))).each(GT(this._id,e)):this.styleTween(e,WT(e,r,t),n).on("end.style."+e,null)}function KT(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function XT(e,t,n){var r,o;function i(){var s=t.apply(this,arguments);return s!==o&&(r=(o=s)&&KT(e,s,n)),r}return i._value=t,i}function qT(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!="function")throw new Error;return this.tween(r,XT(e,t,n??""))}function QT(e){return function(){this.textContent=e}}function JT(e){return function(){var t=e(this);this.textContent=t??""}}function eP(e){return this.tween("text",typeof e=="function"?JT(bm(this,"text",e)):QT(e==null?"":e+""))}function tP(e){return function(t){this.textContent=e.call(this,t)}}function nP(e){var t,n;function r(){var o=e.apply(this,arguments);return o!==n&&(t=(n=o)&&tP(o)),t}return r._value=e,r}function rP(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,nP(e))}function oP(){for(var e=this._name,t=this._id,n=Tw(),r=this._groups,o=r.length,i=0;i<o;++i)for(var s=r[i],a=s.length,l,c=0;c<a;++c)if(l=s[c]){var d=Nn(l,t);Bu(l,e,n,c,s,{time:d.time+d.delay+d.duration,delay:0,duration:d.duration,ease:d.ease})}return new gr(r,this._parents,e,n)}function iP(){var e,t,n=this,r=n._id,o=n.size();return new Promise(function(i,s){var a={value:s},l={value:function(){--o===0&&i()}};n.each(function(){var c=Zn(this,r),d=c.on;d!==e&&(t=(e=d).copy(),t._.cancel.push(a),t._.interrupt.push(a),t._.end.push(l)),c.on=t}),o===0&&i()})}var sP=0;function gr(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Tw(){return++sP}var Kn=nl.prototype;gr.prototype={constructor:gr,select:FT,selectAll:VT,selectChild:Kn.selectChild,selectChildren:Kn.selectChildren,filter:MT,merge:jT,selection:BT,transition:oP,call:Kn.call,nodes:Kn.nodes,node:Kn.node,size:Kn.size,empty:Kn.empty,each:Kn.each,on:LT,attr:vT,attrTween:ST,style:YT,styleTween:qT,text:eP,textTween:rP,remove:$T,tween:uT,delay:ET,duration:TT,ease:IT,easeVarying:AT,end:iP,[Symbol.iterator]:Kn[Symbol.iterator]};function aP(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var lP={time:null,delay:0,duration:250,ease:aP};function cP(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return n}function uP(e){var t,n;e instanceof gr?(t=e._id,e=e._name):(t=Tw(),(n=lP).time=_m(),e=e==null?null:e+"");for(var r=this._groups,o=r.length,i=0;i<o;++i)for(var s=r[i],a=s.length,l,c=0;c<a;++c)(l=s[c])&&Bu(l,e,t,c,s,n||cP(l,t));return new gr(r,this._parents,e,t)}nl.prototype.interrupt=aT;nl.prototype.transition=uP;const $l=e=>()=>e;function dP(e,{sourceEvent:t,target:n,transform:r,dispatch:o}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:o}})}function ir(e,t,n){this.k=e,this.x=t,this.y=n}ir.prototype={constructor:ir,scale:function(e){return e===1?this:new ir(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new ir(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Uu=new ir(1,0,0);Pw.prototype=ir.prototype;function Pw(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Uu;return e.__zoom}function uf(e){e.stopImmediatePropagation()}function Ts(e){e.preventDefault(),e.stopImmediatePropagation()}function fP(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function pP(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function tv(){return this.__zoom||Uu}function hP(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function mP(){return navigator.maxTouchPoints||"ontouchstart"in this}function gP(e,t,n){var r=e.invertX(t[0][0])-n[0][0],o=e.invertX(t[1][0])-n[1][0],i=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(o>r?(r+o)/2:Math.min(0,r)||Math.max(0,o),s>i?(i+s)/2:Math.min(0,i)||Math.max(0,s))}function Iw(){var e=fP,t=pP,n=gP,r=hP,o=mP,i=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=JN,c=Fu("start","zoom","end"),d,u,f,p=500,y=150,v=0,_=10;function m(b){b.property("__zoom",tv).on("wheel.zoom",P,{passive:!1}).on("mousedown.zoom",O).on("dblclick.zoom",j).filter(o).on("touchstart.zoom",$).on("touchmove.zoom",A).on("touchend.zoom touchcancel.zoom",L).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}m.transform=function(b,M,T,D){var k=b.selection?b.selection():b;k.property("__zoom",tv),b!==k?C(b,M,T,D):k.interrupt().each(function(){N(this,arguments).event(D).start().zoom(null,typeof M=="function"?M.apply(this,arguments):M).end()})},m.scaleBy=function(b,M,T,D){m.scaleTo(b,function(){var k=this.__zoom.k,I=typeof M=="function"?M.apply(this,arguments):M;return k*I},T,D)},m.scaleTo=function(b,M,T,D){m.transform(b,function(){var k=t.apply(this,arguments),I=this.__zoom,z=T==null?S(k):typeof T=="function"?T.apply(this,arguments):T,U=I.invert(z),Y=typeof M=="function"?M.apply(this,arguments):M;return n(w(g(I,Y),z,U),k,s)},T,D)},m.translateBy=function(b,M,T,D){m.transform(b,function(){return n(this.__zoom.translate(typeof M=="function"?M.apply(this,arguments):M,typeof T=="function"?T.apply(this,arguments):T),t.apply(this,arguments),s)},null,D)},m.translateTo=function(b,M,T,D,k){m.transform(b,function(){var I=t.apply(this,arguments),z=this.__zoom,U=D==null?S(I):typeof D=="function"?D.apply(this,arguments):D;return n(Uu.translate(U[0],U[1]).scale(z.k).translate(typeof M=="function"?-M.apply(this,arguments):-M,typeof T=="function"?-T.apply(this,arguments):-T),I,s)},D,k)};function g(b,M){return M=Math.max(i[0],Math.min(i[1],M)),M===b.k?b:new ir(M,b.x,b.y)}function w(b,M,T){var D=M[0]-T[0]*b.k,k=M[1]-T[1]*b.k;return D===b.x&&k===b.y?b:new ir(b.k,D,k)}function S(b){return[(+b[0][0]+ +b[1][0])/2,(+b[0][1]+ +b[1][1])/2]}function C(b,M,T,D){b.on("start.zoom",function(){N(this,arguments).event(D).start()}).on("interrupt.zoom end.zoom",function(){N(this,arguments).event(D).end()}).tween("zoom",function(){var k=this,I=arguments,z=N(k,I).event(D),U=t.apply(k,I),Y=T==null?S(U):typeof T=="function"?T.apply(k,I):T,H=Math.max(U[1][0]-U[0][0],U[1][1]-U[0][1]),Z=k.__zoom,K=typeof M=="function"?M.apply(k,I):M,G=l(Z.invert(Y).concat(H/Z.k),K.invert(Y).concat(H/K.k));return function(V){if(V===1)V=K;else{var B=G(V),ee=H/B[2];V=new ir(ee,Y[0]-B[0]*ee,Y[1]-B[1]*ee)}z.zoom(null,V)}})}function N(b,M,T){return!T&&b.__zooming||new E(b,M)}function E(b,M){this.that=b,this.args=M,this.active=0,this.sourceEvent=null,this.extent=t.apply(b,M),this.taps=0}E.prototype={event:function(b){return b&&(this.sourceEvent=b),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(b,M){return this.mouse&&b!=="mouse"&&(this.mouse[1]=M.invert(this.mouse[0])),this.touch0&&b!=="touch"&&(this.touch0[1]=M.invert(this.touch0[0])),this.touch1&&b!=="touch"&&(this.touch1[1]=M.invert(this.touch1[0])),this.that.__zoom=M,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(b){var M=Ht(this.that).datum();c.call(b,this.that,new dP(b,{sourceEvent:this.sourceEvent,target:m,type:b,transform:this.that.__zoom,dispatch:c}),M)}};function P(b,...M){if(!e.apply(this,arguments))return;var T=N(this,M).event(b),D=this.__zoom,k=Math.max(i[0],Math.min(i[1],D.k*Math.pow(2,r.apply(this,arguments)))),I=dn(b);if(T.wheel)(T.mouse[0][0]!==I[0]||T.mouse[0][1]!==I[1])&&(T.mouse[1]=D.invert(T.mouse[0]=I)),clearTimeout(T.wheel);else{if(D.k===k)return;T.mouse=[I,D.invert(I)],pc(this),T.start()}Ts(b),T.wheel=setTimeout(z,y),T.zoom("mouse",n(w(g(D,k),T.mouse[0],T.mouse[1]),T.extent,s));function z(){T.wheel=null,T.end()}}function O(b,...M){if(f||!e.apply(this,arguments))return;var T=b.currentTarget,D=N(this,M,!0).event(b),k=Ht(b.view).on("mousemove.zoom",Y,!0).on("mouseup.zoom",H,!0),I=dn(b,T),z=b.clientX,U=b.clientY;pw(b.view),uf(b),D.mouse=[I,this.__zoom.invert(I)],pc(this),D.start();function Y(Z){if(Ts(Z),!D.moved){var K=Z.clientX-z,G=Z.clientY-U;D.moved=K*K+G*G>v}D.event(Z).zoom("mouse",n(w(D.that.__zoom,D.mouse[0]=dn(Z,T),D.mouse[1]),D.extent,s))}function H(Z){k.on("mousemove.zoom mouseup.zoom",null),hw(Z.view,D.moved),Ts(Z),D.event(Z).end()}}function j(b,...M){if(e.apply(this,arguments)){var T=this.__zoom,D=dn(b.changedTouches?b.changedTouches[0]:b,this),k=T.invert(D),I=T.k*(b.shiftKey?.5:2),z=n(w(g(T,I),D,k),t.apply(this,M),s);Ts(b),a>0?Ht(this).transition().duration(a).call(C,z,D,b):Ht(this).call(m.transform,z,D,b)}}function $(b,...M){if(e.apply(this,arguments)){var T=b.touches,D=T.length,k=N(this,M,b.changedTouches.length===D).event(b),I,z,U,Y;for(uf(b),z=0;z<D;++z)U=T[z],Y=dn(U,this),Y=[Y,this.__zoom.invert(Y),U.identifier],k.touch0?!k.touch1&&k.touch0[2]!==Y[2]&&(k.touch1=Y,k.taps=0):(k.touch0=Y,I=!0,k.taps=1+!!d);d&&(d=clearTimeout(d)),I&&(k.taps<2&&(u=Y[0],d=setTimeout(function(){d=null},p)),pc(this),k.start())}}function A(b,...M){if(this.__zooming){var T=N(this,M).event(b),D=b.changedTouches,k=D.length,I,z,U,Y;for(Ts(b),I=0;I<k;++I)z=D[I],U=dn(z,this),T.touch0&&T.touch0[2]===z.identifier?T.touch0[0]=U:T.touch1&&T.touch1[2]===z.identifier&&(T.touch1[0]=U);if(z=T.that.__zoom,T.touch1){var H=T.touch0[0],Z=T.touch0[1],K=T.touch1[0],G=T.touch1[1],V=(V=K[0]-H[0])*V+(V=K[1]-H[1])*V,B=(B=G[0]-Z[0])*B+(B=G[1]-Z[1])*B;z=g(z,Math.sqrt(V/B)),U=[(H[0]+K[0])/2,(H[1]+K[1])/2],Y=[(Z[0]+G[0])/2,(Z[1]+G[1])/2]}else if(T.touch0)U=T.touch0[0],Y=T.touch0[1];else return;T.zoom("touch",n(w(z,U,Y),T.extent,s))}}function L(b,...M){if(this.__zooming){var T=N(this,M).event(b),D=b.changedTouches,k=D.length,I,z;for(uf(b),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),I=0;I<k;++I)z=D[I],T.touch0&&T.touch0[2]===z.identifier?delete T.touch0:T.touch1&&T.touch1[2]===z.identifier&&delete T.touch1;if(T.touch1&&!T.touch0&&(T.touch0=T.touch1,delete T.touch1),T.touch0)T.touch0[1]=this.__zoom.invert(T.touch0[0]);else if(T.end(),T.taps===2&&(z=dn(z,this),Math.hypot(u[0]-z[0],u[1]-z[1])<_)){var U=Ht(this).on("dblclick.zoom");U&&U.apply(this,arguments)}}}return m.wheelDelta=function(b){return arguments.length?(r=typeof b=="function"?b:$l(+b),m):r},m.filter=function(b){return arguments.length?(e=typeof b=="function"?b:$l(!!b),m):e},m.touchable=function(b){return arguments.length?(o=typeof b=="function"?b:$l(!!b),m):o},m.extent=function(b){return arguments.length?(t=typeof b=="function"?b:$l([[+b[0][0],+b[0][1]],[+b[1][0],+b[1][1]]]),m):t},m.scaleExtent=function(b){return arguments.length?(i[0]=+b[0],i[1]=+b[1],m):[i[0],i[1]]},m.translateExtent=function(b){return arguments.length?(s[0][0]=+b[0][0],s[1][0]=+b[1][0],s[0][1]=+b[0][1],s[1][1]=+b[1][1],m):[[s[0][0],s[0][1]],[s[1][0],s[1][1]]]},m.constrain=function(b){return arguments.length?(n=b,m):n},m.duration=function(b){return arguments.length?(a=+b,m):a},m.interpolate=function(b){return arguments.length?(l=b,m):l},m.on=function(){var b=c.on.apply(c,arguments);return b===c?m:b},m.clickDistance=function(b){return arguments.length?(v=(b=+b)*b,m):Math.sqrt(v)},m.tapDistance=function(b){return arguments.length?(_=+b,m):_},m}const Cr={error001:()=>"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:t,sourceHandle:n,targetHandle:r})=>`Couldn't create edge for ${e} handle id: "${e==="source"?n:r}", edge id: ${t}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`},Na=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Rw=["Enter"," ","Escape"];var Xi;(function(e){e.Strict="strict",e.Loose="loose"})(Xi||(Xi={}));var To;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(To||(To={}));var Ta;(function(e){e.Partial="partial",e.Full="full"})(Ta||(Ta={}));const Aw={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null};var $r;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})($r||($r={}));var Qc;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Qc||(Qc={}));var ue;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(ue||(ue={}));const nv={[ue.Left]:ue.Right,[ue.Right]:ue.Left,[ue.Top]:ue.Bottom,[ue.Bottom]:ue.Top};function Mw(e){return e===null?null:e?"valid":"invalid"}const jw=e=>"id"in e&&"source"in e&&"target"in e,vP=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),Cm=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),ol=(e,t=[0,0])=>{const{width:n,height:r}=Er(e),o=e.origin??t,i=n*o[0],s=r*o[1];return{x:e.position.x-i,y:e.position.y-s}},yP=(e,t={nodeOrigin:[0,0],nodeLookup:void 0})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,o)=>{const i=typeof o=="string";let s=!t.nodeLookup&&!i?o:void 0;t.nodeLookup&&(s=i?t.nodeLookup.get(o):Cm(o)?o:t.nodeLookup.get(o.id));const a=s?Jc(s,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return Wu(r,a)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Zu(n)},il=(e,t={})=>{if(e.size===0)return{x:0,y:0,width:0,height:0};let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0};return e.forEach(r=>{if(t.filter===void 0||t.filter(r)){const o=Jc(r);n=Wu(n,o)}}),Zu(n)},Ow=(e,t,[n,r,o]=[0,0,1],i=!1,s=!1)=>{const a={...sl(t,[n,r,o]),width:t.width/o,height:t.height/o},l=[];for(const c of e.values()){const{measured:d,selectable:u=!0,hidden:f=!1}=c;if(s&&!u||f)continue;const p=d.width??c.width??c.initialWidth??null,y=d.height??c.height??c.initialHeight??null,v=Pa(a,Qi(c)),_=(p??0)*(y??0),m=i&&v>0;(!c.internals.handleBounds||m||v>=_||c.dragging)&&l.push(c)}return l},xP=(e,t)=>{const n=new Set;return e.forEach(r=>{n.add(r.id)}),t.filter(r=>n.has(r.source)||n.has(r.target))};function Fp(e,t){const n=new Map,r=t!=null&&t.nodes?new Set(t.nodes.map(o=>o.id)):null;return e.forEach(o=>{o.measured.width&&o.measured.height&&((t==null?void 0:t.includeHiddenNodes)||!o.hidden)&&(!r||r.has(o.id))&&n.set(o.id,o)}),n}async function Vp({nodes:e,width:t,height:n,panZoom:r,minZoom:o,maxZoom:i},s){if(e.size===0)return Promise.resolve(!1);const a=il(e),l=Em(a,t,n,(s==null?void 0:s.minZoom)??o,(s==null?void 0:s.maxZoom)??i,(s==null?void 0:s.padding)??.1);return await r.setViewport(l,{duration:s==null?void 0:s.duration}),Promise.resolve(!0)}function Dw({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:r=[0,0],nodeExtent:o,onError:i}){const s=n.get(e),a=s.parentId?n.get(s.parentId):void 0,{x:l,y:c}=a?a.internals.positionAbsolute:{x:0,y:0},d=s.origin??r;let u=o;if(s.extent==="parent"&&!s.expandParent)if(!a)i==null||i("005",Cr.error005());else{const p=a.measured.width,y=a.measured.height;p&&y&&(u=[[l,c],[l+p,c+y]])}else a&&Ji(s.extent)&&(u=[[s.extent[0][0]+l,s.extent[0][1]+c],[s.extent[1][0]+l,s.extent[1][1]+c]]);const f=Ji(u)?zo(t,u,s.measured):t;return{position:{x:f.x-l+s.measured.width*d[0],y:f.y-c+s.measured.height*d[1]},positionAbsolute:f}}async function wP({nodesToRemove:e=[],edgesToRemove:t=[],nodes:n,edges:r,onBeforeDelete:o}){const i=new Set(e.map(f=>f.id)),s=[];for(const f of n){if(f.deletable===!1)continue;const p=i.has(f.id),y=!p&&f.parentId&&s.find(v=>v.id===f.parentId);(p||y)&&s.push(f)}const a=new Set(t.map(f=>f.id)),l=r.filter(f=>f.deletable!==!1),d=xP(s,l);for(const f of l)a.has(f.id)&&!d.find(y=>y.id===f.id)&&d.push(f);if(!o)return{edges:d,nodes:s};const u=await o({nodes:s,edges:d});return typeof u=="boolean"?u?{edges:d,nodes:s}:{edges:[],nodes:[]}:u}const qi=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),zo=(e={x:0,y:0},t,n)=>({x:qi(e.x,t[0][0],t[1][0]-((n==null?void 0:n.width)??0)),y:qi(e.y,t[0][1],t[1][1]-((n==null?void 0:n.height)??0))});function Lw(e,t,n){const{width:r,height:o}=Er(n),{x:i,y:s}=n.internals.positionAbsolute;return zo(e,[[i,s],[i+r,s+o]],t)}const rv=(e,t,n)=>e<t?qi(Math.abs(e-t),1,t)/t:e>n?-qi(Math.abs(e-n),1,t)/t:0,zw=(e,t,n=15,r=40)=>{const o=rv(e.x,r,t.width-r)*n,i=rv(e.y,r,t.height-r)*n;return[o,i]},Wu=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Hp=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),Zu=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),Qi=(e,t=[0,0])=>{var o,i;const{x:n,y:r}=Cm(e)?e.internals.positionAbsolute:ol(e,t);return{x:n,y:r,width:((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0,height:((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight??0}},Jc=(e,t=[0,0])=>{var o,i;const{x:n,y:r}=Cm(e)?e.internals.positionAbsolute:ol(e,t);return{x:n,y:r,x2:n+(((o=e.measured)==null?void 0:o.width)??e.width??e.initialWidth??0),y2:r+(((i=e.measured)==null?void 0:i.height)??e.height??e.initialHeight??0)}},$w=(e,t)=>Zu(Wu(Hp(e),Hp(t))),Pa=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},ov=e=>mn(e.width)&&mn(e.height)&&mn(e.x)&&mn(e.y),mn=e=>!isNaN(e)&&isFinite(e),_P=(e,t)=>{},Gu=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),sl=({x:e,y:t},[n,r,o],i=!1,s=[1,1])=>{const a={x:(e-n)/o,y:(t-r)/o};return i?Gu(a,s):a},Fw=({x:e,y:t},[n,r,o])=>({x:e*o+n,y:t*o+r}),Em=(e,t,n,r,o,i)=>{const s=t/(e.width*(1+i)),a=n/(e.height*(1+i)),l=Math.min(s,a),c=qi(l,r,o),d=e.x+e.width/2,u=e.y+e.height/2,f=t/2-d*c,p=n/2-u*c;return{x:f,y:p,zoom:c}},eu=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function Ji(e){return e!==void 0&&e!=="parent"}function Er(e){var t,n;return{width:((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth??0,height:((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight??0}}function Vw(e){var t,n;return(((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth)!==void 0&&(((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight)!==void 0}function Hw(e,t={width:0,height:0},n,r,o){let i=n;const s={...e};for(;i;){const a=r.get(i);if(i=a==null?void 0:a.parentId,a){const l=a.origin||o;s.x+=a.internals.positionAbsolute.x-(t.width??0)*l[0],s.y+=a.internals.positionAbsolute.y-(t.height??0)*l[1]}}return s}function ea(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:r}){const{x:o,y:i}=lr(e),s=sl({x:o,y:i},r),{x:a,y:l}=n?Gu(s,t):s;return{xSnapped:a,ySnapped:l,...s}}const Yu=e=>({width:e.offsetWidth,height:e.offsetHeight}),Bw=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},SP=["INPUT","SELECT","TEXTAREA"];function Bp(e){var r,o;const t=((o=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:o[0])||e.target;return SP.includes(t==null?void 0:t.nodeName)||(t==null?void 0:t.hasAttribute("contenteditable"))||!!(t!=null&&t.closest(".nokey"))}const Uw=e=>"clientX"in e,lr=(e,t)=>{var i,s;const n=Uw(e),r=n?e.clientX:(i=e.touches)==null?void 0:i[0].clientX,o=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:o-((t==null?void 0:t.top)??0)}},iv=(e,t,n,r,o)=>{const i=t.querySelectorAll(`.${e}`);return!i||!i.length?null:Array.from(i).map(s=>{const a=s.getBoundingClientRect();return{id:s.getAttribute("data-handleid"),type:e,nodeId:o,position:s.getAttribute("data-handlepos"),x:(a.left-n.left)/r,y:(a.top-n.top)/r,...Yu(s)}})};function Ww({sourceX:e,sourceY:t,targetX:n,targetY:r,sourceControlX:o,sourceControlY:i,targetControlX:s,targetControlY:a}){const l=e*.125+o*.375+s*.375+n*.125,c=t*.125+i*.375+a*.375+r*.125,d=Math.abs(l-e),u=Math.abs(c-t);return[l,c,d,u]}function Fl(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function sv({pos:e,x1:t,y1:n,x2:r,y2:o,c:i}){switch(e){case ue.Left:return[t-Fl(t-r,i),n];case ue.Right:return[t+Fl(r-t,i),n];case ue.Top:return[t,n-Fl(n-o,i)];case ue.Bottom:return[t,n+Fl(o-n,i)]}}function Zw({sourceX:e,sourceY:t,sourcePosition:n=ue.Bottom,targetX:r,targetY:o,targetPosition:i=ue.Top,curvature:s=.25}){const[a,l]=sv({pos:n,x1:e,y1:t,x2:r,y2:o,c:s}),[c,d]=sv({pos:i,x1:r,y1:o,x2:e,y2:t,c:s}),[u,f,p,y]=Ww({sourceX:e,sourceY:t,targetX:r,targetY:o,sourceControlX:a,sourceControlY:l,targetControlX:c,targetControlY:d});return[`M${e},${t} C${a},${l} ${c},${d} ${r},${o}`,u,f,p,y]}function Gw({sourceX:e,sourceY:t,targetX:n,targetY:r}){const o=Math.abs(n-e)/2,i=n<e?n+o:n-o,s=Math.abs(r-t)/2,a=r<t?r+s:r-s;return[i,a,o,s]}function bP({sourceNode:e,targetNode:t,selected:n=!1,zIndex:r=0,elevateOnSelect:o=!1}){if(!o)return r;const i=n||t.selected||e.selected,s=Math.max(e.internals.z||0,t.internals.z||0,1e3);return r+(i?s:0)}function CP({sourceNode:e,targetNode:t,width:n,height:r,transform:o}){const i=Wu(Jc(e),Jc(t));i.x===i.x2&&(i.x2+=1),i.y===i.y2&&(i.y2+=1);const s={x:-o[0]/o[2],y:-o[1]/o[2],width:n/o[2],height:r/o[2]};return Pa(s,Zu(i))>0}const EP=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`xy-edge__${e}${t||""}-${n}${r||""}`,kP=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),Yw=(e,t)=>{if(!e.source||!e.target)return t;let n;return jw(e)?n={...e}:n={...e,id:EP(e)},kP(n,t)?t:(n.sourceHandle===null&&delete n.sourceHandle,n.targetHandle===null&&delete n.targetHandle,t.concat(n))};function Kw({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[o,i,s,a]=Gw({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,o,i,s,a]}const av={[ue.Left]:{x:-1,y:0},[ue.Right]:{x:1,y:0},[ue.Top]:{x:0,y:-1},[ue.Bottom]:{x:0,y:1}},NP=({source:e,sourcePosition:t=ue.Bottom,target:n})=>t===ue.Left||t===ue.Right?e.x<n.x?{x:1,y:0}:{x:-1,y:0}:e.y<n.y?{x:0,y:1}:{x:0,y:-1},lv=(e,t)=>Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function TP({source:e,sourcePosition:t=ue.Bottom,target:n,targetPosition:r=ue.Top,center:o,offset:i}){const s=av[t],a=av[r],l={x:e.x+s.x*i,y:e.y+s.y*i},c={x:n.x+a.x*i,y:n.y+a.y*i},d=NP({source:l,sourcePosition:t,target:c}),u=d.x!==0?"x":"y",f=d[u];let p=[],y,v;const _={x:0,y:0},m={x:0,y:0},[g,w,S,C]=Gw({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[u]*a[u]===-1){y=o.x??g,v=o.y??w;const E=[{x:y,y:l.y},{x:y,y:c.y}],P=[{x:l.x,y:v},{x:c.x,y:v}];s[u]===f?p=u==="x"?E:P:p=u==="x"?P:E}else{const E=[{x:l.x,y:c.y}],P=[{x:c.x,y:l.y}];if(u==="x"?p=s.x===f?P:E:p=s.y===f?E:P,t===r){const L=Math.abs(e[u]-n[u]);if(L<=i){const b=Math.min(i-1,i-L);s[u]===f?_[u]=(l[u]>e[u]?-1:1)*b:m[u]=(c[u]>n[u]?-1:1)*b}}if(t!==r){const L=u==="x"?"y":"x",b=s[u]===a[L],M=l[L]>c[L],T=l[L]<c[L];(s[u]===1&&(!b&&M||b&&T)||s[u]!==1&&(!b&&T||b&&M))&&(p=u==="x"?E:P)}const O={x:l.x+_.x,y:l.y+_.y},j={x:c.x+m.x,y:c.y+m.y},$=Math.max(Math.abs(O.x-p[0].x),Math.abs(j.x-p[0].x)),A=Math.max(Math.abs(O.y-p[0].y),Math.abs(j.y-p[0].y));$>=A?(y=(O.x+j.x)/2,v=p[0].y):(y=p[0].x,v=(O.y+j.y)/2)}return[[e,{x:l.x+_.x,y:l.y+_.y},...p,{x:c.x+m.x,y:c.y+m.y},n],y,v,S,C]}function PP(e,t,n,r){const o=Math.min(lv(e,t)/2,lv(t,n)/2,r),{x:i,y:s}=t;if(e.x===i&&i===n.x||e.y===s&&s===n.y)return`L${i} ${s}`;if(e.y===s){const c=e.x<n.x?-1:1,d=e.y<n.y?1:-1;return`L ${i+o*c},${s}Q ${i},${s} ${i},${s+o*d}`}const a=e.x<n.x?1:-1,l=e.y<n.y?-1:1;return`L ${i},${s+o*l}Q ${i},${s} ${i+o*a},${s}`}function Up({sourceX:e,sourceY:t,sourcePosition:n=ue.Bottom,targetX:r,targetY:o,targetPosition:i=ue.Top,borderRadius:s=5,centerX:a,centerY:l,offset:c=20}){const[d,u,f,p,y]=TP({source:{x:e,y:t},sourcePosition:n,target:{x:r,y:o},targetPosition:i,center:{x:a,y:l},offset:c});return[d.reduce((_,m,g)=>{let w="";return g>0&&g<d.length-1?w=PP(d[g-1],m,d[g+1],s):w=`${g===0?"M":"L"}${m.x} ${m.y}`,_+=w,_},""),u,f,p,y]}function cv(e){var t;return e&&!!(e.internals.handleBounds||(t=e.handles)!=null&&t.length)&&!!(e.measured.width||e.width||e.initialWidth)}function IP(e){var u;const{sourceNode:t,targetNode:n}=e;if(!cv(t)||!cv(n))return null;const r=t.internals.handleBounds||uv(t.handles),o=n.internals.handleBounds||uv(n.handles),i=dv((r==null?void 0:r.source)??[],e.sourceHandle),s=dv(e.connectionMode===Xi.Strict?(o==null?void 0:o.target)??[]:((o==null?void 0:o.target)??[]).concat((o==null?void 0:o.source)??[]),e.targetHandle);if(!i||!s)return(u=e.onError)==null||u.call(e,"008",Cr.error008(i?"target":"source",{id:e.id,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle})),null;const a=(i==null?void 0:i.position)||ue.Bottom,l=(s==null?void 0:s.position)||ue.Top,c=Ia(t,i,a),d=Ia(n,s,l);return{sourceX:c.x,sourceY:c.y,targetX:d.x,targetY:d.y,sourcePosition:a,targetPosition:l}}function uv(e){if(!e)return null;const t=[],n=[];for(const r of e)r.width=r.width??1,r.height=r.height??1,r.type==="source"?t.push(r):r.type==="target"&&n.push(r);return{source:t,target:n}}function Ia(e,t,n=ue.Left,r=!1){const o=((t==null?void 0:t.x)??0)+e.internals.positionAbsolute.x,i=((t==null?void 0:t.y)??0)+e.internals.positionAbsolute.y,{width:s,height:a}=t??Er(e);if(r)return{x:o+s/2,y:i+a/2};switch((t==null?void 0:t.position)??n){case ue.Top:return{x:o+s/2,y:i};case ue.Right:return{x:o+s,y:i+a/2};case ue.Bottom:return{x:o+s/2,y:i+a};case ue.Left:return{x:o,y:i+a/2}}}function dv(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function Wp(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`:""}function RP(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:o}){const i=new Set;return e.reduce((s,a)=>([a.markerStart||r,a.markerEnd||o].forEach(l=>{if(l&&typeof l=="object"){const c=Wp(l,t);i.has(c)||(s.push({id:c,color:l.color||n,...l}),i.add(c))}}),s),[]).sort((s,a)=>s.id.localeCompare(a.id))}const km={nodeOrigin:[0,0],nodeExtent:Na,elevateNodesOnSelect:!0,defaults:{}},AP={...km,checkEquality:!0};function Nm(e,t){const n={...e};for(const r in t)t[r]!==void 0&&(n[r]=t[r]);return n}function MP(e,t,n){const r=Nm(km,n);for(const o of e.values())if(o.parentId)Tm(o,e,t,r);else{const i=ol(o,r.nodeOrigin),s=Ji(o.extent)?o.extent:r.nodeExtent,a=zo(i,s,Er(o));o.internals.positionAbsolute=a}}function Zp(e,t,n,r){var a,l;const o=Nm(AP,r),i=new Map(t),s=o!=null&&o.elevateNodesOnSelect?1e3:0;t.clear(),n.clear();for(const c of e){let d=i.get(c.id);if(o.checkEquality&&c===(d==null?void 0:d.internals.userNode))t.set(c.id,d);else{const u=ol(c,o.nodeOrigin),f=Ji(c.extent)?c.extent:o.nodeExtent,p=zo(u,f,Er(c));d={...o.defaults,...c,measured:{width:(a=c.measured)==null?void 0:a.width,height:(l=c.measured)==null?void 0:l.height},internals:{positionAbsolute:p,handleBounds:c.measured?d==null?void 0:d.internals.handleBounds:void 0,z:Xw(c,s),userNode:c}},t.set(c.id,d)}c.parentId&&Tm(d,t,n,r)}}function jP(e,t){if(!e.parentId)return;const n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function Tm(e,t,n,r){const{elevateNodesOnSelect:o,nodeOrigin:i,nodeExtent:s}=Nm(km,r),a=e.parentId,l=t.get(a);if(!l){console.warn(`Parent node ${a} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}jP(e,n);const c=o?1e3:0,{x:d,y:u,z:f}=OP(e,l,i,s,c),{positionAbsolute:p}=e.internals,y=d!==p.x||u!==p.y;(y||f!==e.internals.z)&&(e.internals={...e.internals,positionAbsolute:y?{x:d,y:u}:p,z:f})}function Xw(e,t){return(mn(e.zIndex)?e.zIndex:0)+(e.selected?t:0)}function OP(e,t,n,r,o){const{x:i,y:s}=t.internals.positionAbsolute,a=Er(e),l=ol(e,n),c=Ji(e.extent)?zo(l,e.extent,a):l;let d=zo({x:i+c.x,y:s+c.y},r,a);e.extent==="parent"&&(d=Lw(d,a,t));const u=Xw(e,o),f=t.internals.z??0;return{x:d.x,y:d.y,z:f>u?f:u}}function Pm(e,t,n,r=[0,0]){var s;const o=[],i=new Map;for(const a of e){const l=t.get(a.parentId);if(!l)continue;const c=((s=i.get(a.parentId))==null?void 0:s.expandedRect)??Qi(l),d=$w(c,a.rect);i.set(a.parentId,{expandedRect:d,parent:l})}return i.size>0&&i.forEach(({expandedRect:a,parent:l},c)=>{var w;const d=l.internals.positionAbsolute,u=Er(l),f=l.origin??r,p=a.x<d.x?Math.round(Math.abs(d.x-a.x)):0,y=a.y<d.y?Math.round(Math.abs(d.y-a.y)):0,v=Math.max(u.width,Math.round(a.width)),_=Math.max(u.height,Math.round(a.height)),m=(v-u.width)*f[0],g=(_-u.height)*f[1];(p>0||y>0||m||g)&&(o.push({id:c,type:"position",position:{x:l.position.x-p+m,y:l.position.y-y+g}}),(w=n.get(c))==null||w.forEach(S=>{e.some(C=>C.id===S.id)||o.push({id:S.id,type:"position",position:{x:S.position.x+p,y:S.position.y+y}})})),(u.width<a.width||u.height<a.height||p||y)&&o.push({id:c,type:"dimensions",setAttributes:!0,dimensions:{width:v+(p?f[0]*p-m:0),height:_+(y?f[1]*y-g:0)}})}),o}function DP(e,t,n,r,o,i){const s=r==null?void 0:r.querySelector(".xyflow__viewport");let a=!1;if(!s)return{changes:[],updatedInternals:a};const l=[],c=window.getComputedStyle(s),{m22:d}=new window.DOMMatrixReadOnly(c.transform),u=[];for(const f of e.values()){const p=t.get(f.id);if(p)if(p.hidden)p.internals={...p.internals,handleBounds:void 0},a=!0;else{const y=Yu(f.nodeElement),v=p.measured.width!==y.width||p.measured.height!==y.height;if(!!(y.width&&y.height&&(v||!p.internals.handleBounds||f.force))){const m=f.nodeElement.getBoundingClientRect(),g=Ji(p.extent)?p.extent:i;let{positionAbsolute:w}=p.internals;p.parentId&&p.extent==="parent"?w=Lw(w,y,t.get(p.parentId)):g&&(w=zo(w,g,y)),p.measured=y,p.internals={...p.internals,positionAbsolute:w,handleBounds:{source:iv("source",f.nodeElement,m,d,p.id),target:iv("target",f.nodeElement,m,d,p.id)}},p.parentId&&Tm(p,t,n,{nodeOrigin:o}),a=!0,v&&(l.push({id:p.id,type:"dimensions",dimensions:y}),p.expandParent&&p.parentId&&u.push({id:p.id,parentId:p.parentId,rect:Qi(p,o)}))}}}if(u.length>0){const f=Pm(u,t,n,o);l.push(...f)}return{changes:l,updatedInternals:a}}async function LP({delta:e,panZoom:t,transform:n,translateExtent:r,width:o,height:i}){if(!t||!e.x&&!e.y)return Promise.resolve(!1);const s=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[o,i]],r),a=!!s&&(s.x!==n[0]||s.y!==n[1]||s.k!==n[2]);return Promise.resolve(a)}function qw(e,t,n){e.clear(),t.clear();for(const r of n){const{source:o,target:i,sourceHandle:s=null,targetHandle:a=null}=r,l=`${o}-source-${s}`,c=`${i}-target-${a}`,d=e.get(l)||new Map,u=e.get(c)||new Map,f={edgeId:r.id,source:o,target:i,sourceHandle:s,targetHandle:a};t.set(r.id,r),e.set(l,d.set(`${i}-${a}`,f)),e.set(c,u.set(`${o}-${s}`,f))}}function Qw(e,t){if(!e.parentId)return!1;const n=t.get(e.parentId);return n?n.selected?!0:Qw(n,t):!1}function fv(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n)return!1;r=r.parentElement}while(r);return!1}function zP(e,t,n,r){const o=new Map;for(const[i,s]of e)if((s.selected||s.id===r)&&(!s.parentId||!Qw(s,e))&&(s.draggable||t&&typeof s.draggable>"u")){const a=e.get(i);a&&o.set(i,{id:i,position:a.position||{x:0,y:0},distance:{x:n.x-a.internals.positionAbsolute.x,y:n.y-a.internals.positionAbsolute.y},extent:a.extent,parentId:a.parentId,origin:a.origin,expandParent:a.expandParent,internals:{positionAbsolute:a.internals.positionAbsolute||{x:0,y:0}},measured:{width:a.measured.width??0,height:a.measured.height??0}})}return o}function df({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){var s,a,l;const o=[];for(const[c,d]of t){const u=(s=n.get(c))==null?void 0:s.internals.userNode;u&&o.push({...u,position:d.position,dragging:r})}if(!e)return[o[0],o];const i=(a=n.get(e))==null?void 0:a.internals.userNode;return[i?{...i,position:((l=t.get(e))==null?void 0:l.position)||i.position,dragging:r}:o[0],o]}function $P({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:o}){let i={x:null,y:null},s=0,a=new Map,l=!1,c={x:0,y:0},d=null,u=!1,f=null,p=!1;function y({noDragClassName:_,handleSelector:m,domNode:g,isSelectable:w,nodeId:S,nodeClickDistance:C=0}){f=Ht(g);function N({x:j,y:$},A){const{nodeLookup:L,nodeExtent:b,snapGrid:M,snapToGrid:T,nodeOrigin:D,onNodeDrag:k,onSelectionDrag:I,onError:z,updateNodePositions:U}=t();i={x:j,y:$};let Y=!1,H={x:0,y:0,x2:0,y2:0};if(a.size>1&&b){const Z=il(a);H=Hp(Z)}for(const[Z,K]of a){if(!L.has(Z))continue;let G={x:j-K.distance.x,y:$-K.distance.y};T&&(G=Gu(G,M));let V=[[b[0][0],b[0][1]],[b[1][0],b[1][1]]];if(a.size>1&&b&&!K.extent){const{positionAbsolute:ne}=K.internals,oe=ne.x-H.x+b[0][0],X=ne.x+K.measured.width-H.x2+b[1][0],ae=ne.y-H.y+b[0][1],me=ne.y+K.measured.height-H.y2+b[1][1];V=[[oe,ae],[X,me]]}const{position:B,positionAbsolute:ee}=Dw({nodeId:Z,nextPosition:G,nodeLookup:L,nodeExtent:V,nodeOrigin:D,onError:z});Y=Y||K.position.x!==B.x||K.position.y!==B.y,K.position=B,K.internals.positionAbsolute=ee}if(Y&&(U(a,!0),A&&(r||k||!S&&I))){const[Z,K]=df({nodeId:S,dragItems:a,nodeLookup:L});r==null||r(A,a,Z,K),k==null||k(A,Z,K),S||I==null||I(A,K)}}async function E(){if(!d)return;const{transform:j,panBy:$,autoPanSpeed:A}=t(),[L,b]=zw(c,d,A);(L!==0||b!==0)&&(i.x=(i.x??0)-L/j[2],i.y=(i.y??0)-b/j[2],await $({x:L,y:b})&&N(i,null)),s=requestAnimationFrame(E)}function P(j){var Y;const{nodeLookup:$,multiSelectionActive:A,nodesDraggable:L,transform:b,snapGrid:M,snapToGrid:T,selectNodesOnDrag:D,onNodeDragStart:k,onSelectionDragStart:I,unselectNodesAndEdges:z}=t();u=!0,(!D||!w)&&!A&&S&&((Y=$.get(S))!=null&&Y.selected||z()),w&&D&&S&&(e==null||e(S));const U=ea(j.sourceEvent,{transform:b,snapGrid:M,snapToGrid:T});if(i=U,a=zP($,L,U,S),a.size>0&&(n||k||!S&&I)){const[H,Z]=df({nodeId:S,dragItems:a,nodeLookup:$});n==null||n(j.sourceEvent,a,H,Z),k==null||k(j.sourceEvent,H,Z),S||I==null||I(j.sourceEvent,Z)}}const O=mw().clickDistance(C).on("start",j=>{const{domNode:$,nodeDragThreshold:A,transform:L,snapGrid:b,snapToGrid:M}=t();p=!1,A===0&&P(j),i=ea(j.sourceEvent,{transform:L,snapGrid:b,snapToGrid:M}),d=($==null?void 0:$.getBoundingClientRect())||null,c=lr(j.sourceEvent,d)}).on("drag",j=>{const{autoPanOnNodeDrag:$,transform:A,snapGrid:L,snapToGrid:b,nodeDragThreshold:M,nodeLookup:T}=t(),D=ea(j.sourceEvent,{transform:A,snapGrid:L,snapToGrid:b});if((j.sourceEvent.type==="touchmove"&&j.sourceEvent.touches.length>1||S&&!T.has(S))&&(p=!0),!p){if(!l&&$&&u&&(l=!0,E()),!u){const k=D.xSnapped-(i.x??0),I=D.ySnapped-(i.y??0);Math.sqrt(k*k+I*I)>M&&P(j)}(i.x!==D.xSnapped||i.y!==D.ySnapped)&&a&&u&&(c=lr(j.sourceEvent,d),N(D,j.sourceEvent))}}).on("end",j=>{if(!(!u||p)&&(l=!1,u=!1,cancelAnimationFrame(s),a.size>0)){const{nodeLookup:$,updateNodePositions:A,onNodeDragStop:L,onSelectionDragStop:b}=t();if(A(a,!1),o||L||!S&&b){const[M,T]=df({nodeId:S,dragItems:a,nodeLookup:$,dragging:!1});o==null||o(j.sourceEvent,a,M,T),L==null||L(j.sourceEvent,M,T),S||b==null||b(j.sourceEvent,T)}}}).filter(j=>{const $=j.target;return!j.button&&(!_||!fv($,`.${_}`,g))&&(!m||fv($,m,g))});f.call(O)}function v(){f==null||f.on(".drag",null)}return{update:y,destroy:v}}function FP(e,t,n){const r=[],o={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const i of t.values())Pa(o,Qi(i))>0&&r.push(i);return r}const VP=250;function HP(e,t,n,r){var a,l;let o=[],i=1/0;const s=FP(e,n,t+VP);for(const c of s){const d=[...((a=c.internals.handleBounds)==null?void 0:a.source)??[],...((l=c.internals.handleBounds)==null?void 0:l.target)??[]];for(const u of d){if(r.nodeId===u.nodeId&&r.type===u.type&&r.id===u.id)continue;const{x:f,y:p}=Ia(c,u,u.position,!0),y=Math.sqrt(Math.pow(f-e.x,2)+Math.pow(p-e.y,2));y>t||(y<i?(o=[{...u,x:f,y:p}],i=y):y===i&&o.push({...u,x:f,y:p}))}}if(!o.length)return null;if(o.length>1){const c=r.type==="source"?"target":"source";return o.find(d=>d.type===c)??o[0]}return o[0]}function Jw(e,t,n,r,o,i=!1){var c,d,u;const s=r.get(e);if(!s)return null;const a=o==="strict"?(c=s.internals.handleBounds)==null?void 0:c[t]:[...((d=s.internals.handleBounds)==null?void 0:d.source)??[],...((u=s.internals.handleBounds)==null?void 0:u.target)??[]],l=(n?a==null?void 0:a.find(f=>f.id===n):a==null?void 0:a[0])??null;return l&&i?{...l,...Ia(s,l,l.position,!0)}:l}function e2(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function BP(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}const t2=()=>!0;function UP(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:o,edgeUpdaterType:i,isTarget:s,domNode:a,nodeLookup:l,lib:c,autoPanOnConnect:d,flowId:u,panBy:f,cancelConnection:p,onConnectStart:y,onConnect:v,onConnectEnd:_,isValidConnection:m=t2,onReconnectEnd:g,updateConnection:w,getTransform:S,getFromHandle:C,autoPanSpeed:N}){const E=Bw(e.target);let P=0,O;const{x:j,y:$}=lr(e),A=E==null?void 0:E.elementFromPoint(j,$),L=e2(i,A),b=a==null?void 0:a.getBoundingClientRect();if(!b||!L)return;const M=Jw(o,L,r,l,t);if(!M)return;let T=lr(e,b),D=!1,k=null,I=!1,z=null;function U(){if(!d||!b)return;const[ee,ne]=zw(T,b,N);f({x:ee,y:ne}),P=requestAnimationFrame(U)}const Y={...M,nodeId:o,type:L,position:M.position},H=l.get(o),K={inProgress:!0,isValid:null,from:Ia(H,Y,ue.Left,!0),fromHandle:Y,fromPosition:Y.position,fromNode:H,to:T,toHandle:null,toPosition:nv[Y.position],toNode:null};w(K);let G=K;y==null||y(e,{nodeId:o,handleId:r,handleType:L});function V(ee){if(!C()||!Y){B(ee);return}const ne=S();T=lr(ee,b),O=HP(sl(T,ne,!1,[1,1]),n,l,Y),D||(U(),D=!0);const oe=n2(ee,{handle:O,connectionMode:t,fromNodeId:o,fromHandleId:r,fromType:s?"target":"source",isValidConnection:m,doc:E,lib:c,flowId:u,nodeLookup:l});z=oe.handleDomNode,k=oe.connection,I=BP(!!O,oe.isValid);const X={...G,isValid:I,to:O&&I?Fw({x:O.x,y:O.y},ne):T,toHandle:oe.toHandle,toPosition:I&&oe.toHandle?oe.toHandle.position:nv[Y.position],toNode:oe.toHandle?l.get(oe.toHandle.nodeId):null};I&&O&&G.toHandle&&X.toHandle&&G.toHandle.type===X.toHandle.type&&G.toHandle.nodeId===X.toHandle.nodeId&&G.toHandle.id===X.toHandle.id&&G.to.x===X.to.x&&G.to.y===X.to.y||(w(X),G=X)}function B(ee){(O||z)&&k&&I&&(v==null||v(k));const{inProgress:ne,...oe}=G,X={...oe,toPosition:G.toHandle?G.toPosition:null};_==null||_(ee,X),i&&(g==null||g(ee,X)),p(),cancelAnimationFrame(P),D=!1,I=!1,k=null,z=null,E.removeEventListener("mousemove",V),E.removeEventListener("mouseup",B),E.removeEventListener("touchmove",V),E.removeEventListener("touchend",B)}E.addEventListener("mousemove",V),E.addEventListener("mouseup",B),E.addEventListener("touchmove",V),E.addEventListener("touchend",B)}function n2(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:o,fromType:i,doc:s,lib:a,flowId:l,isValidConnection:c=t2,nodeLookup:d}){const u=i==="target",f=t?s.querySelector(`.${a}-flow__handle[data-id="${l}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x:p,y}=lr(e),v=s.elementFromPoint(p,y),_=v!=null&&v.classList.contains(`${a}-flow__handle`)?v:f,m={handleDomNode:_,isValid:!1,connection:null,toHandle:null};if(_){const g=e2(void 0,_),w=_.getAttribute("data-nodeid"),S=_.getAttribute("data-handleid"),C=_.classList.contains("connectable"),N=_.classList.contains("connectableend");if(!w||!g)return m;const E={source:u?w:r,sourceHandle:u?S:o,target:u?r:w,targetHandle:u?o:S};m.connection=E;const O=C&&N&&(n===Xi.Strict?u&&g==="source"||!u&&g==="target":w!==r||S!==o);m.isValid=O&&c(E),m.toHandle=Jw(w,g,S,d,n,!1)}return m}const Gp={onPointerDown:UP,isValid:n2};function WP({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){const o=Ht(e);function i({translateExtent:a,width:l,height:c,zoomStep:d=10,pannable:u=!0,zoomable:f=!0,inversePan:p=!1}){const y=w=>{const S=n();if(w.sourceEvent.type!=="wheel"||!t)return;const C=-w.sourceEvent.deltaY*(w.sourceEvent.deltaMode===1?.05:w.sourceEvent.deltaMode?1:.002)*d,N=S[2]*Math.pow(2,C);t.scaleTo(N)};let v=[0,0];const _=w=>{(w.sourceEvent.type==="mousedown"||w.sourceEvent.type==="touchstart")&&(v=[w.sourceEvent.clientX??w.sourceEvent.touches[0].clientX,w.sourceEvent.clientY??w.sourceEvent.touches[0].clientY])},m=w=>{const S=n();if(w.sourceEvent.type!=="mousemove"&&w.sourceEvent.type!=="touchmove"||!t)return;const C=[w.sourceEvent.clientX??w.sourceEvent.touches[0].clientX,w.sourceEvent.clientY??w.sourceEvent.touches[0].clientY],N=[C[0]-v[0],C[1]-v[1]];v=C;const E=r()*Math.max(S[2],Math.log(S[2]))*(p?-1:1),P={x:S[0]-N[0]*E,y:S[1]-N[1]*E},O=[[0,0],[l,c]];t.setViewportConstrained({x:P.x,y:P.y,zoom:S[2]},O,a)},g=Iw().on("start",_).on("zoom",u?m:null).on("zoom.wheel",f?y:null);o.call(g,{})}function s(){o.on("zoom",null)}return{update:i,destroy:s,pointer:dn}}const ZP=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,Ku=e=>({x:e.x,y:e.y,zoom:e.k}),ff=({x:e,y:t,zoom:n})=>Uu.translate(e,t).scale(n),_i=(e,t)=>e.target.closest(`.${t}`),r2=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),pf=(e,t=0,n=()=>{})=>{const r=typeof t=="number"&&t>0;return r||n(),r?e.transition().duration(t).on("end",n):e},o2=e=>{const t=e.ctrlKey&&eu()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function GP({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:o,panOnScrollSpeed:i,zoomOnPinch:s,onPanZoomStart:a,onPanZoom:l,onPanZoomEnd:c}){return d=>{if(_i(d,t))return!1;d.preventDefault(),d.stopImmediatePropagation();const u=n.property("__zoom").k||1;if(d.ctrlKey&&s){const _=dn(d),m=o2(d),g=u*Math.pow(2,m);r.scaleTo(n,g,_,d);return}const f=d.deltaMode===1?20:1;let p=o===To.Vertical?0:d.deltaX*f,y=o===To.Horizontal?0:d.deltaY*f;!eu()&&d.shiftKey&&o!==To.Vertical&&(p=d.deltaY*f,y=0),r.translateBy(n,-(p/u)*i,-(y/u)*i,{internal:!0});const v=Ku(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling||(e.isPanScrolling=!0,a==null||a(d,v)),e.isPanScrolling&&(l==null||l(d,v),e.panScrollTimeout=setTimeout(()=>{c==null||c(d,v),e.isPanScrolling=!1},150))}}function YP({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,o){if(!t&&r.type==="wheel"&&!r.ctrlKey||_i(r,e))return null;r.preventDefault(),n.call(this,r,o)}}function KP({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{var i,s,a;if((i=r.sourceEvent)!=null&&i.internal)return;const o=Ku(r.transform);e.mouseButton=((s=r.sourceEvent)==null?void 0:s.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=o,((a=r.sourceEvent)==null?void 0:a.type)==="mousedown"&&t(!0),n&&(n==null||n(r.sourceEvent,o))}}function XP({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:o}){return i=>{var s,a;e.usedRightMouseButton=!!(n&&r2(t,e.mouseButton??0)),(s=i.sourceEvent)!=null&&s.sync||r([i.transform.x,i.transform.y,i.transform.k]),o&&!((a=i.sourceEvent)!=null&&a.internal)&&(o==null||o(i.sourceEvent,Ku(i.transform)))}}function qP({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:o,onPaneContextMenu:i}){return s=>{var a;if(!((a=s.sourceEvent)!=null&&a.internal)&&(e.isZoomingOrPanning=!1,i&&r2(t,e.mouseButton??0)&&!e.usedRightMouseButton&&s.sourceEvent&&i(s.sourceEvent),e.usedRightMouseButton=!1,r(!1),o&&ZP(e.prevViewport,s.transform))){const l=Ku(s.transform);e.prevViewport=l,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{o==null||o(s.sourceEvent,l)},n?150:0)}}}function QP({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:n,panOnDrag:r,panOnScroll:o,zoomOnDoubleClick:i,userSelectionActive:s,noWheelClassName:a,noPanClassName:l,lib:c}){return d=>{var y;const u=e||t,f=n&&d.ctrlKey;if(d.button===1&&d.type==="mousedown"&&(_i(d,`${c}-flow__node`)||_i(d,`${c}-flow__edge`)))return!0;if(!r&&!u&&!o&&!i&&!n||s||_i(d,a)&&d.type==="wheel"||_i(d,l)&&(d.type!=="wheel"||o&&d.type==="wheel"&&!e)||!n&&d.ctrlKey&&d.type==="wheel")return!1;if(!n&&d.type==="touchstart"&&((y=d.touches)==null?void 0:y.length)>1)return d.preventDefault(),!1;if(!u&&!o&&!f&&d.type==="wheel"||!r&&(d.type==="mousedown"||d.type==="touchstart")||Array.isArray(r)&&!r.includes(d.button)&&d.type==="mousedown")return!1;const p=Array.isArray(r)&&r.includes(d.button)||!d.button||d.button<=1;return(!d.ctrlKey||d.type==="wheel")&&p}}function JP({domNode:e,minZoom:t,maxZoom:n,paneClickDistance:r,translateExtent:o,viewport:i,onPanZoom:s,onPanZoomStart:a,onPanZoomEnd:l,onDraggingChange:c}){const d={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{x:0,y:0,zoom:0},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},u=e.getBoundingClientRect(),f=Iw().clickDistance(!mn(r)||r<0?0:r).scaleExtent([t,n]).translateExtent(o),p=Ht(e).call(f);w({x:i.x,y:i.y,zoom:qi(i.zoom,t,n)},[[0,0],[u.width,u.height]],o);const y=p.on("wheel.zoom"),v=p.on("dblclick.zoom");f.wheelDelta(o2);function _(A,L){return p?new Promise(b=>{f==null||f.transform(pf(p,L==null?void 0:L.duration,()=>b(!0)),A)}):Promise.resolve(!1)}function m({noWheelClassName:A,noPanClassName:L,onPaneContextMenu:b,userSelectionActive:M,panOnScroll:T,panOnDrag:D,panOnScrollMode:k,panOnScrollSpeed:I,preventScrolling:z,zoomOnPinch:U,zoomOnScroll:Y,zoomOnDoubleClick:H,zoomActivationKeyPressed:Z,lib:K,onTransformChange:G}){M&&!d.isZoomingOrPanning&&g();const B=T&&!Z&&!M?GP({zoomPanValues:d,noWheelClassName:A,d3Selection:p,d3Zoom:f,panOnScrollMode:k,panOnScrollSpeed:I,zoomOnPinch:U,onPanZoomStart:a,onPanZoom:s,onPanZoomEnd:l}):YP({noWheelClassName:A,preventScrolling:z,d3ZoomHandler:y});if(p.on("wheel.zoom",B,{passive:!1}),!M){const ne=KP({zoomPanValues:d,onDraggingChange:c,onPanZoomStart:a});f.on("start",ne);const oe=XP({zoomPanValues:d,panOnDrag:D,onPaneContextMenu:!!b,onPanZoom:s,onTransformChange:G});f.on("zoom",oe);const X=qP({zoomPanValues:d,panOnDrag:D,panOnScroll:T,onPaneContextMenu:b,onPanZoomEnd:l,onDraggingChange:c});f.on("end",X)}const ee=QP({zoomActivationKeyPressed:Z,panOnDrag:D,zoomOnScroll:Y,panOnScroll:T,zoomOnDoubleClick:H,zoomOnPinch:U,userSelectionActive:M,noPanClassName:L,noWheelClassName:A,lib:K});f.filter(ee),H?p.on("dblclick.zoom",v):p.on("dblclick.zoom",null)}function g(){f.on("zoom",null)}async function w(A,L,b){const M=ff(A),T=f==null?void 0:f.constrain()(M,L,b);return T&&await _(T),new Promise(D=>D(T))}async function S(A,L){const b=ff(A);return await _(b,L),new Promise(M=>M(b))}function C(A){if(p){const L=ff(A),b=p.property("__zoom");(b.k!==A.zoom||b.x!==A.x||b.y!==A.y)&&(f==null||f.transform(p,L,null,{sync:!0}))}}function N(){const A=p?Pw(p.node()):{x:0,y:0,k:1};return{x:A.x,y:A.y,zoom:A.k}}function E(A,L){return p?new Promise(b=>{f==null||f.scaleTo(pf(p,L==null?void 0:L.duration,()=>b(!0)),A)}):Promise.resolve(!1)}function P(A,L){return p?new Promise(b=>{f==null||f.scaleBy(pf(p,L==null?void 0:L.duration,()=>b(!0)),A)}):Promise.resolve(!1)}function O(A){f==null||f.scaleExtent(A)}function j(A){f==null||f.translateExtent(A)}function $(A){const L=!mn(A)||A<0?0:A;f==null||f.clickDistance(L)}return{update:m,destroy:g,setViewport:S,setViewportConstrained:w,getViewport:N,scaleTo:E,scaleBy:P,setScaleExtent:O,setTranslateExtent:j,syncViewport:C,setClickDistance:$}}var ta;(function(e){e.Line="line",e.Handle="handle"})(ta||(ta={}));function e8({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:o,affectsY:i}){const s=e-t,a=n-r,l=[s>0?1:s<0?-1:0,a>0?1:a<0?-1:0];return s&&o&&(l[0]=l[0]*-1),a&&i&&(l[1]=l[1]*-1),l}function t8(e){const t=e.includes("right")||e.includes("left"),n=e.includes("bottom")||e.includes("top"),r=e.includes("left"),o=e.includes("top");return{isHorizontal:t,isVertical:n,affectsX:r,affectsY:o}}function Pr(e,t){return Math.max(0,t-e)}function Ir(e,t){return Math.max(0,e-t)}function Vl(e,t,n){return Math.max(0,t-e,e-n)}function pv(e,t){return e?!t:t}function n8(e,t,n,r,o,i,s,a){let{affectsX:l,affectsY:c}=t;const{isHorizontal:d,isVertical:u}=t,f=d&&u,{xSnapped:p,ySnapped:y}=n,{minWidth:v,maxWidth:_,minHeight:m,maxHeight:g}=r,{x:w,y:S,width:C,height:N,aspectRatio:E}=e;let P=Math.floor(d?p-e.pointerX:0),O=Math.floor(u?y-e.pointerY:0);const j=C+(l?-P:P),$=N+(c?-O:O),A=-i[0]*C,L=-i[1]*N;let b=Vl(j,v,_),M=Vl($,m,g);if(s){let k=0,I=0;l&&P<0?k=Pr(w+P+A,s[0][0]):!l&&P>0&&(k=Ir(w+j+A,s[1][0])),c&&O<0?I=Pr(S+O+L,s[0][1]):!c&&O>0&&(I=Ir(S+$+L,s[1][1])),b=Math.max(b,k),M=Math.max(M,I)}if(a){let k=0,I=0;l&&P>0?k=Ir(w+P,a[0][0]):!l&&P<0&&(k=Pr(w+j,a[1][0])),c&&O>0?I=Ir(S+O,a[0][1]):!c&&O<0&&(I=Pr(S+$,a[1][1])),b=Math.max(b,k),M=Math.max(M,I)}if(o){if(d){const k=Vl(j/E,m,g)*E;if(b=Math.max(b,k),s){let I=0;!l&&!c||l&&!c&&f?I=Ir(S+L+j/E,s[1][1])*E:I=Pr(S+L+(l?P:-P)/E,s[0][1])*E,b=Math.max(b,I)}if(a){let I=0;!l&&!c||l&&!c&&f?I=Pr(S+j/E,a[1][1])*E:I=Ir(S+(l?P:-P)/E,a[0][1])*E,b=Math.max(b,I)}}if(u){const k=Vl($*E,v,_)/E;if(M=Math.max(M,k),s){let I=0;!l&&!c||c&&!l&&f?I=Ir(w+$*E+A,s[1][0])/E:I=Pr(w+(c?O:-O)*E+A,s[0][0])/E,M=Math.max(M,I)}if(a){let I=0;!l&&!c||c&&!l&&f?I=Pr(w+$*E,a[1][0])/E:I=Ir(w+(c?O:-O)*E,a[0][0])/E,M=Math.max(M,I)}}}O=O+(O<0?M:-M),P=P+(P<0?b:-b),o&&(f?j>$*E?O=(pv(l,c)?-P:P)/E:P=(pv(l,c)?-O:O)*E:d?(O=P/E,c=l):(P=O*E,l=c));const T=l?w+P:w,D=c?S+O:S;return{width:C+(l?-P:P),height:N+(c?-O:O),x:i[0]*P*(l?-1:1)+T,y:i[1]*O*(c?-1:1)+D}}const i2={width:0,height:0,x:0,y:0},r8={...i2,pointerX:0,pointerY:0,aspectRatio:1};function o8(e){return[[0,0],[e.measured.width,e.measured.height]]}function i8(e,t,n){const r=t.position.x+e.position.x,o=t.position.y+e.position.y,i=e.measured.width??0,s=e.measured.height??0,a=n[0]*i,l=n[1]*s;return[[r-a,o-l],[r+i-a,o+s-l]]}function s8({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:o}){const i=Ht(e);function s({controlPosition:l,boundaries:c,keepAspectRatio:d,onResizeStart:u,onResize:f,onResizeEnd:p,shouldResize:y}){let v={...i2},_={...r8};const m=t8(l);let g,w=[],S,C,N;const E=mw().on("start",P=>{const{nodeLookup:O,transform:j,snapGrid:$,snapToGrid:A,nodeOrigin:L}=n();if(g=O.get(t),!g)return;const{xSnapped:b,ySnapped:M}=ea(P.sourceEvent,{transform:j,snapGrid:$,snapToGrid:A});v={width:g.measured.width??0,height:g.measured.height??0,x:g.position.x??0,y:g.position.y??0},_={...v,pointerX:b,pointerY:M,aspectRatio:v.width/v.height},S=void 0,g.parentId&&(g.extent==="parent"||g.expandParent)&&(S=O.get(g.parentId),C=S&&g.extent==="parent"?o8(S):void 0),w=[],N=void 0;for(const[T,D]of O)if(D.parentId===t&&(w.push({id:T,position:{...D.position},extent:D.extent}),D.extent==="parent"||D.expandParent)){const k=i8(D,g,D.origin??L);N?N=[[Math.min(k[0][0],N[0][0]),Math.min(k[0][1],N[0][1])],[Math.max(k[1][0],N[1][0]),Math.max(k[1][1],N[1][1])]]:N=k}u==null||u(P,{...v})}).on("drag",P=>{const{transform:O,snapGrid:j,snapToGrid:$,nodeOrigin:A}=n(),L=ea(P.sourceEvent,{transform:O,snapGrid:j,snapToGrid:$}),b=[];if(!g)return;const{x:M,y:T,width:D,height:k}=v,I={},z=g.origin??A,{width:U,height:Y,x:H,y:Z}=n8(_,m,L,c,d,z,C,N),K=U!==D,G=Y!==k,V=H!==M&&K,B=Z!==T&&G;if(!V&&!B&&!K&&!G)return;if((V||B||z[0]===1||z[1]===1)&&(I.x=V?H:v.x,I.y=B?Z:v.y,v.x=I.x,v.y=I.y,w.length>0)){const X=H-M,ae=Z-T;for(const me of w)me.position={x:me.position.x-X+z[0]*(U-D),y:me.position.y-ae+z[1]*(Y-k)},b.push(me)}if((K||G)&&(I.width=K?U:v.width,I.height=G?Y:v.height,v.width=I.width,v.height=I.height),S&&g.expandParent){const X=z[0]*(I.width??0);I.x&&I.x<X&&(v.x=X,_.x=_.x-(I.x-X));const ae=z[1]*(I.height??0);I.y&&I.y<ae&&(v.y=ae,_.y=_.y-(I.y-ae))}const ee=e8({width:v.width,prevWidth:D,height:v.height,prevHeight:k,affectsX:m.affectsX,affectsY:m.affectsY}),ne={...v,direction:ee};(y==null?void 0:y(P,ne))!==!1&&(f==null||f(P,ne),r(I,b))}).on("end",P=>{p==null||p(P,{...v}),o==null||o()});i.call(E)}function a(){i.on(".drag",null)}return{update:s,destroy:a}}var s2={exports:{}},a2={},l2={exports:{}},c2={};/**
+ * @license React
+ * use-sync-external-store-shim.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 es=x;function a8(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var l8=typeof Object.is=="function"?Object.is:a8,c8=es.useState,u8=es.useEffect,d8=es.useLayoutEffect,f8=es.useDebugValue;function p8(e,t){var n=t(),r=c8({inst:{value:n,getSnapshot:t}}),o=r[0].inst,i=r[1];return d8(function(){o.value=n,o.getSnapshot=t,hf(o)&&i({inst:o})},[e,n,t]),u8(function(){return hf(o)&&i({inst:o}),e(function(){hf(o)&&i({inst:o})})},[e]),f8(n),n}function hf(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!l8(e,n)}catch{return!0}}function h8(e,t){return t()}var m8=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?h8:p8;c2.useSyncExternalStore=es.useSyncExternalStore!==void 0?es.useSyncExternalStore:m8;l2.exports=c2;var g8=l2.exports;/**
+ * @license React
+ * use-sync-external-store-shim/with-selector.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 Xu=x,v8=g8;function y8(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var x8=typeof Object.is=="function"?Object.is:y8,w8=v8.useSyncExternalStore,_8=Xu.useRef,S8=Xu.useEffect,b8=Xu.useMemo,C8=Xu.useDebugValue;a2.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var i=_8(null);if(i.current===null){var s={hasValue:!1,value:null};i.current=s}else s=i.current;i=b8(function(){function l(p){if(!c){if(c=!0,d=p,p=r(p),o!==void 0&&s.hasValue){var y=s.value;if(o(y,p))return u=y}return u=p}if(y=u,x8(d,p))return y;var v=r(p);return o!==void 0&&o(y,v)?y:(d=p,u=v)}var c=!1,d,u,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,o]);var a=w8(e,i[0],i[1]);return S8(function(){s.hasValue=!0,s.value=a},[a]),C8(a),a};s2.exports=a2;var E8=s2.exports;const k8=Sh(E8),N8={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},hv=e=>{let t;const n=new Set,r=(d,u)=>{const f=typeof d=="function"?d(t):d;if(!Object.is(f,t)){const p=t;t=u??(typeof f!="object"||f===null)?f:Object.assign({},t,f),n.forEach(y=>y(t,p))}},o=()=>t,l={setState:r,getState:o,getInitialState:()=>c,subscribe:d=>(n.add(d),()=>n.delete(d)),destroy:()=>{(N8?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},c=t=e(r,o,l);return l},T8=e=>e?hv(e):hv,{useDebugValue:P8}=de,{useSyncExternalStoreWithSelector:I8}=k8,R8=e=>e;function u2(e,t=R8,n){const r=I8(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return P8(r),r}const mv=(e,t)=>{const n=T8(e),r=(o,i=t)=>u2(n,o,i);return Object.assign(r,n),r},A8=(e,t)=>e?mv(e,t):mv;function Ze(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,o]of e)if(!Object.is(o,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}const qu=x.createContext(null),M8=qu.Provider,d2=Cr.error001();function Ne(e,t){const n=x.useContext(qu);if(n===null)throw new Error(d2);return u2(n,e,t)}function Fe(){const e=x.useContext(qu);if(e===null)throw new Error(d2);return x.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const gv={display:"none"},j8={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},f2="react-flow__node-desc",p2="react-flow__edge-desc",O8="react-flow__aria-live",D8=e=>e.ariaLiveMessage;function L8({rfId:e}){const t=Ne(D8);return h.jsx("div",{id:`${O8}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:j8,children:t})}function z8({rfId:e,disableKeyboardA11y:t}){return h.jsxs(h.Fragment,{children:[h.jsxs("div",{id:`${f2}-${e}`,style:gv,children:["Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "]}),h.jsx("div",{id:`${p2}-${e}`,style:gv,children:"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."}),!t&&h.jsx(L8,{rfId:e})]})}const $8=e=>e.userSelectionActive?"none":"all";function Qu({position:e="top-left",children:t,className:n,style:r,...o}){const i=Ne($8),s=`${e}`.split("-");return h.jsx("div",{className:Je(["react-flow__panel",n,...s]),style:{...r,pointerEvents:i},...o,children:t})}function F8({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:h.jsx(Qu,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:h.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const V8=e=>{const t=[],n=[];for(const[,r]of e.nodeLookup)r.selected&&t.push(r.internals.userNode);for(const[,r]of e.edgeLookup)r.selected&&n.push(r);return{selectedNodes:t,selectedEdges:n}},Hl=e=>e.id;function H8(e,t){return Ze(e.selectedNodes.map(Hl),t.selectedNodes.map(Hl))&&Ze(e.selectedEdges.map(Hl),t.selectedEdges.map(Hl))}function B8({onSelectionChange:e}){const t=Fe(),{selectedNodes:n,selectedEdges:r}=Ne(V8,H8);return x.useEffect(()=>{const o={nodes:n,edges:r};e==null||e(o),t.getState().onSelectionChangeHandlers.forEach(i=>i(o))},[n,r,e]),null}const U8=e=>!!e.onSelectionChangeHandlers;function W8({onSelectionChange:e}){const t=Ne(U8);return e||t?h.jsx(B8,{onSelectionChange:e}):null}const h2=[0,0],Z8={x:0,y:0,zoom:1},G8=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","onBeforeDelete","debug","autoPanSpeed","paneClickDistance"],vv=[...G8,"rfId"],Y8=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setPaneClickDistance:e.setPaneClickDistance}),yv={translateExtent:Na,nodeOrigin:h2,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1",paneClickDistance:0};function K8(e){const{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:o,setTranslateExtent:i,setNodeExtent:s,reset:a,setDefaultNodesAndEdges:l,setPaneClickDistance:c}=Ne(Y8,Ze),d=Fe();x.useEffect(()=>(l(e.defaultNodes,e.defaultEdges),()=>{u.current=yv,a()}),[]);const u=x.useRef(yv);return x.useEffect(()=>{for(const f of vv){const p=e[f],y=u.current[f];p!==y&&(typeof e[f]>"u"||(f==="nodes"?t(p):f==="edges"?n(p):f==="minZoom"?r(p):f==="maxZoom"?o(p):f==="translateExtent"?i(p):f==="nodeExtent"?s(p):f==="paneClickDistance"?c(p):f==="fitView"?d.setState({fitViewOnInit:p}):f==="fitViewOptions"?d.setState({fitViewOnInitOptions:p}):d.setState({[f]:p})))}u.current=e},vv.map(f=>e[f])),null}function xv(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function X8(e){var r;const[t,n]=x.useState(e==="system"?null:e);return x.useEffect(()=>{if(e!=="system"){n(e);return}const o=xv(),i=()=>n(o!=null&&o.matches?"dark":"light");return i(),o==null||o.addEventListener("change",i),()=>{o==null||o.removeEventListener("change",i)}},[e]),t!==null?t:(r=xv())!=null&&r.matches?"dark":"light"}const wv=typeof document<"u"?document:null;function Ra(e=null,t={target:wv,actInsideInputWithModifier:!0}){const[n,r]=x.useState(!1),o=x.useRef(!1),i=x.useRef(new Set([])),[s,a]=x.useMemo(()=>{if(e!==null){const c=(Array.isArray(e)?e:[e]).filter(u=>typeof u=="string").map(u=>u.split("+")),d=c.reduce((u,f)=>u.concat(...f),[]);return[c,d]}return[[],[]]},[e]);return x.useEffect(()=>{const l=(t==null?void 0:t.target)||wv;if(e!==null){const c=f=>{if(o.current=f.ctrlKey||f.metaKey||f.shiftKey,(!o.current||o.current&&!t.actInsideInputWithModifier)&&Bp(f))return!1;const y=Sv(f.code,a);i.current.add(f[y]),_v(s,i.current,!1)&&(f.preventDefault(),r(!0))},d=f=>{if((!o.current||o.current&&!t.actInsideInputWithModifier)&&Bp(f))return!1;const y=Sv(f.code,a);_v(s,i.current,!0)?(r(!1),i.current.clear()):i.current.delete(f[y]),f.key==="Meta"&&i.current.clear(),o.current=!1},u=()=>{i.current.clear(),r(!1)};return l==null||l.addEventListener("keydown",c),l==null||l.addEventListener("keyup",d),window.addEventListener("blur",u),window.addEventListener("contextmenu",u),()=>{l==null||l.removeEventListener("keydown",c),l==null||l.removeEventListener("keyup",d),window.removeEventListener("blur",u),window.removeEventListener("contextmenu",u)}}},[e,r]),n}function _v(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(o=>t.has(o)))}function Sv(e,t){return t.includes(e)?"code":"key"}const q8=()=>{const e=Fe();return x.useMemo(()=>({zoomIn:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomOut:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomTo:(t,n)=>{const{panZoom:r}=e.getState();return r?r.scaleTo(t,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{const{transform:[r,o,i],panZoom:s}=e.getState();return s?(await s.setViewport({x:t.x??r,y:t.y??o,zoom:t.zoom??i},{duration:n==null?void 0:n.duration}),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},fitView:t=>{const{nodeLookup:n,minZoom:r,maxZoom:o,panZoom:i,domNode:s}=e.getState();if(!i||!s)return Promise.resolve(!1);const a=Fp(n,t),{width:l,height:c}=Yu(s);return Vp({nodes:a,width:l,height:c,minZoom:r,maxZoom:o,panZoom:i},t)},setCenter:async(t,n,r)=>{const{width:o,height:i,maxZoom:s,panZoom:a}=e.getState(),l=typeof(r==null?void 0:r.zoom)<"u"?r.zoom:s,c=o/2-t*l,d=i/2-n*l;return a?(await a.setViewport({x:c,y:d,zoom:l},{duration:r==null?void 0:r.duration}),Promise.resolve(!0)):Promise.resolve(!1)},fitBounds:async(t,n)=>{const{width:r,height:o,minZoom:i,maxZoom:s,panZoom:a}=e.getState(),l=Em(t,r,o,i,s,(n==null?void 0:n.padding)??.1);return a?(await a.setViewport(l,{duration:n==null?void 0:n.duration}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(t,n={snapToGrid:!0})=>{const{transform:r,snapGrid:o,domNode:i}=e.getState();if(!i)return t;const{x:s,y:a}=i.getBoundingClientRect(),l={x:t.x-s,y:t.y-a};return sl(l,r,n.snapToGrid,o)},flowToScreenPosition:t=>{const{transform:n,domNode:r}=e.getState();if(!r)return t;const{x:o,y:i}=r.getBoundingClientRect(),s=Fw(t,n);return{x:s.x+o,y:s.y+i}}}),[])};function m2(e,t){const n=[],r=new Map,o=[];for(const i of e)if(i.type==="add"){o.push(i);continue}else if(i.type==="remove"||i.type==="replace")r.set(i.id,[i]);else{const s=r.get(i.id);s?s.push(i):r.set(i.id,[i])}for(const i of t){const s=r.get(i.id);if(!s){n.push(i);continue}if(s[0].type==="remove")continue;if(s[0].type==="replace"){n.push({...s[0].item});continue}const a={...i};for(const l of s)Q8(l,a);n.push(a)}return o.length&&o.forEach(i=>{i.index!==void 0?n.splice(i.index,0,{...i.item}):n.push({...i.item})}),n}function Q8(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured??(t.measured={}),t.measured.width=e.dimensions.width,t.measured.height=e.dimensions.height,e.setAttributes&&(t.width=e.dimensions.width,t.height=e.dimensions.height)),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function g2(e,t){return m2(e,t)}function Yp(e,t){return m2(e,t)}function yo(e,t){return{id:e,type:"select",selected:t}}function Si(e,t=new Set,n=!1){const r=[];for(const[o,i]of e){const s=t.has(o);!(i.selected===void 0&&!s)&&i.selected!==s&&(n&&(i.selected=s),r.push(yo(i.id,s)))}return r}function bv({items:e=[],lookup:t}){var o;const n=[],r=new Map(e.map(i=>[i.id,i]));for(const[i,s]of e.entries()){const a=t.get(s.id),l=((o=a==null?void 0:a.internals)==null?void 0:o.userNode)??a;l!==void 0&&l!==s&&n.push({id:s.id,item:s,type:"replace"}),l===void 0&&n.push({item:s,type:"add",index:i})}for(const[i]of t)r.get(i)===void 0&&n.push({id:i,type:"remove"});return n}function Cv(e){return{id:e.id,type:"remove"}}const Ev=e=>vP(e),J8=e=>jw(e);function v2(e){return x.forwardRef(e)}const eI=typeof window<"u"?x.useLayoutEffect:x.useEffect;function kv(e){const[t,n]=x.useState(!1),[r]=x.useState(()=>tI(()=>n(!0)));return eI(()=>{if(!t){r.reset();return}const o=r.get();o.length&&(e(o),r.reset()),n(!1)},[t]),r}function tI(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const y2=x.createContext(null);function nI({children:e}){const t=Fe(),n=x.useCallback(a=>{const{nodes:l=[],setNodes:c,hasDefaultNodes:d,onNodesChange:u,nodeLookup:f}=t.getState();let p=l;for(const y of a)p=typeof y=="function"?y(p):y;d?c(p):u&&u(bv({items:p,lookup:f}))},[]),r=kv(n),o=x.useCallback(a=>{const{edges:l=[],setEdges:c,hasDefaultEdges:d,onEdgesChange:u,edgeLookup:f}=t.getState();let p=l;for(const y of a)p=typeof y=="function"?y(p):y;d?c(p):u&&u(bv({items:p,lookup:f}))},[]),i=kv(o),s=x.useMemo(()=>({nodeQueue:r,edgeQueue:i}),[]);return h.jsx(y2.Provider,{value:s,children:e})}function rI(){const e=x.useContext(y2);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const oI=e=>!!e.panZoom;function Yo(){const e=q8(),t=Fe(),n=rI(),r=Ne(oI),o=x.useMemo(()=>{const i=u=>t.getState().nodeLookup.get(u),s=u=>{n.nodeQueue.push(u)},a=u=>{n.edgeQueue.push(u)},l=u=>{var m,g;const{nodeLookup:f,nodeOrigin:p}=t.getState(),y=Ev(u)?u:f.get(u.id),v=y.parentId?Hw(y.position,y.measured,y.parentId,f,p):y.position,_={id:y.id,position:v,width:((m=y.measured)==null?void 0:m.width)??y.width,height:((g=y.measured)==null?void 0:g.height)??y.height,data:y.data};return Qi(_)},c=(u,f,p={replace:!1})=>{s(y=>y.map(v=>{if(v.id===u){const _=typeof f=="function"?f(v):f;return p.replace&&Ev(_)?_:{...v,..._}}return v}))},d=(u,f,p={replace:!1})=>{a(y=>y.map(v=>{if(v.id===u){const _=typeof f=="function"?f(v):f;return p.replace&&J8(_)?_:{...v,..._}}return v}))};return{getNodes:()=>t.getState().nodes.map(u=>({...u})),getNode:u=>{var f;return(f=i(u))==null?void 0:f.internals.userNode},getInternalNode:i,getEdges:()=>{const{edges:u=[]}=t.getState();return u.map(f=>({...f}))},getEdge:u=>t.getState().edgeLookup.get(u),setNodes:s,setEdges:a,addNodes:u=>{const f=Array.isArray(u)?u:[u];n.nodeQueue.push(p=>[...p,...f])},addEdges:u=>{const f=Array.isArray(u)?u:[u];n.edgeQueue.push(p=>[...p,...f])},toObject:()=>{const{nodes:u=[],edges:f=[],transform:p}=t.getState(),[y,v,_]=p;return{nodes:u.map(m=>({...m})),edges:f.map(m=>({...m})),viewport:{x:y,y:v,zoom:_}}},deleteElements:async({nodes:u=[],edges:f=[]})=>{const{nodes:p,edges:y,onNodesDelete:v,onEdgesDelete:_,triggerNodeChanges:m,triggerEdgeChanges:g,onDelete:w,onBeforeDelete:S}=t.getState(),{nodes:C,edges:N}=await wP({nodesToRemove:u,edgesToRemove:f,nodes:p,edges:y,onBeforeDelete:S}),E=N.length>0,P=C.length>0;if(E){const O=N.map(Cv);_==null||_(N),g(O)}if(P){const O=C.map(Cv);v==null||v(C),m(O)}return(P||E)&&(w==null||w({nodes:C,edges:N})),{deletedNodes:C,deletedEdges:N}},getIntersectingNodes:(u,f=!0,p)=>{const y=ov(u),v=y?u:l(u),_=p!==void 0;return v?(p||t.getState().nodes).filter(m=>{const g=t.getState().nodeLookup.get(m.id);if(g&&!y&&(m.id===u.id||!g.internals.positionAbsolute))return!1;const w=Qi(_?m:g),S=Pa(w,v);return f&&S>0||S>=v.width*v.height}):[]},isNodeIntersecting:(u,f,p=!0)=>{const v=ov(u)?u:l(u);if(!v)return!1;const _=Pa(v,f);return p&&_>0||_>=v.width*v.height},updateNode:c,updateNodeData:(u,f,p={replace:!1})=>{c(u,y=>{const v=typeof f=="function"?f(y):f;return p.replace?{...y,data:v}:{...y,data:{...y.data,...v}}},p)},updateEdge:d,updateEdgeData:(u,f,p={replace:!1})=>{d(u,y=>{const v=typeof f=="function"?f(y):f;return p.replace?{...y,data:v}:{...y,data:{...y.data,...v}}},p)},getNodesBounds:u=>{const{nodeLookup:f,nodeOrigin:p}=t.getState();return yP(u,{nodeLookup:f,nodeOrigin:p})},getHandleConnections:({type:u,id:f,nodeId:p})=>{var y;return Array.from(((y=t.getState().connectionLookup.get(`${p}-${u}-${f??null}`))==null?void 0:y.values())??[])}}},[]);return x.useMemo(()=>({...o,...e,viewportInitialized:r}),[r])}const Nv=e=>e.selected,iI={actInsideInputWithModifier:!1},sI=typeof window<"u"?window:void 0;function aI({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=Fe(),{deleteElements:r}=Yo(),o=Ra(e,iI),i=Ra(t,{target:sI});x.useEffect(()=>{if(o){const{edges:s,nodes:a}=n.getState();r({nodes:a.filter(Nv),edges:s.filter(Nv)}),n.setState({nodesSelectionActive:!1})}},[o]),x.useEffect(()=>{n.setState({multiSelectionActive:i})},[i])}function lI(e){const t=Fe();x.useEffect(()=>{const n=()=>{var o,i;if(!e.current)return!1;const r=Yu(e.current);(r.height===0||r.width===0)&&((i=(o=t.getState()).onError)==null||i.call(o,"004",Cr.error004())),t.setState({width:r.width||500,height:r.height||500})};if(e.current){n(),window.addEventListener("resize",n);const r=new ResizeObserver(()=>n());return r.observe(e.current),()=>{window.removeEventListener("resize",n),r&&e.current&&r.unobserve(e.current)}}},[])}const Ju={position:"absolute",width:"100%",height:"100%",top:0,left:0},cI=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib});function uI({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panOnScrollSpeed:o=.5,panOnScrollMode:i=To.Free,zoomOnDoubleClick:s=!0,panOnDrag:a=!0,defaultViewport:l,translateExtent:c,minZoom:d,maxZoom:u,zoomActivationKeyCode:f,preventScrolling:p=!0,children:y,noWheelClassName:v,noPanClassName:_,onViewportChange:m,isControlledViewport:g,paneClickDistance:w}){const S=Fe(),C=x.useRef(null),{userSelectionActive:N,lib:E}=Ne(cI,Ze),P=Ra(f),O=x.useRef();lI(C);const j=x.useCallback($=>{m==null||m({x:$[0],y:$[1],zoom:$[2]}),g||S.setState({transform:$})},[m,g]);return x.useEffect(()=>{if(C.current){O.current=JP({domNode:C.current,minZoom:d,maxZoom:u,translateExtent:c,viewport:l,paneClickDistance:w,onDraggingChange:b=>S.setState({paneDragging:b}),onPanZoomStart:(b,M)=>{const{onViewportChangeStart:T,onMoveStart:D}=S.getState();D==null||D(b,M),T==null||T(M)},onPanZoom:(b,M)=>{const{onViewportChange:T,onMove:D}=S.getState();D==null||D(b,M),T==null||T(M)},onPanZoomEnd:(b,M)=>{const{onViewportChangeEnd:T,onMoveEnd:D}=S.getState();D==null||D(b,M),T==null||T(M)}});const{x:$,y:A,zoom:L}=O.current.getViewport();return S.setState({panZoom:O.current,transform:[$,A,L],domNode:C.current.closest(".react-flow")}),()=>{var b;(b=O.current)==null||b.destroy()}}},[]),x.useEffect(()=>{var $;($=O.current)==null||$.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panOnScrollSpeed:o,panOnScrollMode:i,zoomOnDoubleClick:s,panOnDrag:a,zoomActivationKeyPressed:P,preventScrolling:p,noPanClassName:_,userSelectionActive:N,noWheelClassName:v,lib:E,onTransformChange:j})},[e,t,n,r,o,i,s,a,P,p,_,N,v,E,j]),h.jsx("div",{className:"react-flow__renderer",ref:C,style:Ju,children:y})}const dI=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function fI(){const{userSelectionActive:e,userSelectionRect:t}=Ne(dI,Ze);return e&&t?h.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const mf=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},pI=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging});function hI({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Ta.Full,panOnDrag:r,selectionOnDrag:o,onSelectionStart:i,onSelectionEnd:s,onPaneClick:a,onPaneContextMenu:l,onPaneScroll:c,onPaneMouseEnter:d,onPaneMouseMove:u,onPaneMouseLeave:f,children:p}){const y=x.useRef(null),v=Fe(),_=x.useRef(0),m=x.useRef(0),g=x.useRef(),w=x.useRef(new Map),{userSelectionActive:S,elementsSelectable:C,dragging:N}=Ne(pI,Ze),E=C&&(e||S),P=x.useRef(!1),O=x.useRef(!1),j=()=>{v.setState({userSelectionActive:!1,userSelectionRect:null}),_.current=0,m.current=0},$=k=>{if(P.current){P.current=!1;return}a==null||a(k),v.getState().resetSelectedElements(),v.setState({nodesSelectionActive:!1})},A=k=>{if(Array.isArray(r)&&(r!=null&&r.includes(2))){k.preventDefault();return}l==null||l(k)},L=c?k=>c(k):void 0,b=k=>{var Z,K,G,V;const{resetSelectedElements:I,domNode:z,edgeLookup:U}=v.getState();if(g.current=z==null?void 0:z.getBoundingClientRect(),!C||!e||k.button!==0||k.target!==y.current||!g.current)return;(K=(Z=k.target)==null?void 0:Z.setPointerCapture)==null||K.call(Z,k.pointerId),O.current=!0,P.current=!1,w.current=new Map;for(const[B,ee]of U)w.current.set(ee.source,((G=w.current.get(ee.source))==null?void 0:G.add(B))||new Set([B])),w.current.set(ee.target,((V=w.current.get(ee.target))==null?void 0:V.add(B))||new Set([B]));const{x:Y,y:H}=lr(k.nativeEvent,g.current);I(),v.setState({userSelectionRect:{width:0,height:0,startX:Y,startY:H,x:Y,y:H}}),i==null||i(k)},M=k=>{const{userSelectionRect:I,edgeLookup:z,transform:U,nodeLookup:Y,triggerNodeChanges:H,triggerEdgeChanges:Z}=v.getState();if(!g.current||!I)return;P.current=!0;const{x:K,y:G}=lr(k.nativeEvent,g.current),{startX:V,startY:B}=I,ee={startX:V,startY:B,x:K<V?K:V,y:G<B?G:B,width:Math.abs(K-V),height:Math.abs(G-B)},ne=Ow(Y,ee,U,n===Ta.Partial,!0),oe=new Set,X=new Set;for(const ae of ne){X.add(ae.id);const me=w.current.get(ae.id);if(me)for(const Le of me)oe.add(Le)}if(_.current!==X.size){_.current=X.size;const ae=Si(Y,X,!0);H(ae)}if(m.current!==oe.size){m.current=oe.size;const ae=Si(z,oe);Z(ae)}v.setState({userSelectionRect:ee,userSelectionActive:!0,nodesSelectionActive:!1})},T=k=>{var z,U;if(k.button!==0||!O.current)return;(U=(z=k.target)==null?void 0:z.releasePointerCapture)==null||U.call(z,k.pointerId);const{userSelectionRect:I}=v.getState();!S&&I&&k.target===y.current&&($==null||$(k)),_.current>0&&v.setState({nodesSelectionActive:!0}),j(),s==null||s(k),(t||o)&&(P.current=!1),O.current=!1},D=r===!0||Array.isArray(r)&&r.includes(0);return h.jsxs("div",{className:Je(["react-flow__pane",{draggable:D,dragging:N,selection:e}]),onClick:E?void 0:mf($,y),onContextMenu:mf(A,y),onWheel:mf(L,y),onPointerEnter:E?void 0:d,onPointerDown:E?b:u,onPointerMove:E?M:u,onPointerUp:E?T:void 0,onPointerLeave:f,ref:y,style:Ju,children:[p,h.jsx(fI,{})]})}function Kp({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:o,unselectNodesAndEdges:i,multiSelectionActive:s,nodeLookup:a,onError:l}=t.getState(),c=a.get(e);if(!c){l==null||l("012",Cr.error012(e));return}t.setState({nodesSelectionActive:!1}),c.selected?(n||c.selected&&s)&&(i({nodes:[c],edges:[]}),requestAnimationFrame(()=>{var d;return(d=r==null?void 0:r.current)==null?void 0:d.blur()})):o([e])}function x2({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:o,isSelectable:i,nodeClickDistance:s}){const a=Fe(),[l,c]=x.useState(!1),d=x.useRef();return x.useEffect(()=>{d.current=$P({getStoreItems:()=>a.getState(),onNodeMouseDown:u=>{Kp({id:u,store:a,nodeRef:e})},onDragStart:()=>{c(!0)},onDragStop:()=>{c(!1)}})},[]),x.useEffect(()=>{var u,f;if(t)(u=d.current)==null||u.destroy();else if(e.current)return(f=d.current)==null||f.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:i,nodeId:o,nodeClickDistance:s}),()=>{var p;(p=d.current)==null||p.destroy()}},[n,r,t,i,e,o]),l}const mI=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function w2(){const e=Fe();return x.useCallback(n=>{const{nodeExtent:r,snapToGrid:o,snapGrid:i,nodesDraggable:s,onError:a,updateNodePositions:l,nodeLookup:c,nodeOrigin:d}=e.getState(),u=new Map,f=mI(s),p=o?i[0]:5,y=o?i[1]:5,v=n.direction.x*p*n.factor,_=n.direction.y*y*n.factor;for(const[,m]of c){if(!f(m))continue;let g={x:m.internals.positionAbsolute.x+v,y:m.internals.positionAbsolute.y+_};o&&(g=Gu(g,i));const{position:w,positionAbsolute:S}=Dw({nodeId:m.id,nextPosition:g,nodeLookup:c,nodeExtent:r,nodeOrigin:d,onError:a});m.position=w,m.internals.positionAbsolute=S,u.set(m.id,m)}l(u)},[])}const Im=x.createContext(null),gI=Im.Provider;Im.Consumer;const _2=()=>x.useContext(Im),vI=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),yI=(e,t,n)=>r=>{const{connectionClickStartHandle:o,connectionMode:i,connection:s}=r,{fromHandle:a,toHandle:l,isValid:c}=s,d=(l==null?void 0:l.nodeId)===e&&(l==null?void 0:l.id)===t&&(l==null?void 0:l.type)===n;return{connectingFrom:(a==null?void 0:a.nodeId)===e&&(a==null?void 0:a.id)===t&&(a==null?void 0:a.type)===n,connectingTo:d,clickConnecting:(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.id)===t&&(o==null?void 0:o.type)===n,isPossibleEndHandle:i===Xi.Strict?(a==null?void 0:a.type)!==n:e!==(a==null?void 0:a.nodeId)||t!==(a==null?void 0:a.id),connectionInProcess:!!a,valid:d&&c}};function xI({type:e="source",position:t=ue.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:o=!0,isConnectableEnd:i=!0,id:s,onConnect:a,children:l,className:c,onMouseDown:d,onTouchStart:u,...f},p){var b,M;const y=s||null,v=e==="target",_=Fe(),m=_2(),{connectOnClick:g,noPanClassName:w,rfId:S}=Ne(vI,Ze),{connectingFrom:C,connectingTo:N,clickConnecting:E,isPossibleEndHandle:P,connectionInProcess:O,valid:j}=Ne(yI(m,y,e),Ze);m||(M=(b=_.getState()).onError)==null||M.call(b,"010",Cr.error010());const $=T=>{const{defaultEdgeOptions:D,onConnect:k,hasDefaultEdges:I}=_.getState(),z={...D,...T};if(I){const{edges:U,setEdges:Y}=_.getState();Y(Yw(z,U))}k==null||k(z),a==null||a(z)},A=T=>{if(!m)return;const D=Uw(T.nativeEvent);if(o&&(D&&T.button===0||!D)){const k=_.getState();Gp.onPointerDown(T.nativeEvent,{autoPanOnConnect:k.autoPanOnConnect,connectionMode:k.connectionMode,connectionRadius:k.connectionRadius,domNode:k.domNode,nodeLookup:k.nodeLookup,lib:k.lib,isTarget:v,handleId:y,nodeId:m,flowId:k.rfId,panBy:k.panBy,cancelConnection:k.cancelConnection,onConnectStart:k.onConnectStart,onConnectEnd:k.onConnectEnd,updateConnection:k.updateConnection,onConnect:$,isValidConnection:n||k.isValidConnection,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,autoPanSpeed:k.autoPanSpeed})}D?d==null||d(T):u==null||u(T)},L=T=>{const{onClickConnectStart:D,onClickConnectEnd:k,connectionClickStartHandle:I,connectionMode:z,isValidConnection:U,lib:Y,rfId:H,nodeLookup:Z,connection:K}=_.getState();if(!m||!I&&!o)return;if(!I){D==null||D(T.nativeEvent,{nodeId:m,handleId:y,handleType:e}),_.setState({connectionClickStartHandle:{nodeId:m,type:e,id:y}});return}const G=Bw(T.target),V=n||U,{connection:B,isValid:ee}=Gp.isValid(T.nativeEvent,{handle:{nodeId:m,id:y,type:e},connectionMode:z,fromNodeId:I.nodeId,fromHandleId:I.id||null,fromType:I.type,isValidConnection:V,flowId:H,doc:G,lib:Y,nodeLookup:Z});ee&&B&&$(B);const ne=structuredClone(K);delete ne.inProgress,ne.toPosition=ne.toHandle?ne.toHandle.position:null,k==null||k(T,ne),_.setState({connectionClickStartHandle:null})};return h.jsx("div",{"data-handleid":y,"data-nodeid":m,"data-handlepos":t,"data-id":`${S}-${m}-${y}-${e}`,className:Je(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",w,c,{source:!v,target:v,connectable:r,connectablestart:o,connectableend:i,clickconnecting:E,connectingfrom:C,connectingto:N,valid:j,connectionindicator:r&&(!O||P)&&(O?i:o)}]),onMouseDown:A,onTouchStart:A,onClick:g?L:void 0,ref:p,...f,children:l})}const Wt=x.memo(v2(xI));function wI({data:e,isConnectable:t,sourcePosition:n=ue.Bottom}){return h.jsxs(h.Fragment,{children:[e==null?void 0:e.label,h.jsx(Wt,{type:"source",position:n,isConnectable:t})]})}function _I({data:e,isConnectable:t,targetPosition:n=ue.Top,sourcePosition:r=ue.Bottom}){return h.jsxs(h.Fragment,{children:[h.jsx(Wt,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,h.jsx(Wt,{type:"source",position:r,isConnectable:t})]})}function SI(){return null}function bI({data:e,isConnectable:t,targetPosition:n=ue.Top}){return h.jsxs(h.Fragment,{children:[h.jsx(Wt,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label]})}const tu={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Tv={input:wI,default:_I,output:bI,group:SI};function CI(e){var t,n,r,o;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((n=e.style)==null?void 0:n.height)}:{width:e.width??((r=e.style)==null?void 0:r.width),height:e.height??((o=e.style)==null?void 0:o.height)}}const EI=e=>{const{width:t,height:n,x:r,y:o}=il(e.nodeLookup,{filter:i=>!!i.selected});return{width:mn(t)?t:null,height:mn(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${o}px)`}};function kI({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Fe(),{width:o,height:i,transformString:s,userSelectionActive:a}=Ne(EI,Ze),l=w2(),c=x.useRef(null);if(x.useEffect(()=>{var f;n||(f=c.current)==null||f.focus({preventScroll:!0})},[n]),x2({nodeRef:c}),a||!o||!i)return null;const d=e?f=>{const p=r.getState().nodes.filter(y=>y.selected);e(f,p)}:void 0,u=f=>{Object.prototype.hasOwnProperty.call(tu,f.key)&&l({direction:tu[f.key],factor:f.shiftKey?4:1})};return h.jsx("div",{className:Je(["react-flow__nodesselection","react-flow__container",t]),style:{transform:s},children:h.jsx("div",{ref:c,className:"react-flow__nodesselection-rect",onContextMenu:d,tabIndex:n?void 0:-1,onKeyDown:n?void 0:u,style:{width:o,height:i}})})}const Pv=typeof window<"u"?window:void 0,NI=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function S2({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:o,onPaneContextMenu:i,onPaneScroll:s,paneClickDistance:a,deleteKeyCode:l,selectionKeyCode:c,selectionOnDrag:d,selectionMode:u,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:y,panActivationKeyCode:v,zoomActivationKeyCode:_,elementsSelectable:m,zoomOnScroll:g,zoomOnPinch:w,panOnScroll:S,panOnScrollSpeed:C,panOnScrollMode:N,zoomOnDoubleClick:E,panOnDrag:P,defaultViewport:O,translateExtent:j,minZoom:$,maxZoom:A,preventScrolling:L,onSelectionContextMenu:b,noWheelClassName:M,noPanClassName:T,disableKeyboardA11y:D,onViewportChange:k,isControlledViewport:I}){const{nodesSelectionActive:z,userSelectionActive:U}=Ne(NI),Y=Ra(c,{target:Pv}),H=Ra(v,{target:Pv}),Z=H||P,K=H||S,G=d&&Z!==!0,V=Y||U||G;return aI({deleteKeyCode:l,multiSelectionKeyCode:y}),h.jsx(uI,{onPaneContextMenu:i,elementsSelectable:m,zoomOnScroll:g,zoomOnPinch:w,panOnScroll:K,panOnScrollSpeed:C,panOnScrollMode:N,zoomOnDoubleClick:E,panOnDrag:!Y&&Z,defaultViewport:O,translateExtent:j,minZoom:$,maxZoom:A,zoomActivationKeyCode:_,preventScrolling:L,noWheelClassName:M,noPanClassName:T,onViewportChange:k,isControlledViewport:I,paneClickDistance:a,children:h.jsxs(hI,{onSelectionStart:f,onSelectionEnd:p,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:o,onPaneContextMenu:i,onPaneScroll:s,panOnDrag:Z,isSelecting:!!V,selectionMode:u,selectionKeyPressed:Y,selectionOnDrag:G,children:[e,z&&h.jsx(kI,{onSelectionContextMenu:b,noPanClassName:T,disableKeyboardA11y:D})]})})}S2.displayName="FlowRenderer";const TI=x.memo(S2),PI=e=>t=>e?Ow(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(n=>n.id):Array.from(t.nodeLookup.keys());function II(e){return Ne(x.useCallback(PI(e),[e]),Ze)}const RI=e=>e.updateNodeInternals;function AI(){const e=Ne(RI),[t]=x.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const r=new Map;n.forEach(o=>{const i=o.target.getAttribute("data-id");r.set(i,{id:i,nodeElement:o.target,force:!0})}),e(r)}));return x.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function MI({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){const o=Fe(),i=x.useRef(null),s=x.useRef(null),a=x.useRef(e.sourcePosition),l=x.useRef(e.targetPosition),c=x.useRef(t),d=n&&!!e.internals.handleBounds;return x.useEffect(()=>{i.current&&!e.hidden&&(!d||s.current!==i.current)&&(s.current&&(r==null||r.unobserve(s.current)),r==null||r.observe(i.current),s.current=i.current)},[d,e.hidden]),x.useEffect(()=>()=>{s.current&&(r==null||r.unobserve(s.current),s.current=null)},[]),x.useEffect(()=>{if(i.current){const u=c.current!==t,f=a.current!==e.sourcePosition,p=l.current!==e.targetPosition;(u||f||p)&&(c.current=t,a.current=e.sourcePosition,l.current=e.targetPosition,o.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:i.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),i}function jI({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onContextMenu:i,onDoubleClick:s,nodesDraggable:a,elementsSelectable:l,nodesConnectable:c,nodesFocusable:d,resizeObserver:u,noDragClassName:f,noPanClassName:p,disableKeyboardA11y:y,rfId:v,nodeTypes:_,nodeExtent:m,nodeClickDistance:g,onError:w}){const{node:S,internals:C,isParent:N}=Ne(B=>{const ee=B.nodeLookup.get(e),ne=B.parentLookup.has(e);return{node:ee,internals:ee.internals,isParent:ne}},Ze);let E=S.type||"default",P=(_==null?void 0:_[E])||Tv[E];P===void 0&&(w==null||w("003",Cr.error003(E)),E="default",P=Tv.default);const O=!!(S.draggable||a&&typeof S.draggable>"u"),j=!!(S.selectable||l&&typeof S.selectable>"u"),$=!!(S.connectable||c&&typeof S.connectable>"u"),A=!!(S.focusable||d&&typeof S.focusable>"u"),L=Fe(),b=Vw(S),M=MI({node:S,nodeType:E,hasDimensions:b,resizeObserver:u}),T=x2({nodeRef:M,disabled:S.hidden||!O,noDragClassName:f,handleSelector:S.dragHandle,nodeId:e,isSelectable:j,nodeClickDistance:g}),D=w2();if(S.hidden)return null;const k=Er(S),I=CI(S),z=j||O||t||n||r||o,U=n?B=>n(B,{...C.userNode}):void 0,Y=r?B=>r(B,{...C.userNode}):void 0,H=o?B=>o(B,{...C.userNode}):void 0,Z=i?B=>i(B,{...C.userNode}):void 0,K=s?B=>s(B,{...C.userNode}):void 0,G=B=>{const{selectNodesOnDrag:ee,nodeDragThreshold:ne}=L.getState();j&&(!ee||!O||ne>0)&&Kp({id:e,store:L,nodeRef:M}),t&&t(B,{...C.userNode})},V=B=>{if(!(Bp(B.nativeEvent)||y))if(Rw.includes(B.key)&&j){const ee=B.key==="Escape";Kp({id:e,store:L,unselect:ee,nodeRef:M})}else O&&S.selected&&Object.prototype.hasOwnProperty.call(tu,B.key)&&(L.setState({ariaLiveMessage:`Moved selected node ${B.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~C.positionAbsolute.x}, y: ${~~C.positionAbsolute.y}`}),D({direction:tu[B.key],factor:B.shiftKey?4:1}))};return h.jsx("div",{className:Je(["react-flow__node",`react-flow__node-${E}`,{[p]:O},S.className,{selected:S.selected,selectable:j,parent:N,draggable:O,dragging:T}]),ref:M,style:{zIndex:C.z,transform:`translate(${C.positionAbsolute.x}px,${C.positionAbsolute.y}px)`,pointerEvents:z?"all":"none",visibility:b?"visible":"hidden",...S.style,...I},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:U,onMouseMove:Y,onMouseLeave:H,onContextMenu:Z,onClick:G,onDoubleClick:K,onKeyDown:A?V:void 0,tabIndex:A?0:void 0,role:A?"button":void 0,"aria-describedby":y?void 0:`${f2}-${v}`,"aria-label":S.ariaLabel,children:h.jsx(gI,{value:e,children:h.jsx(P,{id:e,data:S.data,type:E,positionAbsoluteX:C.positionAbsolute.x,positionAbsoluteY:C.positionAbsolute.y,selected:S.selected,selectable:j,draggable:O,deletable:S.deletable??!0,isConnectable:$,sourcePosition:S.sourcePosition,targetPosition:S.targetPosition,dragging:T,dragHandle:S.dragHandle,zIndex:C.z,parentId:S.parentId,...k})})})}const OI=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function b2(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:o,onError:i}=Ne(OI,Ze),s=II(e.onlyRenderVisibleElements),a=AI();return h.jsx("div",{className:"react-flow__nodes",style:Ju,children:s.map(l=>h.jsx(jI,{id:l,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:a,nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:o,nodeClickDistance:e.nodeClickDistance,onError:i},l))})}b2.displayName="NodeRenderer";const DI=x.memo(b2);function LI(e){return Ne(x.useCallback(n=>{if(!e)return n.edges.map(o=>o.id);const r=[];if(n.width&&n.height)for(const o of n.edges){const i=n.nodeLookup.get(o.source),s=n.nodeLookup.get(o.target);i&&s&&CP({sourceNode:i,targetNode:s,width:n.width,height:n.height,transform:n.transform})&&r.push(o.id)}return r},[e]),Ze)}const zI=({color:e="none",strokeWidth:t=1})=>h.jsx("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),$I=({color:e="none",strokeWidth:t=1})=>h.jsx("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),Iv={[Qc.Arrow]:zI,[Qc.ArrowClosed]:$I};function FI(e){const t=Fe();return x.useMemo(()=>{var o,i;return Object.prototype.hasOwnProperty.call(Iv,e)?Iv[e]:((i=(o=t.getState()).onError)==null||i.call(o,"009",Cr.error009(e)),null)},[e])}const VI=({id:e,type:t,color:n,width:r=12.5,height:o=12.5,markerUnits:i="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=FI(t);return l?h.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${o}`,viewBox:"-10 -10 20 20",markerUnits:i,orient:a,refX:"0",refY:"0",children:h.jsx(l,{color:n,strokeWidth:s})}):null},C2=({defaultColor:e,rfId:t})=>{const n=Ne(i=>i.edges),r=Ne(i=>i.defaultEdgeOptions),o=x.useMemo(()=>RP(n,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[n,r,t,e]);return o.length?h.jsx("svg",{className:"react-flow__marker",children:h.jsx("defs",{children:o.map(i=>h.jsx(VI,{id:i.id,type:i.type,color:i.color,width:i.width,height:i.height,markerUnits:i.markerUnits,strokeWidth:i.strokeWidth,orient:i.orient},i.id))})}):null};C2.displayName="MarkerDefinitions";var HI=x.memo(C2);function E2({x:e,y:t,label:n,labelStyle:r={},labelShowBg:o=!0,labelBgStyle:i={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:c,...d}){const[u,f]=x.useState({x:1,y:0,width:0,height:0}),p=Je(["react-flow__edge-textwrapper",c]),y=x.useRef(null);return x.useEffect(()=>{if(y.current){const v=y.current.getBBox();f({x:v.x,y:v.y,width:v.width,height:v.height})}},[n]),typeof n>"u"||!n?null:h.jsxs("g",{transform:`translate(${e-u.width/2} ${t-u.height/2})`,className:p,visibility:u.width?"visible":"hidden",...d,children:[o&&h.jsx("rect",{width:u.width+2*s[0],x:-s[0],y:-s[1],height:u.height+2*s[1],className:"react-flow__edge-textbg",style:i,rx:a,ry:a}),h.jsx("text",{className:"react-flow__edge-text",y:u.height/2,dy:"0.3em",ref:y,style:r,children:n}),l]})}E2.displayName="EdgeText";const BI=x.memo(E2);function ed({id:e,path:t,labelX:n,labelY:r,label:o,labelStyle:i,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:d,markerEnd:u,markerStart:f,className:p,interactionWidth:y=20}){return h.jsxs(h.Fragment,{children:[h.jsx("path",{id:e,style:d,d:t,fill:"none",className:Je(["react-flow__edge-path",p]),markerEnd:u,markerStart:f}),y&&h.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}),o&&mn(n)&&mn(r)?h.jsx(BI,{x:n,y:r,label:o,labelStyle:i,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c}):null]})}function Rv({pos:e,x1:t,y1:n,x2:r,y2:o}){return e===ue.Left||e===ue.Right?[.5*(t+r),n]:[t,.5*(n+o)]}function k2({sourceX:e,sourceY:t,sourcePosition:n=ue.Bottom,targetX:r,targetY:o,targetPosition:i=ue.Top}){const[s,a]=Rv({pos:n,x1:e,y1:t,x2:r,y2:o}),[l,c]=Rv({pos:i,x1:r,y1:o,x2:e,y2:t}),[d,u,f,p]=Ww({sourceX:e,sourceY:t,targetX:r,targetY:o,sourceControlX:s,sourceControlY:a,targetControlX:l,targetControlY:c});return[`M${e},${t} C${s},${a} ${l},${c} ${r},${o}`,d,u,f,p]}function N2(e){return x.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,sourcePosition:s=ue.Bottom,targetPosition:a=ue.Top,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,interactionWidth:m})=>{const[g,w,S]=k2({sourceX:n,sourceY:r,sourcePosition:s,targetX:o,targetY:i,targetPosition:a}),C=e.isInternal?void 0:t;return h.jsx(ed,{id:C,path:g,labelX:w,labelY:S,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,interactionWidth:m})})}const UI=N2({isInternal:!1}),T2=N2({isInternal:!0});UI.displayName="SimpleBezierEdge";T2.displayName="SimpleBezierEdgeInternal";function P2(e){return x.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,sourcePosition:p=ue.Bottom,targetPosition:y=ue.Top,markerEnd:v,markerStart:_,pathOptions:m,interactionWidth:g})=>{const[w,S,C]=Up({sourceX:n,sourceY:r,sourcePosition:p,targetX:o,targetY:i,targetPosition:y,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset}),N=e.isInternal?void 0:t;return h.jsx(ed,{id:N,path:w,labelX:S,labelY:C,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:v,markerStart:_,interactionWidth:g})})}const I2=P2({isInternal:!1}),R2=P2({isInternal:!0});I2.displayName="SmoothStepEdge";R2.displayName="SmoothStepEdgeInternal";function A2(e){return x.memo(({id:t,...n})=>{var o;const r=e.isInternal?void 0:t;return h.jsx(I2,{...n,id:r,pathOptions:x.useMemo(()=>{var i;return{borderRadius:0,offset:(i=n.pathOptions)==null?void 0:i.offset}},[(o=n.pathOptions)==null?void 0:o.offset])})})}const WI=A2({isInternal:!1}),M2=A2({isInternal:!0});WI.displayName="StepEdge";M2.displayName="StepEdgeInternal";function j2(e){return x.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:p,markerStart:y,interactionWidth:v})=>{const[_,m,g]=Kw({sourceX:n,sourceY:r,targetX:o,targetY:i}),w=e.isInternal?void 0:t;return h.jsx(ed,{id:w,path:_,labelX:m,labelY:g,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:p,markerStart:y,interactionWidth:v})})}const ZI=j2({isInternal:!1}),O2=j2({isInternal:!0});ZI.displayName="StraightEdge";O2.displayName="StraightEdgeInternal";function D2(e){return x.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,sourcePosition:s=ue.Bottom,targetPosition:a=ue.Top,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,pathOptions:m,interactionWidth:g})=>{const[w,S,C]=Zw({sourceX:n,sourceY:r,sourcePosition:s,targetX:o,targetY:i,targetPosition:a,curvature:m==null?void 0:m.curvature}),N=e.isInternal?void 0:t;return h.jsx(ed,{id:N,path:w,labelX:S,labelY:C,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:p,style:y,markerEnd:v,markerStart:_,interactionWidth:g})})}const GI=D2({isInternal:!1}),L2=D2({isInternal:!0});GI.displayName="BezierEdge";L2.displayName="BezierEdgeInternal";const Av={default:L2,straight:O2,step:M2,smoothstep:R2,simplebezier:T2},Mv={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},YI=(e,t,n)=>n===ue.Left?e-t:n===ue.Right?e+t:e,KI=(e,t,n)=>n===ue.Top?e-t:n===ue.Bottom?e+t:e,jv="react-flow__edgeupdater";function Ov({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:o,onMouseEnter:i,onMouseOut:s,type:a}){return h.jsx("circle",{onMouseDown:o,onMouseEnter:i,onMouseOut:s,className:Je([jv,`${jv}-${a}`]),cx:YI(t,r,e),cy:KI(n,r,e),r,stroke:"transparent",fill:"transparent"})}function XI({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:o,targetX:i,targetY:s,sourcePosition:a,targetPosition:l,onReconnect:c,onReconnectStart:d,onReconnectEnd:u,setReconnecting:f,setUpdateHover:p}){const y=Fe(),v=(S,C)=>{if(S.button!==0)return;const{autoPanOnConnect:N,domNode:E,isValidConnection:P,connectionMode:O,connectionRadius:j,lib:$,onConnectStart:A,onConnectEnd:L,cancelConnection:b,nodeLookup:M,rfId:T,panBy:D,updateConnection:k}=y.getState(),I=C.type==="target";f(!0),d==null||d(S,n,C.type);const z=(Y,H)=>{f(!1),u==null||u(Y,n,C.type,H)},U=Y=>c==null?void 0:c(n,Y);Gp.onPointerDown(S.nativeEvent,{autoPanOnConnect:N,connectionMode:O,connectionRadius:j,domNode:E,handleId:C.id,nodeId:C.nodeId,nodeLookup:M,isTarget:I,edgeUpdaterType:C.type,lib:$,flowId:T,cancelConnection:b,panBy:D,isValidConnection:P,onConnect:U,onConnectStart:A,onConnectEnd:L,onReconnectEnd:z,updateConnection:k,getTransform:()=>y.getState().transform,getFromHandle:()=>y.getState().connection.fromHandle})},_=S=>v(S,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),m=S=>v(S,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),g=()=>p(!0),w=()=>p(!1);return h.jsxs(h.Fragment,{children:[(e===!0||e==="source")&&h.jsx(Ov,{position:a,centerX:r,centerY:o,radius:t,onMouseDown:_,onMouseEnter:g,onMouseOut:w,type:"source"}),(e===!0||e==="target")&&h.jsx(Ov,{position:l,centerX:i,centerY:s,radius:t,onMouseDown:m,onMouseEnter:g,onMouseOut:w,type:"target"})]})}function qI({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:o,onDoubleClick:i,onContextMenu:s,onMouseEnter:a,onMouseMove:l,onMouseLeave:c,reconnectRadius:d,onReconnect:u,onReconnectStart:f,onReconnectEnd:p,rfId:y,edgeTypes:v,noPanClassName:_,onError:m,disableKeyboardA11y:g}){let w=Ne(X=>X.edgeLookup.get(e));const S=Ne(X=>X.defaultEdgeOptions);w=S?{...S,...w}:w;let C=w.type||"default",N=(v==null?void 0:v[C])||Av[C];N===void 0&&(m==null||m("011",Cr.error011(C)),C="default",N=Av.default);const E=!!(w.focusable||t&&typeof w.focusable>"u"),P=typeof u<"u"&&(w.reconnectable||n&&typeof w.reconnectable>"u"),O=!!(w.selectable||r&&typeof w.selectable>"u"),j=x.useRef(null),[$,A]=x.useState(!1),[L,b]=x.useState(!1),M=Fe(),{zIndex:T,sourceX:D,sourceY:k,targetX:I,targetY:z,sourcePosition:U,targetPosition:Y}=Ne(x.useCallback(X=>{const ae=X.nodeLookup.get(w.source),me=X.nodeLookup.get(w.target);if(!ae||!me)return{zIndex:w.zIndex,...Mv};const Le=IP({id:e,sourceNode:ae,targetNode:me,sourceHandle:w.sourceHandle||null,targetHandle:w.targetHandle||null,connectionMode:X.connectionMode,onError:m});return{zIndex:bP({selected:w.selected,zIndex:w.zIndex,sourceNode:ae,targetNode:me,elevateOnSelect:X.elevateEdgesOnSelect}),...Le||Mv}},[w.source,w.target,w.sourceHandle,w.targetHandle,w.selected,w.zIndex]),Ze),H=x.useMemo(()=>w.markerStart?`url('#${Wp(w.markerStart,y)}')`:void 0,[w.markerStart,y]),Z=x.useMemo(()=>w.markerEnd?`url('#${Wp(w.markerEnd,y)}')`:void 0,[w.markerEnd,y]);if(w.hidden||D===null||k===null||I===null||z===null)return null;const K=X=>{var qe;const{addSelectedEdges:ae,unselectNodesAndEdges:me,multiSelectionActive:Le}=M.getState();O&&(M.setState({nodesSelectionActive:!1}),w.selected&&Le?(me({nodes:[],edges:[w]}),(qe=j.current)==null||qe.blur()):ae([e])),o&&o(X,w)},G=i?X=>{i(X,{...w})}:void 0,V=s?X=>{s(X,{...w})}:void 0,B=a?X=>{a(X,{...w})}:void 0,ee=l?X=>{l(X,{...w})}:void 0,ne=c?X=>{c(X,{...w})}:void 0,oe=X=>{var ae;if(!g&&Rw.includes(X.key)&&O){const{unselectNodesAndEdges:me,addSelectedEdges:Le}=M.getState();X.key==="Escape"?((ae=j.current)==null||ae.blur(),me({edges:[w]})):Le([e])}};return h.jsx("svg",{style:{zIndex:T},children:h.jsxs("g",{className:Je(["react-flow__edge",`react-flow__edge-${C}`,w.className,_,{selected:w.selected,animated:w.animated,inactive:!O&&!o,updating:$,selectable:O}]),onClick:K,onDoubleClick:G,onContextMenu:V,onMouseEnter:B,onMouseMove:ee,onMouseLeave:ne,onKeyDown:E?oe:void 0,tabIndex:E?0:void 0,role:E?"button":"img","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":w.ariaLabel===null?void 0:w.ariaLabel||`Edge from ${w.source} to ${w.target}`,"aria-describedby":E?`${p2}-${y}`:void 0,ref:j,children:[!L&&h.jsx(N,{id:e,source:w.source,target:w.target,type:w.type,selected:w.selected,animated:w.animated,selectable:O,deletable:w.deletable??!0,label:w.label,labelStyle:w.labelStyle,labelShowBg:w.labelShowBg,labelBgStyle:w.labelBgStyle,labelBgPadding:w.labelBgPadding,labelBgBorderRadius:w.labelBgBorderRadius,sourceX:D,sourceY:k,targetX:I,targetY:z,sourcePosition:U,targetPosition:Y,data:w.data,style:w.style,sourceHandleId:w.sourceHandle,targetHandleId:w.targetHandle,markerStart:H,markerEnd:Z,pathOptions:"pathOptions"in w?w.pathOptions:void 0,interactionWidth:w.interactionWidth}),P&&h.jsx(XI,{edge:w,isReconnectable:P,reconnectRadius:d,onReconnect:u,onReconnectStart:f,onReconnectEnd:p,sourceX:D,sourceY:k,targetX:I,targetY:z,sourcePosition:U,targetPosition:Y,setUpdateHover:A,setReconnecting:b})]})})}const QI=e=>({width:e.width,height:e.height,edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function z2({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:o,onReconnect:i,onEdgeContextMenu:s,onEdgeMouseEnter:a,onEdgeMouseMove:l,onEdgeMouseLeave:c,onEdgeClick:d,reconnectRadius:u,onEdgeDoubleClick:f,onReconnectStart:p,onReconnectEnd:y,disableKeyboardA11y:v}){const{edgesFocusable:_,edgesReconnectable:m,elementsSelectable:g,onError:w}=Ne(QI,Ze),S=LI(t);return h.jsxs("div",{className:"react-flow__edges",children:[h.jsx(HI,{defaultColor:e,rfId:n}),S.map(C=>h.jsx(qI,{id:C,edgesFocusable:_,edgesReconnectable:m,elementsSelectable:g,noPanClassName:o,onReconnect:i,onContextMenu:s,onMouseEnter:a,onMouseMove:l,onMouseLeave:c,onClick:d,reconnectRadius:u,onDoubleClick:f,onReconnectStart:p,onReconnectEnd:y,rfId:n,onError:w,edgeTypes:r,disableKeyboardA11y:v},C))]})}z2.displayName="EdgeRenderer";const JI=x.memo(z2),eR=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function tR({children:e}){const t=Ne(eR);return h.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function nR(e){const t=Yo(),n=x.useRef(!1);x.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const rR=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function oR(e){const t=Ne(rR),n=Fe();return x.useEffect(()=>{e&&(t==null||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function iR(e){return e.connection.inProgress?{...e.connection,to:sl(e.connection.to,e.transform)}:{...e.connection}}function sR(e){return iR}function aR(e){const t=sR();return Ne(t,Ze)}const lR=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function cR({containerStyle:e,style:t,type:n,component:r}){const{nodesConnectable:o,width:i,height:s,isValid:a,inProgress:l}=Ne(lR,Ze);return!(i&&o&&l)?null:h.jsx("svg",{style:e,width:i,height:s,className:"react-flow__connectionline react-flow__container",children:h.jsx("g",{className:Je(["react-flow__connection",Mw(a)]),children:h.jsx($2,{style:t,type:n,CustomComponent:r,isValid:a})})})}const $2=({style:e,type:t=$r.Bezier,CustomComponent:n,isValid:r})=>{const{inProgress:o,from:i,fromNode:s,fromHandle:a,fromPosition:l,to:c,toNode:d,toHandle:u,toPosition:f}=aR();if(!o)return;if(n)return h.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:s,fromHandle:a,fromX:i.x,fromY:i.y,toX:c.x,toY:c.y,fromPosition:l,toPosition:f,connectionStatus:Mw(r),toNode:d,toHandle:u});let p="";const y={sourceX:i.x,sourceY:i.y,sourcePosition:l,targetX:c.x,targetY:c.y,targetPosition:f};switch(t){case $r.Bezier:[p]=Zw(y);break;case $r.SimpleBezier:[p]=k2(y);break;case $r.Step:[p]=Up({...y,borderRadius:0});break;case $r.SmoothStep:[p]=Up(y);break;default:[p]=Kw(y)}return h.jsx("path",{d:p,fill:"none",className:"react-flow__connection-path",style:e})};$2.displayName="ConnectionLine";const uR={};function Dv(e=uR){x.useRef(e),Fe(),x.useEffect(()=>{},[e])}function dR(){Fe(),x.useRef(!1),x.useEffect(()=>{},[])}function F2({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:o,onNodeDoubleClick:i,onEdgeDoubleClick:s,onNodeMouseEnter:a,onNodeMouseMove:l,onNodeMouseLeave:c,onNodeContextMenu:d,onSelectionContextMenu:u,onSelectionStart:f,onSelectionEnd:p,connectionLineType:y,connectionLineStyle:v,connectionLineComponent:_,connectionLineContainerStyle:m,selectionKeyCode:g,selectionOnDrag:w,selectionMode:S,multiSelectionKeyCode:C,panActivationKeyCode:N,zoomActivationKeyCode:E,deleteKeyCode:P,onlyRenderVisibleElements:O,elementsSelectable:j,defaultViewport:$,translateExtent:A,minZoom:L,maxZoom:b,preventScrolling:M,defaultMarkerColor:T,zoomOnScroll:D,zoomOnPinch:k,panOnScroll:I,panOnScrollSpeed:z,panOnScrollMode:U,zoomOnDoubleClick:Y,panOnDrag:H,onPaneClick:Z,onPaneMouseEnter:K,onPaneMouseMove:G,onPaneMouseLeave:V,onPaneScroll:B,onPaneContextMenu:ee,paneClickDistance:ne,nodeClickDistance:oe,onEdgeContextMenu:X,onEdgeMouseEnter:ae,onEdgeMouseMove:me,onEdgeMouseLeave:Le,reconnectRadius:qe,onReconnect:Et,onReconnectStart:R,onReconnectEnd:F,noDragClassName:W,noWheelClassName:ie,noPanClassName:te,disableKeyboardA11y:q,nodeExtent:pe,rfId:ye,viewport:ze,onViewportChange:Ve}){return Dv(e),Dv(t),dR(),nR(n),oR(ze),h.jsx(TI,{onPaneClick:Z,onPaneMouseEnter:K,onPaneMouseMove:G,onPaneMouseLeave:V,onPaneContextMenu:ee,onPaneScroll:B,paneClickDistance:ne,deleteKeyCode:P,selectionKeyCode:g,selectionOnDrag:w,selectionMode:S,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:C,panActivationKeyCode:N,zoomActivationKeyCode:E,elementsSelectable:j,zoomOnScroll:D,zoomOnPinch:k,zoomOnDoubleClick:Y,panOnScroll:I,panOnScrollSpeed:z,panOnScrollMode:U,panOnDrag:H,defaultViewport:$,translateExtent:A,minZoom:L,maxZoom:b,onSelectionContextMenu:u,preventScrolling:M,noDragClassName:W,noWheelClassName:ie,noPanClassName:te,disableKeyboardA11y:q,onViewportChange:Ve,isControlledViewport:!!ze,children:h.jsxs(tR,{children:[h.jsx(JI,{edgeTypes:t,onEdgeClick:o,onEdgeDoubleClick:s,onReconnect:Et,onReconnectStart:R,onReconnectEnd:F,onlyRenderVisibleElements:O,onEdgeContextMenu:X,onEdgeMouseEnter:ae,onEdgeMouseMove:me,onEdgeMouseLeave:Le,reconnectRadius:qe,defaultMarkerColor:T,noPanClassName:te,disableKeyboardA11y:q,rfId:ye}),h.jsx(cR,{style:v,type:y,component:_,containerStyle:m}),h.jsx("div",{className:"react-flow__edgelabel-renderer"}),h.jsx(DI,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:i,onNodeMouseEnter:a,onNodeMouseMove:l,onNodeMouseLeave:c,onNodeContextMenu:d,nodeClickDistance:oe,onlyRenderVisibleElements:O,noPanClassName:te,noDragClassName:W,disableKeyboardA11y:q,nodeExtent:pe,rfId:ye}),h.jsx("div",{className:"react-flow__viewport-portal"})]})})}F2.displayName="GraphView";const fR=x.memo(F2),Lv=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:s,nodeOrigin:a,nodeExtent:l}={})=>{const c=new Map,d=new Map,u=new Map,f=new Map,p=r??t??[],y=n??e??[],v=a??[0,0],_=l??Na;qw(u,f,p),Zp(y,c,d,{nodeOrigin:v,nodeExtent:_,elevateNodesOnSelect:!1});let m=[0,0,1];if(s&&o&&i){const g=il(c,{filter:N=>!!((N.width||N.initialWidth)&&(N.height||N.initialHeight))}),{x:w,y:S,zoom:C}=Em(g,o,i,.5,2,.1);m=[w,S,C]}return{rfId:"1",width:0,height:0,transform:m,nodes:y,nodeLookup:c,parentLookup:d,edges:p,edgeLookup:f,connectionLookup:u,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:.5,maxZoom:2,translateExtent:Na,nodeExtent:_,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Xi.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:v,nodeDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!1,fitViewOnInit:!1,fitViewDone:!1,fitViewOnInitOptions:void 0,selectNodesOnDrag:!0,multiSelectionActive:!1,connection:{...Aw},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanSpeed:15,connectionRadius:20,onError:_P,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1}},pR=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:s,nodeOrigin:a,nodeExtent:l})=>A8((c,d)=>({...Lv({nodes:e,edges:t,width:o,height:i,fitView:s,nodeOrigin:a,nodeExtent:l,defaultNodes:n,defaultEdges:r}),setNodes:u=>{const{nodeLookup:f,parentLookup:p,nodeOrigin:y,elevateNodesOnSelect:v}=d();Zp(u,f,p,{nodeOrigin:y,nodeExtent:l,elevateNodesOnSelect:v,checkEquality:!0}),c({nodes:u})},setEdges:u=>{const{connectionLookup:f,edgeLookup:p}=d();qw(f,p,u),c({edges:u})},setDefaultNodesAndEdges:(u,f)=>{if(u){const{setNodes:p}=d();p(u),c({hasDefaultNodes:!0})}if(f){const{setEdges:p}=d();p(f),c({hasDefaultEdges:!0})}},updateNodeInternals:(u,f={triggerFitView:!0})=>{const{triggerNodeChanges:p,nodeLookup:y,parentLookup:v,fitViewOnInit:_,fitViewDone:m,fitViewOnInitOptions:g,domNode:w,nodeOrigin:S,nodeExtent:C,debug:N,fitViewSync:E}=d(),{changes:P,updatedInternals:O}=DP(u,y,v,w,S,C);if(O){if(MP(y,v,{nodeOrigin:S,nodeExtent:C}),f.triggerFitView){let j=m;!m&&_&&(j=E({...g,nodes:g==null?void 0:g.nodes})),c({fitViewDone:j})}else c({});(P==null?void 0:P.length)>0&&(N&&console.log("React Flow: trigger node changes",P),p==null||p(P))}},updateNodePositions:(u,f=!1)=>{const p=[],y=[];for(const[v,_]of u){const m={id:v,type:"position",position:_.position,dragging:f};_!=null&&_.expandParent&&(_!=null&&_.parentId)&&m.position&&(p.push({id:v,parentId:_.parentId,rect:{..._.internals.positionAbsolute,width:_.measured.width,height:_.measured.height}}),m.position.x=Math.max(0,m.position.x),m.position.y=Math.max(0,m.position.y)),y.push(m)}if(p.length>0){const{nodeLookup:v,parentLookup:_,nodeOrigin:m}=d(),g=Pm(p,v,_,m);y.push(...g)}d().triggerNodeChanges(y)},triggerNodeChanges:u=>{const{onNodesChange:f,setNodes:p,nodes:y,hasDefaultNodes:v,debug:_}=d();if(u!=null&&u.length){if(v){const m=g2(u,y);p(m)}_&&console.log("React Flow: trigger node changes",u),f==null||f(u)}},triggerEdgeChanges:u=>{const{onEdgesChange:f,setEdges:p,edges:y,hasDefaultEdges:v,debug:_}=d();if(u!=null&&u.length){if(v){const m=Yp(u,y);p(m)}_&&console.log("React Flow: trigger edge changes",u),f==null||f(u)}},addSelectedNodes:u=>{const{multiSelectionActive:f,edgeLookup:p,nodeLookup:y,triggerNodeChanges:v,triggerEdgeChanges:_}=d();if(f){const m=u.map(g=>yo(g,!0));v(m);return}v(Si(y,new Set([...u]),!0)),_(Si(p))},addSelectedEdges:u=>{const{multiSelectionActive:f,edgeLookup:p,nodeLookup:y,triggerNodeChanges:v,triggerEdgeChanges:_}=d();if(f){const m=u.map(g=>yo(g,!0));_(m);return}_(Si(p,new Set([...u]))),v(Si(y,new Set,!0))},unselectNodesAndEdges:({nodes:u,edges:f}={})=>{const{edges:p,nodes:y,nodeLookup:v,triggerNodeChanges:_,triggerEdgeChanges:m}=d(),g=u||y,w=f||p,S=g.map(N=>{const E=v.get(N.id);return E&&(E.selected=!1),yo(N.id,!1)}),C=w.map(N=>yo(N.id,!1));_(S),m(C)},setMinZoom:u=>{const{panZoom:f,maxZoom:p}=d();f==null||f.setScaleExtent([u,p]),c({minZoom:u})},setMaxZoom:u=>{const{panZoom:f,minZoom:p}=d();f==null||f.setScaleExtent([p,u]),c({maxZoom:u})},setTranslateExtent:u=>{var f;(f=d().panZoom)==null||f.setTranslateExtent(u),c({translateExtent:u})},setPaneClickDistance:u=>{var f;(f=d().panZoom)==null||f.setClickDistance(u)},resetSelectedElements:()=>{const{edges:u,nodes:f,triggerNodeChanges:p,triggerEdgeChanges:y}=d(),v=f.reduce((m,g)=>g.selected?[...m,yo(g.id,!1)]:m,[]),_=u.reduce((m,g)=>g.selected?[...m,yo(g.id,!1)]:m,[]);p(v),y(_)},setNodeExtent:u=>{const{nodes:f,nodeLookup:p,parentLookup:y,nodeOrigin:v,elevateNodesOnSelect:_,nodeExtent:m}=d();u[0][0]===m[0][0]&&u[0][1]===m[0][1]&&u[1][0]===m[1][0]&&u[1][1]===m[1][1]||(Zp(f,p,y,{nodeOrigin:v,nodeExtent:u,elevateNodesOnSelect:_,checkEquality:!1}),c({nodeExtent:u}))},panBy:u=>{const{transform:f,width:p,height:y,panZoom:v,translateExtent:_}=d();return LP({delta:u,panZoom:v,transform:f,translateExtent:_,width:p,height:y})},fitView:u=>{const{panZoom:f,width:p,height:y,minZoom:v,maxZoom:_,nodeLookup:m}=d();if(!f)return Promise.resolve(!1);const g=Fp(m,u);return Vp({nodes:g,width:p,height:y,panZoom:f,minZoom:v,maxZoom:_},u)},fitViewSync:u=>{const{panZoom:f,width:p,height:y,minZoom:v,maxZoom:_,nodeLookup:m}=d();if(!f)return!1;const g=Fp(m,u);return Vp({nodes:g,width:p,height:y,panZoom:f,minZoom:v,maxZoom:_},u),g.size>0},cancelConnection:()=>{c({connection:{...Aw}})},updateConnection:u=>{c({connection:u})},reset:()=>c({...Lv()})}),Object.is);function V2({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:o,initialHeight:i,fitView:s,nodeOrigin:a,nodeExtent:l,children:c}){const[d]=x.useState(()=>pR({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:s,nodeOrigin:a,nodeExtent:l}));return h.jsx(M8,{value:d,children:h.jsx(nI,{children:c})})}function hR({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:o,width:i,height:s,fitView:a,nodeOrigin:l,nodeExtent:c}){return x.useContext(qu)?h.jsx(h.Fragment,{children:e}):h.jsx(V2,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:o,initialWidth:i,initialHeight:s,fitView:a,nodeOrigin:l,nodeExtent:c,children:e})}const mR={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function gR({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:o,nodeTypes:i,edgeTypes:s,onNodeClick:a,onEdgeClick:l,onInit:c,onMove:d,onMoveStart:u,onMoveEnd:f,onConnect:p,onConnectStart:y,onConnectEnd:v,onClickConnectStart:_,onClickConnectEnd:m,onNodeMouseEnter:g,onNodeMouseMove:w,onNodeMouseLeave:S,onNodeContextMenu:C,onNodeDoubleClick:N,onNodeDragStart:E,onNodeDrag:P,onNodeDragStop:O,onNodesDelete:j,onEdgesDelete:$,onDelete:A,onSelectionChange:L,onSelectionDragStart:b,onSelectionDrag:M,onSelectionDragStop:T,onSelectionContextMenu:D,onSelectionStart:k,onSelectionEnd:I,onBeforeDelete:z,connectionMode:U,connectionLineType:Y=$r.Bezier,connectionLineStyle:H,connectionLineComponent:Z,connectionLineContainerStyle:K,deleteKeyCode:G="Backspace",selectionKeyCode:V="Shift",selectionOnDrag:B=!1,selectionMode:ee=Ta.Full,panActivationKeyCode:ne="Space",multiSelectionKeyCode:oe=eu()?"Meta":"Control",zoomActivationKeyCode:X=eu()?"Meta":"Control",snapToGrid:ae,snapGrid:me,onlyRenderVisibleElements:Le=!1,selectNodesOnDrag:qe,nodesDraggable:Et,nodesConnectable:R,nodesFocusable:F,nodeOrigin:W=h2,edgesFocusable:ie,edgesReconnectable:te,elementsSelectable:q=!0,defaultViewport:pe=Z8,minZoom:ye=.5,maxZoom:ze=2,translateExtent:Ve=Na,preventScrolling:Yn=!0,nodeExtent:gs,defaultMarkerColor:vs="#b1b1b7",zoomOnScroll:ys=!0,zoomOnPinch:Rd=!0,panOnScroll:gl=!1,panOnScrollSpeed:Ad=.5,panOnScrollMode:vl=To.Free,zoomOnDoubleClick:_E=!0,panOnDrag:SE=!0,onPaneClick:bE,onPaneMouseEnter:CE,onPaneMouseMove:EE,onPaneMouseLeave:kE,onPaneScroll:NE,onPaneContextMenu:TE,paneClickDistance:Cg=0,nodeClickDistance:PE=0,children:IE,onReconnect:RE,onReconnectStart:AE,onReconnectEnd:ME,onEdgeContextMenu:jE,onEdgeDoubleClick:OE,onEdgeMouseEnter:DE,onEdgeMouseMove:LE,onEdgeMouseLeave:zE,reconnectRadius:$E=10,onNodesChange:FE,onEdgesChange:VE,noDragClassName:HE="nodrag",noWheelClassName:BE="nowheel",noPanClassName:Eg="nopan",fitView:kg,fitViewOptions:UE,connectOnClick:WE,attributionPosition:ZE,proOptions:GE,defaultEdgeOptions:YE,elevateNodesOnSelect:KE,elevateEdgesOnSelect:XE,disableKeyboardA11y:Ng=!1,autoPanOnConnect:qE,autoPanOnNodeDrag:QE,autoPanSpeed:JE,connectionRadius:e3,isValidConnection:t3,onError:n3,style:r3,id:Tg,nodeDragThreshold:o3,viewport:i3,onViewportChange:s3,width:a3,height:l3,colorMode:c3="light",debug:u3,...d3},f3){const Md=Tg||"1",p3=X8(c3);return h.jsx("div",{...d3,style:{...r3,...mR},ref:f3,className:Je(["react-flow",o,p3]),"data-testid":"rf__wrapper",id:Tg,children:h.jsxs(hR,{nodes:e,edges:t,width:a3,height:l3,fitView:kg,nodeOrigin:W,nodeExtent:gs,children:[h.jsx(fR,{onInit:c,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:g,onNodeMouseMove:w,onNodeMouseLeave:S,onNodeContextMenu:C,onNodeDoubleClick:N,nodeTypes:i,edgeTypes:s,connectionLineType:Y,connectionLineStyle:H,connectionLineComponent:Z,connectionLineContainerStyle:K,selectionKeyCode:V,selectionOnDrag:B,selectionMode:ee,deleteKeyCode:G,multiSelectionKeyCode:oe,panActivationKeyCode:ne,zoomActivationKeyCode:X,onlyRenderVisibleElements:Le,defaultViewport:pe,translateExtent:Ve,minZoom:ye,maxZoom:ze,preventScrolling:Yn,zoomOnScroll:ys,zoomOnPinch:Rd,zoomOnDoubleClick:_E,panOnScroll:gl,panOnScrollSpeed:Ad,panOnScrollMode:vl,panOnDrag:SE,onPaneClick:bE,onPaneMouseEnter:CE,onPaneMouseMove:EE,onPaneMouseLeave:kE,onPaneScroll:NE,onPaneContextMenu:TE,paneClickDistance:Cg,nodeClickDistance:PE,onSelectionContextMenu:D,onSelectionStart:k,onSelectionEnd:I,onReconnect:RE,onReconnectStart:AE,onReconnectEnd:ME,onEdgeContextMenu:jE,onEdgeDoubleClick:OE,onEdgeMouseEnter:DE,onEdgeMouseMove:LE,onEdgeMouseLeave:zE,reconnectRadius:$E,defaultMarkerColor:vs,noDragClassName:HE,noWheelClassName:BE,noPanClassName:Eg,rfId:Md,disableKeyboardA11y:Ng,nodeExtent:gs,viewport:i3,onViewportChange:s3}),h.jsx(K8,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:p,onConnectStart:y,onConnectEnd:v,onClickConnectStart:_,onClickConnectEnd:m,nodesDraggable:Et,nodesConnectable:R,nodesFocusable:F,edgesFocusable:ie,edgesReconnectable:te,elementsSelectable:q,elevateNodesOnSelect:KE,elevateEdgesOnSelect:XE,minZoom:ye,maxZoom:ze,nodeExtent:gs,onNodesChange:FE,onEdgesChange:VE,snapToGrid:ae,snapGrid:me,connectionMode:U,translateExtent:Ve,connectOnClick:WE,defaultEdgeOptions:YE,fitView:kg,fitViewOptions:UE,onNodesDelete:j,onEdgesDelete:$,onDelete:A,onNodeDragStart:E,onNodeDrag:P,onNodeDragStop:O,onSelectionDrag:M,onSelectionDragStart:b,onSelectionDragStop:T,onMove:d,onMoveStart:u,onMoveEnd:f,noPanClassName:Eg,nodeOrigin:W,rfId:Md,autoPanOnConnect:qE,autoPanOnNodeDrag:QE,autoPanSpeed:JE,onError:n3,connectionRadius:e3,isValidConnection:t3,selectNodesOnDrag:qe,nodeDragThreshold:o3,onBeforeDelete:z,paneClickDistance:Cg,debug:u3}),h.jsx(W8,{onSelectionChange:L}),IE,h.jsx(F8,{proOptions:GE,position:ZE}),h.jsx(z8,{rfId:Md,disableKeyboardA11y:Ng})]})})}var vR=v2(gR);const yR=e=>e.nodes;function Ko(){return Ne(yR,Ze)}function xR({dimensions:e,lineWidth:t,variant:n,className:r}){return h.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:Je(["react-flow__background-pattern",n,r])})}function wR({radius:e,className:t}){return h.jsx("circle",{cx:e,cy:e,r:e,className:Je(["react-flow__background-pattern","dots",t])})}var cr;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(cr||(cr={}));const _R={[cr.Dots]:1,[cr.Lines]:1,[cr.Cross]:6},SR=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function H2({id:e,variant:t=cr.Dots,gap:n=20,size:r,lineWidth:o=1,offset:i=0,color:s,bgColor:a,style:l,className:c,patternClassName:d}){const u=x.useRef(null),{transform:f,patternId:p}=Ne(SR,Ze),y=r||_R[t],v=t===cr.Dots,_=t===cr.Cross,m=Array.isArray(n)?n:[n,n],g=[m[0]*f[2]||1,m[1]*f[2]||1],w=y*f[2],S=Array.isArray(i)?i:[i,i],C=_?[w,w]:g,N=[S[0]*f[2]||1+C[0]/2,S[1]*f[2]||1+C[1]/2],E=`${p}${e||""}`;return h.jsxs("svg",{className:Je(["react-flow__background",c]),style:{...l,...Ju,"--xy-background-color-props":a,"--xy-background-pattern-color-props":s},ref:u,"data-testid":"rf__background",children:[h.jsx("pattern",{id:E,x:f[0]%g[0],y:f[1]%g[1],width:g[0],height:g[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${N[0]},-${N[1]})`,children:v?h.jsx(wR,{radius:w/2,className:d}):h.jsx(xR,{dimensions:C,lineWidth:o,variant:t,className:d})}),h.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${E})`})]})}H2.displayName="Background";const bR=x.memo(H2);function CR(){return h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:h.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function ER(){return h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:h.jsx("path",{d:"M0 0h32v4.2H0z"})})}function kR(){return h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:h.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function NR(){return h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:h.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function TR(){return h.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:h.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function Bl({children:e,className:t,...n}){return h.jsx("button",{type:"button",className:Je(["react-flow__controls-button",t]),...n,children:e})}const PR=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom});function B2({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:o,onZoomIn:i,onZoomOut:s,onFitView:a,onInteractiveChange:l,className:c,children:d,position:u="bottom-left",orientation:f="vertical","aria-label":p="React Flow controls"}){const y=Fe(),{isInteractive:v,minZoomReached:_,maxZoomReached:m}=Ne(PR,Ze),{zoomIn:g,zoomOut:w,fitView:S}=Yo(),C=()=>{g(),i==null||i()},N=()=>{w(),s==null||s()},E=()=>{S(o),a==null||a()},P=()=>{y.setState({nodesDraggable:!v,nodesConnectable:!v,elementsSelectable:!v}),l==null||l(!v)},O=f==="horizontal"?"horizontal":"vertical";return h.jsxs(Qu,{className:Je(["react-flow__controls",O,c]),position:u,style:e,"data-testid":"rf__controls","aria-label":p,children:[t&&h.jsxs(h.Fragment,{children:[h.jsx(Bl,{onClick:C,className:"react-flow__controls-zoomin",title:"zoom in","aria-label":"zoom in",disabled:m,children:h.jsx(CR,{})}),h.jsx(Bl,{onClick:N,className:"react-flow__controls-zoomout",title:"zoom out","aria-label":"zoom out",disabled:_,children:h.jsx(ER,{})})]}),n&&h.jsx(Bl,{className:"react-flow__controls-fitview",onClick:E,title:"fit view","aria-label":"fit view",children:h.jsx(kR,{})}),r&&h.jsx(Bl,{className:"react-flow__controls-interactive",onClick:P,title:"toggle interactivity","aria-label":"toggle interactivity",children:v?h.jsx(TR,{}):h.jsx(NR,{})}),d]})}B2.displayName="Controls";const IR=x.memo(B2);function RR({id:e,x:t,y:n,width:r,height:o,style:i,color:s,strokeColor:a,strokeWidth:l,className:c,borderRadius:d,shapeRendering:u,selected:f,onClick:p}){const{background:y,backgroundColor:v}=i||{},_=s||y||v;return h.jsx("rect",{className:Je(["react-flow__minimap-node",{selected:f},c]),x:t,y:n,rx:d,ry:d,width:r,height:o,style:{fill:_,stroke:a,strokeWidth:l},shapeRendering:u,onClick:p?m=>p(m,e):void 0})}const AR=x.memo(RR),MR=e=>e.nodes.map(t=>t.id),gf=e=>e instanceof Function?e:()=>e;function jR({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o,nodeComponent:i=AR,onClick:s}){const a=Ne(MR,Ze),l=gf(t),c=gf(e),d=gf(n),u=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return h.jsx(h.Fragment,{children:a.map(f=>h.jsx(DR,{id:f,nodeColorFunc:l,nodeStrokeColorFunc:c,nodeClassNameFunc:d,nodeBorderRadius:r,nodeStrokeWidth:o,NodeComponent:i,onClick:s,shapeRendering:u},f))})}function OR({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:o,nodeStrokeWidth:i,shapeRendering:s,NodeComponent:a,onClick:l}){const{node:c,x:d,y:u,width:f,height:p}=Ne(y=>{const v=y.nodeLookup.get(e),{x:_,y:m}=v.internals.positionAbsolute,{width:g,height:w}=Er(v);return{node:v,x:_,y:m,width:g,height:w}},Ze);return!c||c.hidden||!Vw(c)?null:h.jsx(a,{x:d,y:u,width:f,height:p,style:c.style,selected:!!c.selected,className:r(c),color:t(c),borderRadius:o,strokeColor:n(c),strokeWidth:i,shapeRendering:s,onClick:l,id:c.id})}const DR=x.memo(OR);var LR=x.memo(jR);const zR=200,$R=150,FR=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?$w(il(e.nodeLookup),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height}},VR="react-flow__minimap-desc";function U2({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:o="",nodeBorderRadius:i=5,nodeStrokeWidth:s,nodeComponent:a,bgColor:l,maskColor:c,maskStrokeColor:d,maskStrokeWidth:u,position:f="bottom-right",onClick:p,onNodeClick:y,pannable:v=!1,zoomable:_=!1,ariaLabel:m="React Flow mini map",inversePan:g,zoomStep:w=10,offsetScale:S=5}){const C=Fe(),N=x.useRef(null),{boundingRect:E,viewBB:P,rfId:O,panZoom:j,translateExtent:$,flowWidth:A,flowHeight:L}=Ne(FR,Ze),b=(e==null?void 0:e.width)??zR,M=(e==null?void 0:e.height)??$R,T=E.width/b,D=E.height/M,k=Math.max(T,D),I=k*b,z=k*M,U=S*k,Y=E.x-(I-E.width)/2-U,H=E.y-(z-E.height)/2-U,Z=I+U*2,K=z+U*2,G=`${VR}-${O}`,V=x.useRef(0),B=x.useRef();V.current=k,x.useEffect(()=>{if(N.current&&j)return B.current=WP({domNode:N.current,panZoom:j,getTransform:()=>C.getState().transform,getViewScale:()=>V.current}),()=>{var oe;(oe=B.current)==null||oe.destroy()}},[j]),x.useEffect(()=>{var oe;(oe=B.current)==null||oe.update({translateExtent:$,width:A,height:L,inversePan:g,pannable:v,zoomStep:w,zoomable:_})},[v,_,g,w,$,A,L]);const ee=p?oe=>{var me;const[X,ae]=((me=B.current)==null?void 0:me.pointer(oe))||[0,0];p(oe,{x:X,y:ae})}:void 0,ne=y?x.useCallback((oe,X)=>{const ae=C.getState().nodeLookup.get(X);y(oe,ae)},[]):void 0;return h.jsx(Qu,{position:f,style:{...e,"--xy-minimap-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-mask-background-color-props":typeof c=="string"?c:void 0,"--xy-minimap-mask-stroke-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-stroke-width-props":typeof u=="number"?u*k:void 0,"--xy-minimap-node-background-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof s=="string"?s:void 0},className:Je(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:h.jsxs("svg",{width:b,height:M,viewBox:`${Y} ${H} ${Z} ${K}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":G,ref:N,onClick:ee,children:[m&&h.jsx("title",{id:G,children:m}),h.jsx(LR,{onClick:ne,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:i,nodeClassName:o,nodeStrokeWidth:s,nodeComponent:a}),h.jsx("path",{className:"react-flow__minimap-mask",d:`M${Y-U},${H-U}h${Z+U*2}v${K+U*2}h${-Z-U*2}z
+        M${P.x},${P.y}h${P.width}v${P.height}h${-P.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}U2.displayName="MiniMap";x.memo(U2);function HR({nodeId:e,position:t,variant:n=ta.Handle,className:r,style:o={},children:i,color:s,minWidth:a=10,minHeight:l=10,maxWidth:c=Number.MAX_VALUE,maxHeight:d=Number.MAX_VALUE,keepAspectRatio:u=!1,shouldResize:f,onResizeStart:p,onResize:y,onResizeEnd:v}){const _=_2(),m=typeof e=="string"?e:_,g=Fe(),w=x.useRef(null),S=n===ta.Line?"right":"bottom-right",C=t??S,N=x.useRef(null);x.useEffect(()=>{if(!(!w.current||!m))return N.current||(N.current=s8({domNode:w.current,nodeId:m,getStoreItems:()=>{const{nodeLookup:j,transform:$,snapGrid:A,snapToGrid:L,nodeOrigin:b}=g.getState();return{nodeLookup:j,transform:$,snapGrid:A,snapToGrid:L,nodeOrigin:b}},onChange:(j,$)=>{const{triggerNodeChanges:A,nodeLookup:L,parentLookup:b,nodeOrigin:M}=g.getState(),T=[],D={x:j.x,y:j.y},k=L.get(m);if(k&&k.expandParent&&k.parentId){const I=k.origin??M,z=j.width??k.measured.width,U=j.height??k.measured.height,Y={id:k.id,parentId:k.parentId,rect:{width:z,height:U,...Hw({x:j.x??k.position.x,y:j.y??k.position.y},{width:z,height:U},k.parentId,L,I)}},H=Pm([Y],L,b,M);T.push(...H),D.x=j.x?Math.max(I[0]*z,j.x):void 0,D.y=j.y?Math.max(I[1]*U,j.y):void 0}if(D.x!==void 0&&D.y!==void 0){const I={id:m,type:"position",position:{...D}};T.push(I)}if(j.width!==void 0&&j.height!==void 0){const I={id:m,type:"dimensions",resizing:!0,setAttributes:!0,dimensions:{width:j.width,height:j.height}};T.push(I)}for(const I of $){const z={...I,type:"position"};T.push(z)}A(T)},onEnd:()=>{const j={id:m,type:"dimensions",resizing:!1};g.getState().triggerNodeChanges([j])}})),N.current.update({controlPosition:C,boundaries:{minWidth:a,minHeight:l,maxWidth:c,maxHeight:d},keepAspectRatio:u,onResizeStart:p,onResize:y,onResizeEnd:v,shouldResize:f}),()=>{var j;(j=N.current)==null||j.destroy()}},[C,a,l,c,d,u,p,y,v,f]);const E=C.split("-"),P=n===ta.Line?"borderColor":"backgroundColor",O=s?{...o,[P]:s}:o;return h.jsx("div",{className:Je(["react-flow__resize-control","nodrag",...E,n,r]),ref:w,style:O,children:i})}x.memo(HR);function BR(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function W2(...e){return t=>e.forEach(n=>BR(n,t))}function Ae(...e){return x.useCallback(W2(...e),e)}var to=x.forwardRef((e,t)=>{const{children:n,...r}=e,o=x.Children.toArray(n),i=o.find(UR);if(i){const s=i.props.children,a=o.map(l=>l===i?x.Children.count(s)>1?x.Children.only(null):x.isValidElement(s)?s.props.children:null:l);return h.jsx(Xp,{...r,ref:t,children:x.isValidElement(s)?x.cloneElement(s,void 0,a):null})}return h.jsx(Xp,{...r,ref:t,children:n})});to.displayName="Slot";var Xp=x.forwardRef((e,t)=>{const{children:n,...r}=e;if(x.isValidElement(n)){const o=ZR(n);return x.cloneElement(n,{...WR(r,n.props),ref:t?W2(t,o):o})}return x.Children.count(n)>1?x.Children.only(null):null});Xp.displayName="SlotClone";var Z2=({children:e})=>h.jsx(h.Fragment,{children:e});function UR(e){return x.isValidElement(e)&&e.type===Z2}function WR(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{i(...a),o(...a)}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function ZR(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function G2(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=G2(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function GR(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=G2(e))&&(r&&(r+=" "),r+=t);return r}const zv=e=>typeof e=="boolean"?"".concat(e):e===0?"0":e,$v=GR,td=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return $v(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:o,defaultVariants:i}=t,s=Object.keys(o).map(c=>{const d=n==null?void 0:n[c],u=i==null?void 0:i[c];if(d===null)return null;const f=zv(d)||zv(u);return o[c][f]}),a=n&&Object.entries(n).reduce((c,d)=>{let[u,f]=d;return f===void 0||(c[u]=f),c},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((c,d)=>{let{class:u,className:f,...p}=d;return Object.entries(p).every(y=>{let[v,_]=y;return Array.isArray(_)?_.includes({...i,...a}[v]):{...i,...a}[v]===_})?[...c,u,f]:c},[]);return $v(e,s,l,n==null?void 0:n.class,n==null?void 0:n.className)};function Y2(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=Y2(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function YR(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=Y2(e))&&(r&&(r+=" "),r+=t);return r}const Rm="-",KR=e=>{const t=qR(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:s=>{const a=s.split(Rm);return a[0]===""&&a.length!==1&&a.shift(),K2(a,t)||XR(s)},getConflictingClassGroupIds:(s,a)=>{const l=n[s]||[];return a&&r[s]?[...l,...r[s]]:l}}},K2=(e,t)=>{var s;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),o=r?K2(e.slice(1),r):void 0;if(o)return o;if(t.validators.length===0)return;const i=e.join(Rm);return(s=t.validators.find(({validator:a})=>a(i)))==null?void 0:s.classGroupId},Fv=/^\[(.+)\]$/,XR=e=>{if(Fv.test(e)){const t=Fv.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},qR=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return JR(Object.entries(e.classGroups),n).forEach(([i,s])=>{qp(s,r,i,t)}),r},qp=(e,t,n,r)=>{e.forEach(o=>{if(typeof o=="string"){const i=o===""?t:Vv(t,o);i.classGroupId=n;return}if(typeof o=="function"){if(QR(o)){qp(o(r),t,n,r);return}t.validators.push({validator:o,classGroupId:n});return}Object.entries(o).forEach(([i,s])=>{qp(s,Vv(t,i),n,r)})})},Vv=(e,t)=>{let n=e;return t.split(Rm).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},QR=e=>e.isThemeGetter,JR=(e,t)=>t?e.map(([n,r])=>{const o=r.map(i=>typeof i=="string"?t+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([s,a])=>[t+s,a])):i);return[n,o]}):e,eA=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const o=(i,s)=>{n.set(i,s),t++,t>e&&(t=0,r=n,n=new Map)};return{get(i){let s=n.get(i);if(s!==void 0)return s;if((s=r.get(i))!==void 0)return o(i,s),s},set(i,s){n.has(i)?n.set(i,s):o(i,s)}}},X2="!",tA=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,o=t[0],i=t.length,s=a=>{const l=[];let c=0,d=0,u;for(let _=0;_<a.length;_++){let m=a[_];if(c===0){if(m===o&&(r||a.slice(_,_+i)===t)){l.push(a.slice(d,_)),d=_+i;continue}if(m==="/"){u=_;continue}}m==="["?c++:m==="]"&&c--}const f=l.length===0?a:a.substring(d),p=f.startsWith(X2),y=p?f.substring(1):f,v=u&&u>d?u-d:void 0;return{modifiers:l,hasImportantModifier:p,baseClassName:y,maybePostfixModifierPosition:v}};return n?a=>n({className:a,parseClassName:s}):s},nA=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},rA=e=>({cache:eA(e.cacheSize),parseClassName:tA(e),...KR(e)}),oA=/\s+/,iA=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o}=t,i=[],s=e.trim().split(oA);let a="";for(let l=s.length-1;l>=0;l-=1){const c=s[l],{modifiers:d,hasImportantModifier:u,baseClassName:f,maybePostfixModifierPosition:p}=n(c);let y=!!p,v=r(y?f.substring(0,p):f);if(!v){if(!y){a=c+(a.length>0?" "+a:a);continue}if(v=r(f),!v){a=c+(a.length>0?" "+a:a);continue}y=!1}const _=nA(d).join(":"),m=u?_+X2:_,g=m+v;if(i.includes(g))continue;i.push(g);const w=o(v,y);for(let S=0;S<w.length;++S){const C=w[S];i.push(m+C)}a=c+(a.length>0?" "+a:a)}return a};function sA(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=q2(t))&&(r&&(r+=" "),r+=n);return r}const q2=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=q2(e[r]))&&(n&&(n+=" "),n+=t);return n};function aA(e,...t){let n,r,o,i=s;function s(l){const c=t.reduce((d,u)=>u(d),e());return n=rA(c),r=n.cache.get,o=n.cache.set,i=a,a(l)}function a(l){const c=r(l);if(c)return c;const d=iA(l,n);return o(l,d),d}return function(){return i(sA.apply(null,arguments))}}const je=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},Q2=/^\[(?:([a-z-]+):)?(.+)\]$/i,lA=/^\d+\/\d+$/,cA=new Set(["px","full","screen"]),uA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,dA=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,fA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,pA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,hA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Xn=e=>Mi(e)||cA.has(e)||lA.test(e),Rr=e=>ds(e,"length",SA),Mi=e=>!!e&&!Number.isNaN(Number(e)),vf=e=>ds(e,"number",Mi),Ps=e=>!!e&&Number.isInteger(Number(e)),mA=e=>e.endsWith("%")&&Mi(e.slice(0,-1)),Se=e=>Q2.test(e),Ar=e=>uA.test(e),gA=new Set(["length","size","percentage"]),vA=e=>ds(e,gA,J2),yA=e=>ds(e,"position",J2),xA=new Set(["image","url"]),wA=e=>ds(e,xA,CA),_A=e=>ds(e,"",bA),Is=()=>!0,ds=(e,t,n)=>{const r=Q2.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},SA=e=>dA.test(e)&&!fA.test(e),J2=()=>!1,bA=e=>pA.test(e),CA=e=>hA.test(e),EA=()=>{const e=je("colors"),t=je("spacing"),n=je("blur"),r=je("brightness"),o=je("borderColor"),i=je("borderRadius"),s=je("borderSpacing"),a=je("borderWidth"),l=je("contrast"),c=je("grayscale"),d=je("hueRotate"),u=je("invert"),f=je("gap"),p=je("gradientColorStops"),y=je("gradientColorStopPositions"),v=je("inset"),_=je("margin"),m=je("opacity"),g=je("padding"),w=je("saturate"),S=je("scale"),C=je("sepia"),N=je("skew"),E=je("space"),P=je("translate"),O=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],$=()=>["auto",Se,t],A=()=>[Se,t],L=()=>["",Xn,Rr],b=()=>["auto",Mi,Se],M=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],T=()=>["solid","dashed","dotted","double","none"],D=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],k=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",Se],z=()=>["auto","avoid","all","avoid-page","page","left","right","column"],U=()=>[Mi,Se];return{cacheSize:500,separator:":",theme:{colors:[Is],spacing:[Xn,Rr],blur:["none","",Ar,Se],brightness:U(),borderColor:[e],borderRadius:["none","","full",Ar,Se],borderSpacing:A(),borderWidth:L(),contrast:U(),grayscale:I(),hueRotate:U(),invert:I(),gap:A(),gradientColorStops:[e],gradientColorStopPositions:[mA,Rr],inset:$(),margin:$(),opacity:U(),padding:A(),saturate:U(),scale:U(),sepia:I(),skew:U(),space:A(),translate:A()},classGroups:{aspect:[{aspect:["auto","square","video",Se]}],container:["container"],columns:[{columns:[Ar]}],"break-after":[{"break-after":z()}],"break-before":[{"break-before":z()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...M(),Se]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:O()}],"overscroll-x":[{"overscroll-x":O()}],"overscroll-y":[{"overscroll-y":O()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[v]}],"inset-x":[{"inset-x":[v]}],"inset-y":[{"inset-y":[v]}],start:[{start:[v]}],end:[{end:[v]}],top:[{top:[v]}],right:[{right:[v]}],bottom:[{bottom:[v]}],left:[{left:[v]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Ps,Se]}],basis:[{basis:$()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Se]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",Ps,Se]}],"grid-cols":[{"grid-cols":[Is]}],"col-start-end":[{col:["auto",{span:["full",Ps,Se]},Se]}],"col-start":[{"col-start":b()}],"col-end":[{"col-end":b()}],"grid-rows":[{"grid-rows":[Is]}],"row-start-end":[{row:["auto",{span:[Ps,Se]},Se]}],"row-start":[{"row-start":b()}],"row-end":[{"row-end":b()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Se]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...k()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...k(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...k(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[g]}],px:[{px:[g]}],py:[{py:[g]}],ps:[{ps:[g]}],pe:[{pe:[g]}],pt:[{pt:[g]}],pr:[{pr:[g]}],pb:[{pb:[g]}],pl:[{pl:[g]}],m:[{m:[_]}],mx:[{mx:[_]}],my:[{my:[_]}],ms:[{ms:[_]}],me:[{me:[_]}],mt:[{mt:[_]}],mr:[{mr:[_]}],mb:[{mb:[_]}],ml:[{ml:[_]}],"space-x":[{"space-x":[E]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[E]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Se,t]}],"min-w":[{"min-w":[Se,t,"min","max","fit"]}],"max-w":[{"max-w":[Se,t,"none","full","min","max","fit","prose",{screen:[Ar]},Ar]}],h:[{h:[Se,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Se,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Se,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Se,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Ar,Rr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",vf]}],"font-family":[{font:[Is]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Se]}],"line-clamp":[{"line-clamp":["none",Mi,vf]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Xn,Se]}],"list-image":[{"list-image":["none",Se]}],"list-style-type":[{list:["none","disc","decimal",Se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[m]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[m]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...T(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Xn,Rr]}],"underline-offset":[{"underline-offset":["auto",Xn,Se]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:A()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Se]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[m]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...M(),yA]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",vA]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},wA]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[y]}],"gradient-via-pos":[{via:[y]}],"gradient-to-pos":[{to:[y]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[m]}],"border-style":[{border:[...T(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[m]}],"divide-style":[{divide:T()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-s":[{"border-s":[o]}],"border-color-e":[{"border-e":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...T()]}],"outline-offset":[{"outline-offset":[Xn,Se]}],"outline-w":[{outline:[Xn,Rr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:L()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[m]}],"ring-offset-w":[{"ring-offset":[Xn,Rr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Ar,_A]}],"shadow-color":[{shadow:[Is]}],opacity:[{opacity:[m]}],"mix-blend":[{"mix-blend":[...D(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":D()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Ar,Se]}],grayscale:[{grayscale:[c]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[u]}],saturate:[{saturate:[w]}],sepia:[{sepia:[C]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[u]}],"backdrop-opacity":[{"backdrop-opacity":[m]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[C]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Se]}],duration:[{duration:U()}],ease:[{ease:["linear","in","out","in-out",Se]}],delay:[{delay:U()}],animate:[{animate:["none","spin","ping","pulse","bounce",Se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[Ps,Se]}],"translate-x":[{"translate-x":[P]}],"translate-y":[{"translate-y":[P]}],"skew-x":[{"skew-x":[N]}],"skew-y":[{"skew-y":[N]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Se]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Se]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":A()}],"scroll-mx":[{"scroll-mx":A()}],"scroll-my":[{"scroll-my":A()}],"scroll-ms":[{"scroll-ms":A()}],"scroll-me":[{"scroll-me":A()}],"scroll-mt":[{"scroll-mt":A()}],"scroll-mr":[{"scroll-mr":A()}],"scroll-mb":[{"scroll-mb":A()}],"scroll-ml":[{"scroll-ml":A()}],"scroll-p":[{"scroll-p":A()}],"scroll-px":[{"scroll-px":A()}],"scroll-py":[{"scroll-py":A()}],"scroll-ps":[{"scroll-ps":A()}],"scroll-pe":[{"scroll-pe":A()}],"scroll-pt":[{"scroll-pt":A()}],"scroll-pr":[{"scroll-pr":A()}],"scroll-pb":[{"scroll-pb":A()}],"scroll-pl":[{"scroll-pl":A()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Se]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Xn,Rr,vf]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},kA=aA(EA);function we(...e){return kA(YR(e))}const NA=td("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),Ln=x.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...o},i)=>{const s=r?to:"button";return h.jsx(s,{className:we(NA({variant:t,size:n,className:e})),ref:i,...o})});Ln.displayName="Button";const lt=[];for(let e=0;e<256;++e)lt.push((e+256).toString(16).slice(1));function TA(e,t=0){return(lt[e[t+0]]+lt[e[t+1]]+lt[e[t+2]]+lt[e[t+3]]+"-"+lt[e[t+4]]+lt[e[t+5]]+"-"+lt[e[t+6]]+lt[e[t+7]]+"-"+lt[e[t+8]]+lt[e[t+9]]+"-"+lt[e[t+10]]+lt[e[t+11]]+lt[e[t+12]]+lt[e[t+13]]+lt[e[t+14]]+lt[e[t+15]]).toLowerCase()}let yf;const PA=new Uint8Array(16);function IA(){if(!yf){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");yf=crypto.getRandomValues.bind(crypto)}return yf(PA)}const RA=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Hv={randomUUID:RA};function Aa(e,t,n){if(Hv.randomUUID&&!t&&!e)return Hv.randomUUID();e=e||{};const r=e.random||(e.rng||IA)();return r[6]=r[6]&15|64,r[8]=r[8]&63|128,TA(r)}function AA(e,t){const n=x.createContext(t),r=i=>{const{children:s,...a}=i,l=x.useMemo(()=>a,Object.values(a));return h.jsx(n.Provider,{value:l,children:s})};r.displayName=e+"Provider";function o(i){const s=x.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function Xo(e,t=[]){let n=[];function r(i,s){const a=x.createContext(s),l=n.length;n=[...n,s];const c=u=>{var m;const{scope:f,children:p,...y}=u,v=((m=f==null?void 0:f[e])==null?void 0:m[l])||a,_=x.useMemo(()=>y,Object.values(y));return h.jsx(v.Provider,{value:_,children:p})};c.displayName=i+"Provider";function d(u,f){var v;const p=((v=f==null?void 0:f[e])==null?void 0:v[l])||a,y=x.useContext(p);if(y)return y;if(s!==void 0)return s;throw new Error(`\`${u}\` must be used within \`${i}\``)}return[c,d]}const o=()=>{const i=n.map(s=>x.createContext(s));return function(a){const l=(a==null?void 0:a[e])||i;return x.useMemo(()=>({[`__scope${e}`]:{...a,[e]:l}}),[a,l])}};return o.scopeName=e,[r,MA(o,...t)]}function MA(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:l,scopeName:c})=>{const u=l(i)[`__scope${c}`];return{...a,...u}},{});return x.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}function jA(e,t=[]){let n=[];function r(i,s){const a=x.createContext(s),l=n.length;n=[...n,s];function c(u){const{scope:f,children:p,...y}=u,v=(f==null?void 0:f[e][l])||a,_=x.useMemo(()=>y,Object.values(y));return h.jsx(v.Provider,{value:_,children:p})}function d(u,f){const p=(f==null?void 0:f[e][l])||a,y=x.useContext(p);if(y)return y;if(s!==void 0)return s;throw new Error(`\`${u}\` must be used within \`${i}\``)}return c.displayName=i+"Provider",[c,d]}const o=()=>{const i=n.map(s=>x.createContext(s));return function(a){const l=(a==null?void 0:a[e])||i;return x.useMemo(()=>({[`__scope${e}`]:{...a,[e]:l}}),[a,l])}};return o.scopeName=e,[r,OA(o,...t)]}function OA(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:l,scopeName:c})=>{const u=l(i)[`__scope${c}`];return{...a,...u}},{});return x.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}function nd(e){const t=e+"CollectionProvider",[n,r]=jA(t),[o,i]=n(t,{collectionRef:{current:null},itemMap:new Map}),s=p=>{const{scope:y,children:v}=p,_=de.useRef(null),m=de.useRef(new Map).current;return h.jsx(o,{scope:y,itemMap:m,collectionRef:_,children:v})};s.displayName=t;const a=e+"CollectionSlot",l=de.forwardRef((p,y)=>{const{scope:v,children:_}=p,m=i(a,v),g=Ae(y,m.collectionRef);return h.jsx(to,{ref:g,children:_})});l.displayName=a;const c=e+"CollectionItemSlot",d="data-radix-collection-item",u=de.forwardRef((p,y)=>{const{scope:v,children:_,...m}=p,g=de.useRef(null),w=Ae(y,g),S=i(c,v);return de.useEffect(()=>(S.itemMap.set(g,{ref:g,...m}),()=>void S.itemMap.delete(g))),h.jsx(to,{[d]:"",ref:w,children:_})});u.displayName=c;function f(p){const y=i(e+"CollectionConsumer",p);return de.useCallback(()=>{const _=y.collectionRef.current;if(!_)return[];const m=Array.from(_.querySelectorAll(`[${d}]`));return Array.from(y.itemMap.values()).sort((S,C)=>m.indexOf(S.ref.current)-m.indexOf(C.ref.current))},[y.collectionRef,y.itemMap])}return[{Provider:s,Slot:l,ItemSlot:u},f,r]}function he(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Dt(e){const t=x.useRef(e);return x.useEffect(()=>{t.current=e}),x.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function Hn({prop:e,defaultProp:t,onChange:n=()=>{}}){const[r,o]=DA({defaultProp:t,onChange:n}),i=e!==void 0,s=i?e:r,a=Dt(n),l=x.useCallback(c=>{if(i){const u=typeof c=="function"?c(e):c;u!==e&&a(u)}else o(c)},[i,e,o,a]);return[s,l]}function DA({defaultProp:e,onChange:t}){const n=x.useState(e),[r]=n,o=x.useRef(r),i=Dt(t);return x.useEffect(()=>{o.current!==r&&(i(r),o.current=r)},[r,o,i]),n}var LA=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],xe=LA.reduce((e,t)=>{const n=x.forwardRef((r,o)=>{const{asChild:i,...s}=r,a=i?to:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),h.jsx(a,{...s,ref:o})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function e_(e,t){e&&Go.flushSync(()=>e.dispatchEvent(t))}var pt=globalThis!=null&&globalThis.document?x.useLayoutEffect:()=>{};function zA(e,t){return x.useReducer((n,r)=>t[n][r]??n,e)}var kr=e=>{const{present:t,children:n}=e,r=$A(t),o=typeof n=="function"?n({present:r.isPresent}):x.Children.only(n),i=Ae(r.ref,FA(o));return typeof n=="function"||r.isPresent?x.cloneElement(o,{ref:i}):null};kr.displayName="Presence";function $A(e){const[t,n]=x.useState(),r=x.useRef({}),o=x.useRef(e),i=x.useRef("none"),s=e?"mounted":"unmounted",[a,l]=zA(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return x.useEffect(()=>{const c=Ul(r.current);i.current=a==="mounted"?c:"none"},[a]),pt(()=>{const c=r.current,d=o.current;if(d!==e){const f=i.current,p=Ul(c);e?l("MOUNT"):p==="none"||(c==null?void 0:c.display)==="none"?l("UNMOUNT"):l(d&&f!==p?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),pt(()=>{if(t){let c;const d=t.ownerDocument.defaultView??window,u=p=>{const v=Ul(r.current).includes(p.animationName);if(p.target===t&&v&&(l("ANIMATION_END"),!o.current)){const _=t.style.animationFillMode;t.style.animationFillMode="forwards",c=d.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=_)})}},f=p=>{p.target===t&&(i.current=Ul(r.current))};return t.addEventListener("animationstart",f),t.addEventListener("animationcancel",u),t.addEventListener("animationend",u),()=>{d.clearTimeout(c),t.removeEventListener("animationstart",f),t.removeEventListener("animationcancel",u),t.removeEventListener("animationend",u)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:x.useCallback(c=>{c&&(r.current=getComputedStyle(c)),n(c)},[])}}function Ul(e){return(e==null?void 0:e.animationName)||"none"}function FA(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var VA=Nh.useId||(()=>{}),HA=0;function xn(e){const[t,n]=x.useState(VA());return pt(()=>{n(r=>r??String(HA++))},[e]),t?`radix-${t}`:""}var Am="Collapsible",[BA,t_]=Xo(Am),[UA,Mm]=BA(Am),n_=x.forwardRef((e,t)=>{const{__scopeCollapsible:n,open:r,defaultOpen:o,disabled:i,onOpenChange:s,...a}=e,[l=!1,c]=Hn({prop:r,defaultProp:o,onChange:s});return h.jsx(UA,{scope:n,disabled:i,contentId:xn(),open:l,onOpenToggle:x.useCallback(()=>c(d=>!d),[c]),children:h.jsx(xe.div,{"data-state":Om(l),"data-disabled":i?"":void 0,...a,ref:t})})});n_.displayName=Am;var r_="CollapsibleTrigger",o_=x.forwardRef((e,t)=>{const{__scopeCollapsible:n,...r}=e,o=Mm(r_,n);return h.jsx(xe.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Om(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...r,ref:t,onClick:he(e.onClick,o.onOpenToggle)})});o_.displayName=r_;var jm="CollapsibleContent",i_=x.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=Mm(jm,e.__scopeCollapsible);return h.jsx(kr,{present:n||o.open,children:({present:i})=>h.jsx(WA,{...r,ref:t,present:i})})});i_.displayName=jm;var WA=x.forwardRef((e,t)=>{const{__scopeCollapsible:n,present:r,children:o,...i}=e,s=Mm(jm,n),[a,l]=x.useState(r),c=x.useRef(null),d=Ae(t,c),u=x.useRef(0),f=u.current,p=x.useRef(0),y=p.current,v=s.open||a,_=x.useRef(v),m=x.useRef();return x.useEffect(()=>{const g=requestAnimationFrame(()=>_.current=!1);return()=>cancelAnimationFrame(g)},[]),pt(()=>{const g=c.current;if(g){m.current=m.current||{transitionDuration:g.style.transitionDuration,animationName:g.style.animationName},g.style.transitionDuration="0s",g.style.animationName="none";const w=g.getBoundingClientRect();u.current=w.height,p.current=w.width,_.current||(g.style.transitionDuration=m.current.transitionDuration,g.style.animationName=m.current.animationName),l(r)}},[s.open,r]),h.jsx(xe.div,{"data-state":Om(s.open),"data-disabled":s.disabled?"":void 0,id:s.contentId,hidden:!v,...i,ref:d,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":y?`${y}px`:void 0,...e.style},children:v&&o})});function Om(e){return e?"open":"closed"}var ZA=n_,GA=o_,YA=i_,KA=x.createContext(void 0);function rd(e){const t=x.useContext(KA);return e||t||"ltr"}var Nr="Accordion",XA=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[Dm,qA,QA]=nd(Nr),[od,pz]=Xo(Nr,[QA,t_]),Lm=t_(),s_=de.forwardRef((e,t)=>{const{type:n,...r}=e,o=r,i=r;return h.jsx(Dm.Provider,{scope:e.__scopeAccordion,children:n==="multiple"?h.jsx(n6,{...i,ref:t}):h.jsx(t6,{...o,ref:t})})});s_.displayName=Nr;var[a_,JA]=od(Nr),[l_,e6]=od(Nr,{collapsible:!1}),t6=de.forwardRef((e,t)=>{const{value:n,defaultValue:r,onValueChange:o=()=>{},collapsible:i=!1,...s}=e,[a,l]=Hn({prop:n,defaultProp:r,onChange:o});return h.jsx(a_,{scope:e.__scopeAccordion,value:a?[a]:[],onItemOpen:l,onItemClose:de.useCallback(()=>i&&l(""),[i,l]),children:h.jsx(l_,{scope:e.__scopeAccordion,collapsible:i,children:h.jsx(c_,{...s,ref:t})})})}),n6=de.forwardRef((e,t)=>{const{value:n,defaultValue:r,onValueChange:o=()=>{},...i}=e,[s=[],a]=Hn({prop:n,defaultProp:r,onChange:o}),l=de.useCallback(d=>a((u=[])=>[...u,d]),[a]),c=de.useCallback(d=>a((u=[])=>u.filter(f=>f!==d)),[a]);return h.jsx(a_,{scope:e.__scopeAccordion,value:s,onItemOpen:l,onItemClose:c,children:h.jsx(l_,{scope:e.__scopeAccordion,collapsible:!0,children:h.jsx(c_,{...i,ref:t})})})}),[r6,id]=od(Nr),c_=de.forwardRef((e,t)=>{const{__scopeAccordion:n,disabled:r,dir:o,orientation:i="vertical",...s}=e,a=de.useRef(null),l=Ae(a,t),c=qA(n),u=rd(o)==="ltr",f=he(e.onKeyDown,p=>{var P;if(!XA.includes(p.key))return;const y=p.target,v=c().filter(O=>{var j;return!((j=O.ref.current)!=null&&j.disabled)}),_=v.findIndex(O=>O.ref.current===y),m=v.length;if(_===-1)return;p.preventDefault();let g=_;const w=0,S=m-1,C=()=>{g=_+1,g>S&&(g=w)},N=()=>{g=_-1,g<w&&(g=S)};switch(p.key){case"Home":g=w;break;case"End":g=S;break;case"ArrowRight":i==="horizontal"&&(u?C():N());break;case"ArrowDown":i==="vertical"&&C();break;case"ArrowLeft":i==="horizontal"&&(u?N():C());break;case"ArrowUp":i==="vertical"&&N();break}const E=g%m;(P=v[E].ref.current)==null||P.focus()});return h.jsx(r6,{scope:n,disabled:r,direction:o,orientation:i,children:h.jsx(Dm.Slot,{scope:n,children:h.jsx(xe.div,{...s,"data-orientation":i,ref:l,onKeyDown:r?void 0:f})})})}),nu="AccordionItem",[o6,zm]=od(nu),sd=de.forwardRef((e,t)=>{const{__scopeAccordion:n,value:r,...o}=e,i=id(nu,n),s=JA(nu,n),a=Lm(n),l=xn(),c=r&&s.value.includes(r)||!1,d=i.disabled||e.disabled;return h.jsx(o6,{scope:n,open:c,disabled:d,triggerId:l,children:h.jsx(ZA,{"data-orientation":i.orientation,"data-state":h_(c),...a,...o,ref:t,disabled:d,open:c,onOpenChange:u=>{u?s.onItemOpen(r):s.onItemClose(r)}})})});sd.displayName=nu;var u_="AccordionHeader",d_=de.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=id(Nr,n),i=zm(u_,n);return h.jsx(xe.h3,{"data-orientation":o.orientation,"data-state":h_(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});d_.displayName=u_;var Qp="AccordionTrigger",f_=de.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=id(Nr,n),i=zm(Qp,n),s=e6(Qp,n),a=Lm(n);return h.jsx(Dm.ItemSlot,{scope:n,children:h.jsx(GA,{"aria-disabled":i.open&&!s.collapsible||void 0,"data-orientation":o.orientation,id:i.triggerId,...a,...r,ref:t})})});f_.displayName=Qp;var p_="AccordionContent",$m=de.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=id(Nr,n),i=zm(p_,n),s=Lm(n);return h.jsx(YA,{role:"region","aria-labelledby":i.triggerId,"data-orientation":o.orientation,...s,...r,ref:t,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});$m.displayName=p_;function h_(e){return e?"open":"closed"}var i6=s_,s6=sd,a6=d_,m_=f_,g_=$m;function fs(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i<r.length;i++)o=r[i],!(t.indexOf(o)>=0)&&(n[o]=e[o]);return n}var l6=["color"],c6=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,l6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))}),u6=["color"],d6=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,u6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))}),f6=["color"],v_=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,f6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))}),p6=["color"],h6=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,p6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))}),m6=["color"],y_=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,m6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))}),g6=["color"],v6=x.forwardRef(function(e,t){var n=e.color,r=n===void 0?"currentColor":n,o=fs(e,g6);return x.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},o,{ref:t}),x.createElement("path",{d:"M5.5 4.625C6.12132 4.625 6.625 4.12132 6.625 3.5C6.625 2.87868 6.12132 2.375 5.5 2.375C4.87868 2.375 4.375 2.87868 4.375 3.5C4.375 4.12132 4.87868 4.625 5.5 4.625ZM9.5 4.625C10.1213 4.625 10.625 4.12132 10.625 3.5C10.625 2.87868 10.1213 2.375 9.5 2.375C8.87868 2.375 8.375 2.87868 8.375 3.5C8.375 4.12132 8.87868 4.625 9.5 4.625ZM10.625 7.5C10.625 8.12132 10.1213 8.625 9.5 8.625C8.87868 8.625 8.375 8.12132 8.375 7.5C8.375 6.87868 8.87868 6.375 9.5 6.375C10.1213 6.375 10.625 6.87868 10.625 7.5ZM5.5 8.625C6.12132 8.625 6.625 8.12132 6.625 7.5C6.625 6.87868 6.12132 6.375 5.5 6.375C4.87868 6.375 4.375 6.87868 4.375 7.5C4.375 8.12132 4.87868 8.625 5.5 8.625ZM10.625 11.5C10.625 12.1213 10.1213 12.625 9.5 12.625C8.87868 12.625 8.375 12.1213 8.375 11.5C8.375 10.8787 8.87868 10.375 9.5 10.375C10.1213 10.375 10.625 10.8787 10.625 11.5ZM5.5 12.625C6.12132 12.625 6.625 12.1213 6.625 11.5C6.625 10.8787 6.12132 10.375 5.5 10.375C4.87868 10.375 4.375 10.8787 4.375 11.5C4.375 12.1213 4.87868 12.625 5.5 12.625Z",fill:r,fillRule:"evenodd",clipRule:"evenodd"}))});const Fm=i6,x_=x.forwardRef(({className:e,...t},n)=>h.jsx(s6,{ref:n,className:we("border-b",e),...t}));x_.displayName="AccordionItem";const ad=x.forwardRef(({className:e,children:t,...n},r)=>h.jsx(a6,{className:"flex",children:h.jsxs(m_,{ref:r,className:we("flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180",e),...n,children:[t,h.jsx(v_,{className:"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200"})]})}));ad.displayName=m_.displayName;const Vm=x.forwardRef(({className:e,children:t,...n},r)=>h.jsx(g_,{ref:r,className:"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...n,children:h.jsx("div",{className:we("pb-4 pt-0",e),children:t})}));Vm.displayName=g_.displayName;const Bv=e=>{let t;const n=new Set,r=(c,d)=>{const u=typeof c=="function"?c(t):c;if(!Object.is(u,t)){const f=t;t=d??(typeof u!="object"||u===null)?u:Object.assign({},t,u),n.forEach(p=>p(t,f))}},o=()=>t,a={setState:r,getState:o,getInitialState:()=>l,subscribe:c=>(n.add(c),()=>n.delete(c))},l=t=e(r,o,a);return a},y6=e=>e?Bv(e):Bv,x6=e=>e;function w6(e,t=x6){const n=de.useSyncExternalStore(e.subscribe,()=>t(e.getState()),()=>t(e.getInitialState()));return de.useDebugValue(n),n}const Uv=e=>{const t=y6(e),n=r=>w6(t,r);return Object.assign(n,t),n},_6=e=>e?Uv(e):Uv,qn={label:"",envVars:[],ports:[]},S6=[{title:"Repository",items:[{title:"Github",init:{...qn},type:"github"},{title:"Gitlab",init:{...qn},type:"github"},{title:"Create new",init:{...qn},type:"github"}]},{title:"Services",items:[{title:"Service",init:{...qn},type:"app"}]},{title:"Storage",items:[{title:"Volume",init:{...qn},type:"volume"},{title:"PostgreSQL",init:{...qn,ports:[{id:"connection",name:"connection",value:5432}]},type:"postgresql"},{title:"MongoDB",init:{...qn,ports:[{id:"connection",name:"connection",value:27017}]},type:"mongodb"}]},{title:"Gateways",items:[{title:"HTTPS",init:{...qn},type:"gateway-https"},{title:"TCP",init:{...qn},type:"gateway-tcp"}]}];function w_(e,t){try{const n=new Map(t.networks.map(s=>[s.domain,s.name])),r=e.filter(s=>s.type==="gateway-https").filter(s=>s.data.https!==void 0),o=e.filter(s=>s.type==="gateway-tcp").filter(s=>s.data.exposed!==void 0),i=s=>s.data.ports.map(a=>[s.id,a.id,a.name]).flatMap(a=>o.flatMap(l=>(l.data.exposed||[]).filter(c=>c.serviceId===a[0]&&c.portId===a[1]).map(()=>({network:n.get(l.data.network),subdomain:l.data.subdomain,port:{name:a[2]}}))));return{service:e.filter(s=>s.type==="app").map(s=>({type:s.data.type,name:s.data.label,source:{repository:e.filter(a=>a.type==="github").find(a=>a.id===s.data.repository.id).data.address,branch:s.data.repository.branch,rootDir:s.data.repository.rootDir},ports:(s.data.ports||[]).map(a=>({name:a.name,value:a.value,protocol:"TCP"})),env:(s.data.envVars||[]).filter(a=>"name"in a).map(a=>({name:a.name,alias:"alias"in a?a.alias:void 0})),ingress:(a=>{if(a!==void 0)return{network:n.get(a.data.network),subdomain:a.data.subdomain,port:{name:s.data.ports.find(l=>l.id===a.data.https.portId).name},auth:{enabled:!1}}})(r.find(a=>a.data.https.serviceId===s.id)),expose:i(s)})),volume:e.filter(s=>s.type==="volume").map(s=>({name:s.data.label,accessMode:s.data.type,size:s.data.size})),postgresql:e.filter(s=>s.type==="postgresql").map(s=>({name:s.data.label,size:"1Gi",expose:i(s).map(a=>({network:a.network,subdomain:a.subdomain}))})),mongodb:e.filter(s=>s.type==="mongodb").map(s=>({name:s.data.label,size:"1Gi",expose:i(s).map(a=>({network:a.network,subdomain:a.subdomain}))}))}}catch(n){return console.log(n),null}}function b6(...e){return t=>e.flatMap(n=>n(t))}function Wv(e){switch(e){case"FATAL":return 0;case"WARNING":return 1;case"INFO":return 2}}function C6(e){switch(e){case"github":return 0;case"app":return 1;case"volume":return 2;case"postgresql":return 3;case"mongodb":return 4;case"gateway-https":return 5;case void 0:return 100}}function E6(e){return t=>{const n=new Map(t.map(r=>[r.id,C6(r.type)]));return e(t).sort((r,o)=>{const i=Wv(r.type),s=Wv(o.type);if(r.nodeId===void 0&&o.nodeId===void 0)return i!==s?i-s:r.id.localeCompare(o.id);if(r.nodeId===void 0)return-1;if(o.nodeId===void 0)return 1;if(r.nodeId===o.nodeId)return i!==s?i-s:r.id.localeCompare(o.id);const a=n.get(r.id),l=n.get(o.id);return a!==l?a-l:r.id.localeCompare(o.id)})}}function k6(){return E6(b6(N6,T6,P6,I6,R6))}function N6(e){return e.length>0?[]:[{id:"no-nodes",type:"FATAL",message:"Start by importing application source code",onHighlight:t=>t.setHighlightCategory("repository",!0),onLooseHighlight:t=>t.setHighlightCategory("repository",!1)}]}function T6(e){const t=e.filter(o=>o.type==="github"),n=t.filter(o=>o.data==null||o.data.address==null||o.data.address==="").map(o=>({id:`${o.id}-no-address`,type:"FATAL",nodeId:o.id,message:"Configure repository address",onHighlight:i=>i.updateNode(o.id,{selected:!0}),onLooseHighlight:i=>i.updateNode(o.id,{selected:!1})})),r=t.filter(o=>!e.some(i=>{var s,a;return i.type==="app"&&((a=(s=i.data)==null?void 0:s.repository)==null?void 0:a.id)===o.id})).map(o=>({id:`${o.id}-no-app`,type:"WARNING",nodeId:o.id,message:"Connect to service",onHighlight:i=>i.setHighlightCategory("Services",!0),onLooseHighlight:i=>i.setHighlightCategory("Services",!1)}));return n.concat(r)}function P6(e){const t=e.filter(l=>l.type==="app"),n=t.filter(l=>l.data==null||l.data.label==null||l.data.label==="").map(l=>({id:`${l.id}-no-name`,type:"FATAL",nodeId:l.id,message:"Name the service",onHighlight:c=>c.updateNode(l.id,{selected:!0}),onLooseHighlight:c=>c.updateNode(l.id,{selected:!1}),onClick:c=>{c.updateNode(l.id,{selected:!0}),c.updateNodeData(l.id,{activeField:"name"})}})),r=t.filter(l=>l.data==null||l.data.repository==null||l.data.repository.id==="").map(l=>({id:`${l.id}-no-repo`,type:"FATAL",nodeId:l.id,message:"Connect to source repository",onHighlight:c=>c.updateNode(l.id,{selected:!0}),onLooseHighlight:c=>c.updateNode(l.id,{selected:!1})})),o=t.filter(l=>l.data==null||l.data.type==null).map(l=>({id:`${l.id}-no-runtime`,type:"FATAL",nodeId:l.id,message:"Choose runtime",onHighlight:c=>c.updateNode(l.id,{selected:!0}),onLooseHighlight:c=>c.updateNode(l.id,{selected:!1}),onClick:c=>{c.updateNode(l.id,{selected:!0}),c.updateNodeData(l.id,{activeField:"type"})}})),i=t.filter(l=>l.data==null||l.data.ports==null||l.data.ports.length===0).map(l=>({id:`${l.id}-no-ports`,type:"INFO",nodeId:l.id,message:"Expose ports",onHighlight:c=>c.updateNode(l.id,{selected:!0}),onLooseHighlight:c=>c.updateNode(l.id,{selected:!1})})),s=t.flatMap(l=>l.data==null?[]:(l.data.ports||[]).filter(c=>!e.filter(d=>d.type==="gateway-https").some(d=>!!(d.data&&d.data.https&&d.data.https.serviceId===l.id&&d.data.https.portId===c.id))).map(c=>({id:`${l.id}-${c.id}-no-ingress`,type:"WARNING",nodeId:l.id,message:`Connect to ingress: ${c.name} - ${c.value}`,onHighlight:d=>{d.updateNode(l.id,{selected:!0}),d.setHighlightCategory("gateways",!0)},onLooseHighlight:d=>{d.updateNode(l.id,{selected:!1}),d.setHighlightCategory("gateways",!1)}}))),a=t.filter(l=>l.data!=null&&l.data.ports!=null).flatMap(l=>l.data.ports.map(c=>{if(!(e.filter(u=>u.type==="gateway-https").filter(u=>u.data&&u.data.https&&u.data.https.serviceId===l.id&&u.data.https.portId===c.id).length<2))return{id:`${l.id}-${c.id}-multiple-ingress`,type:"FATAL",nodeId:l.id,message:`Can not expose same port using multiple ingresses: ${c.name} - ${c.value}`,onHighlight:u=>u.updateNode(l.id,{selected:!0}),onLooseHighlight:u=>u.updateNode(l.id,{selected:!1})}})).filter(l=>l!==void 0);return n.concat(r).concat(o).concat(i).concat(s).concat(a)}function I6(e){const t=e.filter(o=>o.type==="gateway-https"),n=t.filter(o=>o.data==null||o.data.network==null||o.data.network==""||o.data.subdomain==null||o.data.subdomain=="").map(o=>({id:`${o.id}-no-network`,type:"FATAL",nodeId:o.id,message:"Network and subdomain must be defined",onHighlight:i=>i.updateNode(o.id,{selected:!0}),onLooseHighlight:i=>i.updateNode(o.id,{selected:!1})})),r=t.filter(o=>o.data==null||o.data.https==null||o.data.https.serviceId==null||o.data.https.serviceId==""||o.data.https.portId==null||o.data.https.portId=="").map(o=>({id:`${o.id}-not-connected`,type:"FATAL",nodeId:o.id,message:"Connect to a service port",onHighlight:i=>i.updateNode(o.id,{selected:!0}),onLooseHighlight:i=>i.updateNode(o.id,{selected:!1})}));return n.concat(r)}function R6(e){const t=e.filter(o=>o.type==="gateway-tcp"),n=t.filter(o=>o.data==null||o.data.network==null||o.data.network==""||o.data.subdomain==null||o.data.subdomain=="").map(o=>({id:`${o.id}-no-network`,type:"FATAL",nodeId:o.id,message:"Network and subdomain must be defined",onHighlight:i=>i.updateNode(o.id,{selected:!0}),onLooseHighlight:i=>i.updateNode(o.id,{selected:!1})})),r=t.filter(o=>o.data==null||o.data.exposed==null||o.data.exposed.length===0).map(o=>({id:`${o.id}-not-connected`,type:"FATAL",nodeId:o.id,message:"Connect to a service port",onHighlight:i=>i.updateNode(o.id,{selected:!0}),onLooseHighlight:i=>i.updateNode(o.id,{selected:!1})}));return n.concat(r)}var ke;(function(e){e.assertEqual=o=>o;function t(o){}e.assertIs=t;function n(o){throw new Error}e.assertNever=n,e.arrayToEnum=o=>{const i={};for(const s of o)i[s]=s;return i},e.getValidEnumValues=o=>{const i=e.objectKeys(o).filter(a=>typeof o[o[a]]!="number"),s={};for(const a of i)s[a]=o[a];return e.objectValues(s)},e.objectValues=o=>e.objectKeys(o).map(function(i){return o[i]}),e.objectKeys=typeof Object.keys=="function"?o=>Object.keys(o):o=>{const i=[];for(const s in o)Object.prototype.hasOwnProperty.call(o,s)&&i.push(s);return i},e.find=(o,i)=>{for(const s of o)if(i(s))return s},e.isInteger=typeof Number.isInteger=="function"?o=>Number.isInteger(o):o=>typeof o=="number"&&isFinite(o)&&Math.floor(o)===o;function r(o,i=" | "){return o.map(s=>typeof s=="string"?`'${s}'`:s).join(i)}e.joinValues=r,e.jsonStringifyReplacer=(o,i)=>typeof i=="bigint"?i.toString():i})(ke||(ke={}));var Jp;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(Jp||(Jp={}));const le=ke.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Fr=e=>{switch(typeof e){case"undefined":return le.undefined;case"string":return le.string;case"number":return isNaN(e)?le.nan:le.number;case"boolean":return le.boolean;case"function":return le.function;case"bigint":return le.bigint;case"symbol":return le.symbol;case"object":return Array.isArray(e)?le.array:e===null?le.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?le.promise:typeof Map<"u"&&e instanceof Map?le.map:typeof Set<"u"&&e instanceof Set?le.set:typeof Date<"u"&&e instanceof Date?le.date:le.object;default:return le.unknown}},J=ke.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),A6=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class Zt extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(i){return i.message},r={_errors:[]},o=i=>{for(const s of i.issues)if(s.code==="invalid_union")s.unionErrors.map(o);else if(s.code==="invalid_return_type")o(s.returnTypeError);else if(s.code==="invalid_arguments")o(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;l<s.path.length;){const c=s.path[l];l===s.path.length-1?(a[c]=a[c]||{_errors:[]},a[c]._errors.push(n(s))):a[c]=a[c]||{_errors:[]},a=a[c],l++}}};return o(this),r}static assert(t){if(!(t instanceof Zt))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,ke.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=n=>n.message){const n={},r=[];for(const o of this.issues)o.path.length>0?(n[o.path[0]]=n[o.path[0]]||[],n[o.path[0]].push(t(o))):r.push(t(o));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}Zt.create=e=>new Zt(e);const ts=(e,t)=>{let n;switch(e.code){case J.invalid_type:e.received===le.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case J.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,ke.jsonStringifyReplacer)}`;break;case J.unrecognized_keys:n=`Unrecognized key(s) in object: ${ke.joinValues(e.keys,", ")}`;break;case J.invalid_union:n="Invalid input";break;case J.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${ke.joinValues(e.options)}`;break;case J.invalid_enum_value:n=`Invalid enum value. Expected ${ke.joinValues(e.options)}, received '${e.received}'`;break;case J.invalid_arguments:n="Invalid function arguments";break;case J.invalid_return_type:n="Invalid function return type";break;case J.invalid_date:n="Invalid date";break;case J.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:ke.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case J.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case J.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case J.custom:n="Invalid input";break;case J.invalid_intersection_types:n="Intersection results could not be merged";break;case J.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case J.not_finite:n="Number must be finite";break;default:n=t.defaultError,ke.assertNever(e)}return{message:n}};let __=ts;function M6(e){__=e}function ru(){return __}const ou=e=>{const{data:t,path:n,errorMaps:r,issueData:o}=e,i=[...n,...o.path||[]],s={...o,path:i};if(o.message!==void 0)return{...o,path:i,message:o.message};let a="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)a=c(s,{data:t,defaultError:a}).message;return{...o,path:i,message:a}},j6=[];function se(e,t){const n=ru(),r=ou({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===ts?void 0:ts].filter(o=>!!o)});e.common.issues.push(r)}class yt{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const o of n){if(o.status==="aborted")return ve;o.status==="dirty"&&t.dirty(),r.push(o.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const o of n){const i=await o.key,s=await o.value;r.push({key:i,value:s})}return yt.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const o of n){const{key:i,value:s}=o;if(i.status==="aborted"||s.status==="aborted")return ve;i.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),i.value!=="__proto__"&&(typeof s.value<"u"||o.alwaysSet)&&(r[i.value]=s.value)}return{status:t.value,value:r}}}const ve=Object.freeze({status:"aborted"}),bi=e=>({status:"dirty",value:e}),St=e=>({status:"valid",value:e}),eh=e=>e.status==="aborted",th=e=>e.status==="dirty",Ma=e=>e.status==="valid",ja=e=>typeof Promise<"u"&&e instanceof Promise;function iu(e,t,n,r){if(typeof t=="function"?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t.get(e)}function S_(e,t,n,r,o){if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,n),n}var fe;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(fe||(fe={}));var Fs,Vs;class Bn{constructor(t,n,r,o){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=o}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const Zv=(e,t)=>{if(Ma(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Zt(e.common.issues);return this._error=n,this._error}}};function _e(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:o}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:o}:{errorMap:(s,a)=>{var l,c;const{message:d}=e;return s.code==="invalid_enum_value"?{message:d??a.defaultError}:typeof a.data>"u"?{message:(l=d??r)!==null&&l!==void 0?l:a.defaultError}:s.code!=="invalid_type"?{message:a.defaultError}:{message:(c=d??n)!==null&&c!==void 0?c:a.defaultError}},description:o}}class Ce{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return Fr(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Fr(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new yt,ctx:{common:t.parent.common,data:t.data,parsedType:Fr(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(ja(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const o={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Fr(t)},i=this._parseSync({data:t,path:o.path,parent:o});return Zv(o,i)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Fr(t)},o=this._parse({data:t,path:r.path,parent:r}),i=await(ja(o)?o:Promise.resolve(o));return Zv(r,i)}refine(t,n){const r=o=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(o):n;return this._refinement((o,i)=>{const s=t(o),a=()=>i.addIssue({code:J.custom,...r(o)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,o)=>t(r)?!0:(o.addIssue(typeof n=="function"?n(r,o):n),!1))}_refinement(t){return new Cn({schema:this,typeName:ge.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return zn.create(this,this._def)}nullable(){return io.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return wn.create(this,this._def)}promise(){return rs.create(this,this._def)}or(t){return za.create([this,t],this._def)}and(t){return $a.create(this,t,this._def)}transform(t){return new Cn({..._e(this._def),schema:this,typeName:ge.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new Ua({..._e(this._def),innerType:this,defaultValue:n,typeName:ge.ZodDefault})}brand(){return new Hm({typeName:ge.ZodBranded,type:this,..._e(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new Wa({..._e(this._def),innerType:this,catchValue:n,typeName:ge.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return al.create(this,t)}readonly(){return Za.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const O6=/^c[^\s-]{8,}$/i,D6=/^[0-9a-z]+$/,L6=/^[0-9A-HJKMNP-TV-Z]{26}$/,z6=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,$6=/^[a-z0-9_-]{21}$/i,F6=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,V6=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,H6="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let xf;const B6=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,U6=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,W6=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,b_="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Z6=new RegExp(`^${b_}$`);function C_(e){let t="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";return e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`),t}function G6(e){return new RegExp(`^${C_(e)}$`)}function E_(e){let t=`${b_}T${C_(e)}`;const n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function Y6(e,t){return!!((t==="v4"||!t)&&B6.test(e)||(t==="v6"||!t)&&U6.test(e))}class gn extends Ce{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==le.string){const i=this._getOrReturnCtx(t);return se(i,{code:J.invalid_type,expected:le.string,received:i.parsedType}),ve}const r=new yt;let o;for(const i of this._def.checks)if(i.kind==="min")t.data.length<i.value&&(o=this._getOrReturnCtx(t,o),se(o,{code:J.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")t.data.length>i.value&&(o=this._getOrReturnCtx(t,o),se(o,{code:J.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){const s=t.data.length>i.value,a=t.data.length<i.value;(s||a)&&(o=this._getOrReturnCtx(t,o),s?se(o,{code:J.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):a&&se(o,{code:J.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")V6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"email",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")xf||(xf=new RegExp(H6,"u")),xf.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"emoji",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")z6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"uuid",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")$6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"nanoid",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")O6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"cuid",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")D6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"cuid2",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")L6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"ulid",code:J.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(t.data)}catch{o=this._getOrReturnCtx(t,o),se(o,{validation:"url",code:J.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"regex",code:J.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?t.data=t.data.trim():i.kind==="includes"?t.data.includes(i.value,i.position)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?t.data=t.data.toLowerCase():i.kind==="toUpperCase"?t.data=t.data.toUpperCase():i.kind==="startsWith"?t.data.startsWith(i.value)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?t.data.endsWith(i.value)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?E_(i).test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?Z6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?G6(i).test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{code:J.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?F6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"duration",code:J.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?Y6(t.data,i.version)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"ip",code:J.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?W6.test(t.data)||(o=this._getOrReturnCtx(t,o),se(o,{validation:"base64",code:J.invalid_string,message:i.message}),r.dirty()):ke.assertNever(i);return{status:r.value,value:t.data}}_regex(t,n,r){return this.refinement(o=>t.test(o),{validation:n,code:J.invalid_string,...fe.errToObj(r)})}_addCheck(t){return new gn({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...fe.errToObj(t)})}url(t){return this._addCheck({kind:"url",...fe.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...fe.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...fe.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...fe.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...fe.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...fe.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...fe.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...fe.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...fe.errToObj(t)})}datetime(t){var n,r;return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,local:(r=t==null?void 0:t.local)!==null&&r!==void 0?r:!1,...fe.errToObj(t==null?void 0:t.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,...fe.errToObj(t==null?void 0:t.message)})}duration(t){return this._addCheck({kind:"duration",...fe.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...fe.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...fe.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...fe.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...fe.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...fe.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...fe.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...fe.errToObj(n)})}nonempty(t){return this.min(1,fe.errToObj(t))}trim(){return new gn({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new gn({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new gn({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}}gn.create=e=>{var t;return new gn({checks:[],typeName:ge.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,..._e(e)})};function K6(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,o=n>r?n:r,i=parseInt(e.toFixed(o).replace(".","")),s=parseInt(t.toFixed(o).replace(".",""));return i%s/Math.pow(10,o)}class no extends Ce{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==le.number){const i=this._getOrReturnCtx(t);return se(i,{code:J.invalid_type,expected:le.number,received:i.parsedType}),ve}let r;const o=new yt;for(const i of this._def.checks)i.kind==="int"?ke.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),se(r,{code:J.invalid_type,expected:"integer",received:"float",message:i.message}),o.dirty()):i.kind==="min"?(i.inclusive?t.data<i.value:t.data<=i.value)&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty()):i.kind==="max"?(i.inclusive?t.data>i.value:t.data>=i.value)&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),o.dirty()):i.kind==="multipleOf"?K6(t.data,i.value)!==0&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()):i.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),se(r,{code:J.not_finite,message:i.message}),o.dirty()):ke.assertNever(i);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,fe.toString(n))}gt(t,n){return this.setLimit("min",t,!1,fe.toString(n))}lte(t,n){return this.setLimit("max",t,!0,fe.toString(n))}lt(t,n){return this.setLimit("max",t,!1,fe.toString(n))}setLimit(t,n,r,o){return new no({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:fe.toString(o)}]})}_addCheck(t){return new no({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:fe.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:fe.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:fe.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:fe.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:fe.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:fe.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:fe.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:fe.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:fe.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&ke.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.value<t)&&(t=r.value)}return Number.isFinite(n)&&Number.isFinite(t)}}no.create=e=>new no({checks:[],typeName:ge.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,..._e(e)});class ro extends Ce{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==le.bigint){const i=this._getOrReturnCtx(t);return se(i,{code:J.invalid_type,expected:le.bigint,received:i.parsedType}),ve}let r;const o=new yt;for(const i of this._def.checks)i.kind==="min"?(i.inclusive?t.data<i.value:t.data<=i.value)&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty()):i.kind==="max"?(i.inclusive?t.data>i.value:t.data>=i.value)&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),o.dirty()):i.kind==="multipleOf"?t.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),se(r,{code:J.not_multiple_of,multipleOf:i.value,message:i.message}),o.dirty()):ke.assertNever(i);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,fe.toString(n))}gt(t,n){return this.setLimit("min",t,!1,fe.toString(n))}lte(t,n){return this.setLimit("max",t,!0,fe.toString(n))}lt(t,n){return this.setLimit("max",t,!1,fe.toString(n))}setLimit(t,n,r,o){return new ro({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:fe.toString(o)}]})}_addCheck(t){return new ro({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:fe.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:fe.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:fe.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:fe.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:fe.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}}ro.create=e=>{var t;return new ro({checks:[],typeName:ge.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,..._e(e)})};class Oa extends Ce{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==le.boolean){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.boolean,received:r.parsedType}),ve}return St(t.data)}}Oa.create=e=>new Oa({typeName:ge.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,..._e(e)});class $o extends Ce{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==le.date){const i=this._getOrReturnCtx(t);return se(i,{code:J.invalid_type,expected:le.date,received:i.parsedType}),ve}if(isNaN(t.data.getTime())){const i=this._getOrReturnCtx(t);return se(i,{code:J.invalid_date}),ve}const r=new yt;let o;for(const i of this._def.checks)i.kind==="min"?t.data.getTime()<i.value&&(o=this._getOrReturnCtx(t,o),se(o,{code:J.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?t.data.getTime()>i.value&&(o=this._getOrReturnCtx(t,o),se(o,{code:J.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):ke.assertNever(i);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new $o({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:fe.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:fe.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}}$o.create=e=>new $o({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:ge.ZodDate,..._e(e)});class su extends Ce{_parse(t){if(this._getType(t)!==le.symbol){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.symbol,received:r.parsedType}),ve}return St(t.data)}}su.create=e=>new su({typeName:ge.ZodSymbol,..._e(e)});class Da extends Ce{_parse(t){if(this._getType(t)!==le.undefined){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.undefined,received:r.parsedType}),ve}return St(t.data)}}Da.create=e=>new Da({typeName:ge.ZodUndefined,..._e(e)});class La extends Ce{_parse(t){if(this._getType(t)!==le.null){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.null,received:r.parsedType}),ve}return St(t.data)}}La.create=e=>new La({typeName:ge.ZodNull,..._e(e)});class ns extends Ce{constructor(){super(...arguments),this._any=!0}_parse(t){return St(t.data)}}ns.create=e=>new ns({typeName:ge.ZodAny,..._e(e)});class Po extends Ce{constructor(){super(...arguments),this._unknown=!0}_parse(t){return St(t.data)}}Po.create=e=>new Po({typeName:ge.ZodUnknown,..._e(e)});class vr extends Ce{_parse(t){const n=this._getOrReturnCtx(t);return se(n,{code:J.invalid_type,expected:le.never,received:n.parsedType}),ve}}vr.create=e=>new vr({typeName:ge.ZodNever,..._e(e)});class au extends Ce{_parse(t){if(this._getType(t)!==le.undefined){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.void,received:r.parsedType}),ve}return St(t.data)}}au.create=e=>new au({typeName:ge.ZodVoid,..._e(e)});class wn extends Ce{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),o=this._def;if(n.parsedType!==le.array)return se(n,{code:J.invalid_type,expected:le.array,received:n.parsedType}),ve;if(o.exactLength!==null){const s=n.data.length>o.exactLength.value,a=n.data.length<o.exactLength.value;(s||a)&&(se(n,{code:s?J.too_big:J.too_small,minimum:a?o.exactLength.value:void 0,maximum:s?o.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:o.exactLength.message}),r.dirty())}if(o.minLength!==null&&n.data.length<o.minLength.value&&(se(n,{code:J.too_small,minimum:o.minLength.value,type:"array",inclusive:!0,exact:!1,message:o.minLength.message}),r.dirty()),o.maxLength!==null&&n.data.length>o.maxLength.value&&(se(n,{code:J.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>o.type._parseAsync(new Bn(n,s,n.path,a)))).then(s=>yt.mergeArray(r,s));const i=[...n.data].map((s,a)=>o.type._parseSync(new Bn(n,s,n.path,a)));return yt.mergeArray(r,i)}get element(){return this._def.type}min(t,n){return new wn({...this._def,minLength:{value:t,message:fe.toString(n)}})}max(t,n){return new wn({...this._def,maxLength:{value:t,message:fe.toString(n)}})}length(t,n){return new wn({...this._def,exactLength:{value:t,message:fe.toString(n)}})}nonempty(t){return this.min(1,t)}}wn.create=(e,t)=>new wn({type:e,minLength:null,maxLength:null,exactLength:null,typeName:ge.ZodArray,..._e(t)});function ai(e){if(e instanceof He){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=zn.create(ai(r))}return new He({...e._def,shape:()=>t})}else return e instanceof wn?new wn({...e._def,type:ai(e.element)}):e instanceof zn?zn.create(ai(e.unwrap())):e instanceof io?io.create(ai(e.unwrap())):e instanceof Un?Un.create(e.items.map(t=>ai(t))):e}class He extends Ce{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=ke.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==le.object){const c=this._getOrReturnCtx(t);return se(c,{code:J.invalid_type,expected:le.object,received:c.parsedType}),ve}const{status:r,ctx:o}=this._processInputParams(t),{shape:i,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof vr&&this._def.unknownKeys==="strip"))for(const c in o.data)s.includes(c)||a.push(c);const l=[];for(const c of s){const d=i[c],u=o.data[c];l.push({key:{status:"valid",value:c},value:d._parse(new Bn(o,u,o.path,c)),alwaysSet:c in o.data})}if(this._def.catchall instanceof vr){const c=this._def.unknownKeys;if(c==="passthrough")for(const d of a)l.push({key:{status:"valid",value:d},value:{status:"valid",value:o.data[d]}});else if(c==="strict")a.length>0&&(se(o,{code:J.unrecognized_keys,keys:a}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const d of a){const u=o.data[d];l.push({key:{status:"valid",value:d},value:c._parse(new Bn(o,u,o.path,d)),alwaysSet:d in o.data})}}return o.common.async?Promise.resolve().then(async()=>{const c=[];for(const d of l){const u=await d.key,f=await d.value;c.push({key:u,value:f,alwaysSet:d.alwaysSet})}return c}).then(c=>yt.mergeObjectSync(r,c)):yt.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return fe.errToObj,new He({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var o,i,s,a;const l=(s=(i=(o=this._def).errorMap)===null||i===void 0?void 0:i.call(o,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=fe.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new He({...this._def,unknownKeys:"strip"})}passthrough(){return new He({...this._def,unknownKeys:"passthrough"})}extend(t){return new He({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new He({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:ge.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new He({...this._def,catchall:t})}pick(t){const n={};return ke.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new He({...this._def,shape:()=>n})}omit(t){const n={};return ke.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new He({...this._def,shape:()=>n})}deepPartial(){return ai(this)}partial(t){const n={};return ke.objectKeys(this.shape).forEach(r=>{const o=this.shape[r];t&&!t[r]?n[r]=o:n[r]=o.optional()}),new He({...this._def,shape:()=>n})}required(t){const n={};return ke.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof zn;)i=i._def.innerType;n[r]=i}}),new He({...this._def,shape:()=>n})}keyof(){return k_(ke.objectKeys(this.shape))}}He.create=(e,t)=>new He({shape:()=>e,unknownKeys:"strip",catchall:vr.create(),typeName:ge.ZodObject,..._e(t)});He.strictCreate=(e,t)=>new He({shape:()=>e,unknownKeys:"strict",catchall:vr.create(),typeName:ge.ZodObject,..._e(t)});He.lazycreate=(e,t)=>new He({shape:e,unknownKeys:"strip",catchall:vr.create(),typeName:ge.ZodObject,..._e(t)});class za extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function o(i){for(const a of i)if(a.result.status==="valid")return a.result;for(const a of i)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=i.map(a=>new Zt(a.ctx.common.issues));return se(n,{code:J.invalid_union,unionErrors:s}),ve}if(n.common.async)return Promise.all(r.map(async i=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(o);{let i;const s=[];for(const l of r){const c={...n,common:{...n.common,issues:[]},parent:null},d=l._parseSync({data:n.data,path:n.path,parent:c});if(d.status==="valid")return d;d.status==="dirty"&&!i&&(i={result:d,ctx:c}),c.common.issues.length&&s.push(c.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;const a=s.map(l=>new Zt(l));return se(n,{code:J.invalid_union,unionErrors:a}),ve}}get options(){return this._def.options}}za.create=(e,t)=>new za({options:e,typeName:ge.ZodUnion,..._e(t)});const Jn=e=>e instanceof Va?Jn(e.schema):e instanceof Cn?Jn(e.innerType()):e instanceof Ha?[e.value]:e instanceof oo?e.options:e instanceof Ba?ke.objectValues(e.enum):e instanceof Ua?Jn(e._def.innerType):e instanceof Da?[void 0]:e instanceof La?[null]:e instanceof zn?[void 0,...Jn(e.unwrap())]:e instanceof io?[null,...Jn(e.unwrap())]:e instanceof Hm||e instanceof Za?Jn(e.unwrap()):e instanceof Wa?Jn(e._def.innerType):[];class ld extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==le.object)return se(n,{code:J.invalid_type,expected:le.object,received:n.parsedType}),ve;const r=this.discriminator,o=n.data[r],i=this.optionsMap.get(o);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(se(n,{code:J.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),ve)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const o=new Map;for(const i of n){const s=Jn(i.shape[t]);if(!s.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(o.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);o.set(a,i)}}return new ld({typeName:ge.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:o,..._e(r)})}}function nh(e,t){const n=Fr(e),r=Fr(t);if(e===t)return{valid:!0,data:e};if(n===le.object&&r===le.object){const o=ke.objectKeys(t),i=ke.objectKeys(e).filter(a=>o.indexOf(a)!==-1),s={...e,...t};for(const a of i){const l=nh(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===le.array&&r===le.array){if(e.length!==t.length)return{valid:!1};const o=[];for(let i=0;i<e.length;i++){const s=e[i],a=t[i],l=nh(s,a);if(!l.valid)return{valid:!1};o.push(l.data)}return{valid:!0,data:o}}else return n===le.date&&r===le.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}class $a extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t),o=(i,s)=>{if(eh(i)||eh(s))return ve;const a=nh(i.value,s.value);return a.valid?((th(i)||th(s))&&n.dirty(),{status:n.value,value:a.data}):(se(r,{code:J.invalid_intersection_types}),ve)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,s])=>o(i,s)):o(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}$a.create=(e,t,n)=>new $a({left:e,right:t,typeName:ge.ZodIntersection,..._e(n)});class Un extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==le.array)return se(r,{code:J.invalid_type,expected:le.array,received:r.parsedType}),ve;if(r.data.length<this._def.items.length)return se(r,{code:J.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),ve;!this._def.rest&&r.data.length>this._def.items.length&&(se(r,{code:J.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const i=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new Bn(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(i).then(s=>yt.mergeArray(n,s)):yt.mergeArray(n,i)}get items(){return this._def.items}rest(t){return new Un({...this._def,rest:t})}}Un.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Un({items:e,typeName:ge.ZodTuple,rest:null,..._e(t)})};class Fa extends Ce{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==le.object)return se(r,{code:J.invalid_type,expected:le.object,received:r.parsedType}),ve;const o=[],i=this._def.keyType,s=this._def.valueType;for(const a in r.data)o.push({key:i._parse(new Bn(r,a,r.path,a)),value:s._parse(new Bn(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?yt.mergeObjectAsync(n,o):yt.mergeObjectSync(n,o)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Ce?new Fa({keyType:t,valueType:n,typeName:ge.ZodRecord,..._e(r)}):new Fa({keyType:gn.create(),valueType:t,typeName:ge.ZodRecord,..._e(n)})}}class lu extends Ce{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==le.map)return se(r,{code:J.invalid_type,expected:le.map,received:r.parsedType}),ve;const o=this._def.keyType,i=this._def.valueType,s=[...r.data.entries()].map(([a,l],c)=>({key:o._parse(new Bn(r,a,r.path,[c,"key"])),value:i._parse(new Bn(r,l,r.path,[c,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const c=await l.key,d=await l.value;if(c.status==="aborted"||d.status==="aborted")return ve;(c.status==="dirty"||d.status==="dirty")&&n.dirty(),a.set(c.value,d.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const c=l.key,d=l.value;if(c.status==="aborted"||d.status==="aborted")return ve;(c.status==="dirty"||d.status==="dirty")&&n.dirty(),a.set(c.value,d.value)}return{status:n.value,value:a}}}}lu.create=(e,t,n)=>new lu({valueType:t,keyType:e,typeName:ge.ZodMap,..._e(n)});class Fo extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==le.set)return se(r,{code:J.invalid_type,expected:le.set,received:r.parsedType}),ve;const o=this._def;o.minSize!==null&&r.data.size<o.minSize.value&&(se(r,{code:J.too_small,minimum:o.minSize.value,type:"set",inclusive:!0,exact:!1,message:o.minSize.message}),n.dirty()),o.maxSize!==null&&r.data.size>o.maxSize.value&&(se(r,{code:J.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),n.dirty());const i=this._def.valueType;function s(l){const c=new Set;for(const d of l){if(d.status==="aborted")return ve;d.status==="dirty"&&n.dirty(),c.add(d.value)}return{status:n.value,value:c}}const a=[...r.data.values()].map((l,c)=>i._parse(new Bn(r,l,r.path,c)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new Fo({...this._def,minSize:{value:t,message:fe.toString(n)}})}max(t,n){return new Fo({...this._def,maxSize:{value:t,message:fe.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Fo.create=(e,t)=>new Fo({valueType:e,minSize:null,maxSize:null,typeName:ge.ZodSet,..._e(t)});class ji extends Ce{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==le.function)return se(n,{code:J.invalid_type,expected:le.function,received:n.parsedType}),ve;function r(a,l){return ou({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ru(),ts].filter(c=>!!c),issueData:{code:J.invalid_arguments,argumentsError:l}})}function o(a,l){return ou({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ru(),ts].filter(c=>!!c),issueData:{code:J.invalid_return_type,returnTypeError:l}})}const i={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof rs){const a=this;return St(async function(...l){const c=new Zt([]),d=await a._def.args.parseAsync(l,i).catch(p=>{throw c.addIssue(r(l,p)),c}),u=await Reflect.apply(s,this,d);return await a._def.returns._def.type.parseAsync(u,i).catch(p=>{throw c.addIssue(o(u,p)),c})})}else{const a=this;return St(function(...l){const c=a._def.args.safeParse(l,i);if(!c.success)throw new Zt([r(l,c.error)]);const d=Reflect.apply(s,this,c.data),u=a._def.returns.safeParse(d,i);if(!u.success)throw new Zt([o(d,u.error)]);return u.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new ji({...this._def,args:Un.create(t).rest(Po.create())})}returns(t){return new ji({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new ji({args:t||Un.create([]).rest(Po.create()),returns:n||Po.create(),typeName:ge.ZodFunction,..._e(r)})}}class Va extends Ce{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Va.create=(e,t)=>new Va({getter:e,typeName:ge.ZodLazy,..._e(t)});class Ha extends Ce{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return se(n,{received:n.data,code:J.invalid_literal,expected:this._def.value}),ve}return{status:"valid",value:t.data}}get value(){return this._def.value}}Ha.create=(e,t)=>new Ha({value:e,typeName:ge.ZodLiteral,..._e(t)});function k_(e,t){return new oo({values:e,typeName:ge.ZodEnum,..._e(t)})}class oo extends Ce{constructor(){super(...arguments),Fs.set(this,void 0)}_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return se(n,{expected:ke.joinValues(r),received:n.parsedType,code:J.invalid_type}),ve}if(iu(this,Fs)||S_(this,Fs,new Set(this._def.values)),!iu(this,Fs).has(t.data)){const n=this._getOrReturnCtx(t),r=this._def.values;return se(n,{received:n.data,code:J.invalid_enum_value,options:r}),ve}return St(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return oo.create(t,{...this._def,...n})}exclude(t,n=this._def){return oo.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}}Fs=new WeakMap;oo.create=k_;class Ba extends Ce{constructor(){super(...arguments),Vs.set(this,void 0)}_parse(t){const n=ke.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==le.string&&r.parsedType!==le.number){const o=ke.objectValues(n);return se(r,{expected:ke.joinValues(o),received:r.parsedType,code:J.invalid_type}),ve}if(iu(this,Vs)||S_(this,Vs,new Set(ke.getValidEnumValues(this._def.values))),!iu(this,Vs).has(t.data)){const o=ke.objectValues(n);return se(r,{received:r.data,code:J.invalid_enum_value,options:o}),ve}return St(t.data)}get enum(){return this._def.values}}Vs=new WeakMap;Ba.create=(e,t)=>new Ba({values:e,typeName:ge.ZodNativeEnum,..._e(t)});class rs extends Ce{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==le.promise&&n.common.async===!1)return se(n,{code:J.invalid_type,expected:le.promise,received:n.parsedType}),ve;const r=n.parsedType===le.promise?n.data:Promise.resolve(n.data);return St(r.then(o=>this._def.type.parseAsync(o,{path:n.path,errorMap:n.common.contextualErrorMap})))}}rs.create=(e,t)=>new rs({type:e,typeName:ge.ZodPromise,..._e(t)});class Cn extends Ce{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ge.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),o=this._def.effect||null,i={addIssue:s=>{se(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),o.type==="preprocess"){const s=o.transform(r.data,i);if(r.common.async)return Promise.resolve(s).then(async a=>{if(n.value==="aborted")return ve;const l=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return l.status==="aborted"?ve:l.status==="dirty"||n.value==="dirty"?bi(l.value):l});{if(n.value==="aborted")return ve;const a=this._def.schema._parseSync({data:s,path:r.path,parent:r});return a.status==="aborted"?ve:a.status==="dirty"||n.value==="dirty"?bi(a.value):a}}if(o.type==="refinement"){const s=a=>{const l=o.refinement(a,i);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?ve:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?ve:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(o.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ma(s))return s;const a=o.transform(s.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>Ma(s)?Promise.resolve(o.transform(s.value,i)).then(a=>({status:n.value,value:a})):s);ke.assertNever(o)}}Cn.create=(e,t,n)=>new Cn({schema:e,typeName:ge.ZodEffects,effect:t,..._e(n)});Cn.createWithPreprocess=(e,t,n)=>new Cn({schema:t,effect:{type:"preprocess",transform:e},typeName:ge.ZodEffects,..._e(n)});class zn extends Ce{_parse(t){return this._getType(t)===le.undefined?St(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}zn.create=(e,t)=>new zn({innerType:e,typeName:ge.ZodOptional,..._e(t)});class io extends Ce{_parse(t){return this._getType(t)===le.null?St(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}io.create=(e,t)=>new io({innerType:e,typeName:ge.ZodNullable,..._e(t)});class Ua extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===le.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}Ua.create=(e,t)=>new Ua({innerType:e,typeName:ge.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,..._e(t)});class Wa extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},o=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return ja(o)?o.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Zt(r.common.issues)},input:r.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Zt(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}Wa.create=(e,t)=>new Wa({innerType:e,typeName:ge.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,..._e(t)});class cu extends Ce{_parse(t){if(this._getType(t)!==le.nan){const r=this._getOrReturnCtx(t);return se(r,{code:J.invalid_type,expected:le.nan,received:r.parsedType}),ve}return{status:"valid",value:t.data}}}cu.create=e=>new cu({typeName:ge.ZodNaN,..._e(e)});const X6=Symbol("zod_brand");class Hm extends Ce{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class al extends Ce{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?ve:i.status==="dirty"?(n.dirty(),bi(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{const o=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?ve:o.status==="dirty"?(n.dirty(),{status:"dirty",value:o.value}):this._def.out._parseSync({data:o.value,path:r.path,parent:r})}}static create(t,n){return new al({in:t,out:n,typeName:ge.ZodPipeline})}}class Za extends Ce{_parse(t){const n=this._def.innerType._parse(t),r=o=>(Ma(o)&&(o.value=Object.freeze(o.value)),o);return ja(n)?n.then(o=>r(o)):r(n)}unwrap(){return this._def.innerType}}Za.create=(e,t)=>new Za({innerType:e,typeName:ge.ZodReadonly,..._e(t)});function N_(e,t={},n){return e?ns.create().superRefine((r,o)=>{var i,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(i=a.fatal)!==null&&i!==void 0?i:n)!==null&&s!==void 0?s:!0,c=typeof a=="string"?{message:a}:a;o.addIssue({code:"custom",...c,fatal:l})}}):ns.create()}const q6={object:He.lazycreate};var ge;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(ge||(ge={}));const Q6=(e,t={message:`Input not instance of ${e.name}`})=>N_(n=>n instanceof e,t),T_=gn.create,P_=no.create,J6=cu.create,eM=ro.create,I_=Oa.create,tM=$o.create,nM=su.create,rM=Da.create,oM=La.create,iM=ns.create,sM=Po.create,aM=vr.create,lM=au.create,cM=wn.create,uM=He.create,dM=He.strictCreate,fM=za.create,pM=ld.create,hM=$a.create,mM=Un.create,gM=Fa.create,vM=lu.create,yM=Fo.create,xM=ji.create,wM=Va.create,_M=Ha.create,SM=oo.create,bM=Ba.create,CM=rs.create,Gv=Cn.create,EM=zn.create,kM=io.create,NM=Cn.createWithPreprocess,TM=al.create,PM=()=>T_().optional(),IM=()=>P_().optional(),RM=()=>I_().optional(),AM={string:e=>gn.create({...e,coerce:!0}),number:e=>no.create({...e,coerce:!0}),boolean:e=>Oa.create({...e,coerce:!0}),bigint:e=>ro.create({...e,coerce:!0}),date:e=>$o.create({...e,coerce:!0})},MM=ve;var Pe=Object.freeze({__proto__:null,defaultErrorMap:ts,setErrorMap:M6,getErrorMap:ru,makeIssue:ou,EMPTY_PATH:j6,addIssueToContext:se,ParseStatus:yt,INVALID:ve,DIRTY:bi,OK:St,isAborted:eh,isDirty:th,isValid:Ma,isAsync:ja,get util(){return ke},get objectUtil(){return Jp},ZodParsedType:le,getParsedType:Fr,ZodType:Ce,datetimeRegex:E_,ZodString:gn,ZodNumber:no,ZodBigInt:ro,ZodBoolean:Oa,ZodDate:$o,ZodSymbol:su,ZodUndefined:Da,ZodNull:La,ZodAny:ns,ZodUnknown:Po,ZodNever:vr,ZodVoid:au,ZodArray:wn,ZodObject:He,ZodUnion:za,ZodDiscriminatedUnion:ld,ZodIntersection:$a,ZodTuple:Un,ZodRecord:Fa,ZodMap:lu,ZodSet:Fo,ZodFunction:ji,ZodLazy:Va,ZodLiteral:Ha,ZodEnum:oo,ZodNativeEnum:Ba,ZodPromise:rs,ZodEffects:Cn,ZodTransformer:Cn,ZodOptional:zn,ZodNullable:io,ZodDefault:Ua,ZodCatch:Wa,ZodNaN:cu,BRAND:X6,ZodBranded:Hm,ZodPipeline:al,ZodReadonly:Za,custom:N_,Schema:Ce,ZodSchema:Ce,late:q6,get ZodFirstPartyTypeKind(){return ge},coerce:AM,any:iM,array:cM,bigint:eM,boolean:I_,date:tM,discriminatedUnion:pM,effect:Gv,enum:SM,function:xM,instanceof:Q6,intersection:hM,lazy:wM,literal:_M,map:vM,nan:J6,nativeEnum:bM,never:aM,null:oM,nullable:kM,number:P_,object:uM,oboolean:RM,onumber:IM,optional:EM,ostring:PM,pipeline:TM,preprocess:NM,promise:CM,record:gM,set:yM,strictObject:dM,string:T_,symbol:nM,transformer:Gv,tuple:mM,undefined:rM,union:fM,unknown:sM,void:lM,NEVER:MM,ZodIssueCode:J,quotelessJson:A6,ZodError:Zt});const R_=["node-23.1.0","nextjs:deno-2.0.0"];function Lt(e){switch(e.type){case"app":return e.data.label||"Service";case"github":return e.data.address||"Github";case"gateway-https":return e.data&&e.data.network&&e.data.subdomain?`https://${e.data.subdomain}.${e.data.network}`:"HTTPS Gateway";case"gateway-tcp":return e.data&&e.data.network&&e.data.subdomain?`${e.data.subdomain}.${e.data.network}`:"TCP Gateway";case"mongodb":return e.data.label||"MongoDB";case"postgresql":return e.data.label||"PostgreSQL";case"volume":return e.data.label||"Volume";case void 0:throw new Error("MUST NOT REACH!")}}function os(e,t){switch(e.type){case"app":return t==="ports"?e.data!==void 0&&e.data.ports!==void 0&&e.data.ports.length>0:t==="repository"?!e.data||!e.data.repository||!e.data.repository.id:!1;case"github":return!!(e.data!==void 0&&e.data.address);case"gateway-https":return e.data===void 0||e.data.https===void 0;case"gateway-tcp":return!0;case"mongodb":return!0;case"postgresql":return!0;case"volume":return e.data===void 0||e.data.type===void 0?!1:e.data.type==="ReadWriteOnce"||e.data.type==="ReadWriteOncePod"?e.data.attachedTo===void 0||e.data.attachedTo.length===0:!0;case void 0:throw new Error("MUST NOT REACH!")}}function jM(e){switch(e.type){case"app":return[`DODO_SERVICE_${e.data.label.toUpperCase()}_ADDRESS`,...(e.data.ports||[]).map(t=>`DODO_SERVICE_${e.data.label.toUpperCase()}_ADDRESS_${t.name.toUpperCase()}`)];case"github":return[];case"gateway-https":return[];case"gateway-tcp":return[];case"mongodb":return[`DODO_MONGODB_${e.data.label.toUpperCase()}_CONNECTION_URL`];case"postgresql":return[`DODO_POSTGRESQL_${e.data.label.toUpperCase()}_CONNECTION_URL`];case"volume":return[`DODO_VOLUME_${e.data.label.toUpperCase()}_PATH`];case void 0:throw new Error("MUST NOT REACH")}}Pe.object({deployKey:Pe.string(),networks:Pe.array(Pe.object({name:Pe.string(),domain:Pe.string()}))});const OM=e=>e.projectId,DM=e=>e.categories,LM=e=>e.messages;function A_(){return zt(OM)}function zM(){return zt(DM)}function cd(){return zt(LM)}function $M(e){return cd().filter(t=>t.nodeId===e)}function ll(){return{deployKey:"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPK58vMu0MwIzdZT+mqpIBkhl48p9+/YwDCZv7MgTesF",networks:[{name:"Public",domain:"v1.dodo.cloud"},{name:"Private",domain:"p.v1.dodo.cloud"}]}}const Yv=k6(),zt=_6((e,t)=>{e({env:{deployKey:"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPK58vMu0MwIzdZT+mqpIBkhl48p9+/YwDCZv7MgTesF",networks:[{name:"Public",domain:"v1.dodo.cloud"},{name:"Private",domain:"p.v1.dodo.cloud"}]}}),console.log(t().env);const n=s=>{e({nodes:s,messages:Yv(s)})};function r(s,a){n(t().nodes.map(l=>l.id!==s?l:{...l,data:{...l.data,...a}}))}function o(s,a){n(t().nodes.map(l=>l.id!==s?l:{...l,...a}))}function i(s){const{nodes:a,edges:l}=t();e({edges:Yw(s,l)});const c=a.filter(u=>u.id===s.source)[0],d=a.filter(u=>u.id===s.target)[0];if(s.sourceHandle==="env_var"&&s.targetHandle==="env_var"){const u=jM(c);if(u.length===0)throw new Error("MUST NOT REACH!");const f=Aa();u.length===1?o(s.target,{...d,data:{...d.data,envVars:[...d.data.envVars||[],{id:f,source:s.source,name:u[0],isEditting:!1}]}}):o(s.target,{...d,data:{...d.data,envVars:[...d.data.envVars||[],{id:f,source:s.source}]}})}if(s.sourceHandle==="volume"&&r(s.source,{attachedTo:(c.data.attachedTo||[]).concat(s.source)}),s.targetHandle==="volume"&&(d.type==="postgresql"||d.type==="mongodb")&&r(s.target,{volumeId:s.source}),s.targetHandle==="https"&&((c.data.ports||[]).length===1?r(s.target,{https:{serviceId:s.source,portId:c.data.ports[0].id}}):r(s.target,{https:{serviceId:s.source,portId:""}})),s.targetHandle==="tcp"){const u=d.data;(c.data.ports||[]).length===1?r(s.target,{exposed:(u.exposed||[]).concat({serviceId:s.source,portId:c.data.ports[0].id})}):r(s.target,{selected:{serviceId:s.source,portId:void 0}})}c.type==="app"&&s.sourceHandle==="ports"&&r(c.id,{isChoosingPortToConnect:!0}),d.type==="app"&&s.targetHandle==="repository"&&r(d.id,{repository:{id:s.source,branch:"master",rootDir:"/"}})}return{projectId:void 0,projects:[],nodes:[],edges:[],categories:S6,messages:Yv([]),setHighlightCategory:(s,a)=>{e({categories:t().categories.map(l=>l.title.toLowerCase()!==s.toLowerCase()?l:{...l,active:a})})},onNodesChange:s=>{const a=g2(s,t().nodes);n(a)},onEdgesChange:s=>{e({edges:Yp(s,t().edges)})},setNodes:s=>{n(s)},setEdges:s=>{e({edges:s})},replaceEdge:(s,a)=>{let l;a===void 0?(l={type:"add",item:{id:Aa(),...s}},i(s)):l={type:"replace",id:a,item:{id:a,...s}},e({edges:Yp([l],t().edges)})},updateNode:o,updateNodeData:r,onConnect:i,refreshEnv:async()=>t().env,setProject:s=>e({projectId:s}),setProjects:s=>e({projects:s})}});var M_={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Kv=de.createContext&&de.createContext(M_),FM=["attr","size","title"];function VM(e,t){if(e==null)return{};var n=HM(e,t),r,o;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)r=i[o],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uu.apply(this,arguments)}function Xv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function du(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xv(Object(n),!0).forEach(function(r){BM(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xv(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function BM(e,t,n){return t=UM(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function UM(e){var t=WM(e,"string");return typeof t=="symbol"?t:t+""}function WM(e,t){if(typeof e!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function j_(e){return e&&e.map((t,n)=>de.createElement(t.tag,du({key:n},t.attr),j_(t.child)))}function qo(e){return t=>de.createElement(ZM,uu({attr:du({},e.attr)},t),j_(e.child))}function ZM(e){var t=n=>{var{attr:r,size:o,title:i}=e,s=VM(e,FM),a=o||n.size||"1em",l;return n.className&&(l=n.className),e.className&&(l=(l?l+" ":"")+e.className),de.createElement("svg",uu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},n.attr,r,s,{className:l,style:du(du({color:e.color||n.color},n.style),e.style),height:a,width:a,xmlns:"http://www.w3.org/2000/svg"}),i&&de.createElement("title",null,i),e.children)};return Kv!==void 0?de.createElement(Kv.Consumer,null,n=>t(n)):t(M_)}function GM(e){return qo({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z"},child:[]}]})(e)}function YM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"},child:[]}]})(e)}function KM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M22.55 6.55v10.9c0 .434-.184.749-.55.95l-9.45 5.45c-.367.2-.733.2-1.1 0L2 18.4c-.366-.201-.55-.516-.55-.95V6.55c0-.434.184-.749.55-.95L11.45.15c.367-.2.733-.2 1.1 0L22 5.6c.366.201.55.516.55.95zM21 17.8l-3.9-2.25.5-.9 3.9 2.249V6.549l-.05-.048-8.95-5.2v4.5h-1v-4.5l-9 5.2v10.398l3.9-2.248.5.899L3 17.8l8.95 5.15h.1L21 17.8zM4.55 7.675c0-.016.016-.025.05-.025h14.8c.033 0 .05.009.05.025v.075l-7.4 12.799c0 .034-.017.05-.05.05-.034 0-.05-.016-.05-.05L4.55 7.75v-.075zm6.95 5.076c0-.301-.15-.533-.45-.7L6.9 9.65h-.05v.05l4.6 7.9c.033 0 .05-.019.05-.051v-4.8zm.9-1.601l4.2-2.45H7.4l.05.051 4.15 2.399a.701.701 0 00.8 0zM17.15 9.7v-.05h-.05l-4.15 2.4c-.3.167-.45.417-.45.749v4.8h.1l4.55-7.899z"},child:[]}]})(e)}function XM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M23.0864 13.1643c.0456 0 .0717-.0132.0717-.062 0-.0482-.0254-.0593-.0731-.0593h-.1023v.1213zm-.1037.0417v.1285h-.0445v-.334h.1487c.0846 0 .1172.0347.1172.1006 0 .054-.0229.0912-.0806.102l.0755.1314h-.0484l-.0746-.1285zm.0746-.2918a.2535.2535 0 0 0-.2533.2531c0 .1395.1136.2532.2533.2532a.2535.2535 0 0 0 .253-.2532.2534.2534 0 0 0-.253-.2531zm-.291.2531a.2912.2912 0 0 1 .291-.2908.291.291 0 0 1 .2905.2908.291.291 0 0 1-.2905.2907.2912.2912 0 0 1-.291-.2907zm-20.7445-.6602V8.8304h-.4212v3.6767c0 .8506.0337 1.5332-1.4404 1.5332A4.029 4.029 0 0 1 0 14.0369v.397a6.215 6.215 0 0 0 .1602.0022c1.7858 0 1.8616-.8002 1.8616-1.929zm15.5404-1.6972h3.1334c-.042-.918-.1011-1.7014-1.4404-1.7014-1.2887 0-1.6425.6992-1.693 1.7014zm1.7016-2.0889c1.794 0 1.853 1.2045 1.8447 2.4764h-3.5548c.0085 1.1204.2863 1.9544 1.7436 1.9544.775 0 1.1288-.2107 1.5079-.4886l.2357.3116c-.421.3117-.918.556-1.7436.556-1.8194 0-2.1565-1.053-2.1565-2.4091 0-1.356.3877-2.4007 2.123-2.4007zm-4.1484 2.7055c.7439 0 1.1135-.3625 1.1135-1.0949 0-.7322-.3988-1.0798-1.132-1.0798h-1.7285v2.1747zM15.109 8.839c1.0678 0 1.5519.5307 1.5519 1.474 0 .9497-.478 1.527-1.5578 1.527h-1.7348v1.5981h-.4124V8.839zm-2.9253 0v4.5991h-.4122V8.839zm-1.1939 4.5991h-.4296v-2.8134c0-.8086.0084-1.491-1.474-1.491-1.4743 0-1.4405.6824-1.4405 1.5331v2.7713h-.4212v-2.7713c0-1.1288.076-1.9289 1.8616-1.9289 1.7943 0 1.9037.8001 1.9037 1.8952zM2.7466 8.8304h.4297v2.8134c0 .8088-.0084 1.491 1.474 1.491 1.4742 0 1.4405-.6822 1.4405-1.533V8.8303h.4212v2.7713c0 1.1289-.0759 1.929-1.8616 1.929-1.7943 0-1.9038-.8001-1.9038-1.8952zm18.9675 1.8364v2.7713h.421v-2.7713c0-.8507-.0336-1.533 1.4407-1.533.1579 0 .298.0083.4242.023v-.4012a4.8535 4.8535 0 0 0-.4242-.0177c-1.7859 0-1.8617.8001-1.8617 1.929zm-.4315 4.3602c.1525.096.3017.1286.4542.1286.2624 0 .3789-.0737.3789-.2486 0-.18-.1508-.2057-.3789-.2468-.2743-.048-.4594-.0944-.4594-.3514 0-.2453.1577-.3413.4594-.3413.199 0 .3412.0447.4423.1132l-.072.1097c-.0908-.06-.2263-.0995-.3703-.0995-.228 0-.3257.0636-.3257.2144 0 .1612.132.192.3584.233.2776.0499.4782.091.4782.3635 0 .2521-.1612.3737-.5074.3737-.192 0-.3652-.0393-.5263-.1456zm-.7886-.4423l-.2538.2777v.396h-.132v-1.2703h.132v.7012l.643-.7012h.156l-.456.4989.5176.7715h-.1525l-.4543-.6738m-1.1006.0326c.18 0 .2914-.0549.2914-.2555 0-.1971-.108-.2485-.2965-.2485h-.4132v.504zm-.0377.1234h-.3806v.5178h-.132V13.988h.5486c.2948 0 .4286.1183.4286.3703 0 .2194-.1046.348-.3258.377l.3068.523h-.1439l-.3017-.5177m-.924-.1166c0-.3429-.1594-.528-.5058-.528-.3446 0-.5023.1851-.5023.528 0 .3446.1577.5298.5023.5298.3464 0 .5058-.1852.5058-.5298zm-.5058-.6566c.408 0 .6412.2024.6412.655 0 .4542-.2332.6565-.6412.6565-.4063 0-.6377-.2023-.6377-.6566 0-.4525.2314-.6549.6377-.6549zm-2.3571.0206l.3342 1.0508.3412-1.0508h.1166l.3394 1.0508.336-1.0508h.1303l-.408 1.2789h-.1165l-.343-1.0577-.341 1.0577h-.1183l-.4098-1.2789zm-1.392.1286v-.1286h1.0886v.1286h-.4766v1.1418h-.1355v-1.1418zm-.204-.1286v.1286h-.7046v.42h.6874v.127h-.6874v.4713h.7114v.1235h-.8468V13.988zm-2.0539 0l.7596 1.0475V13.988h.1303v1.2704h-.1235l-.7835-1.0784v1.0784h-.1303V13.988Z"},child:[]}]})(e)}function qM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M17.193 9.555c-1.264-5.58-4.252-7.414-4.573-8.115-.28-.394-.53-.954-.735-1.44-.036.495-.055.685-.523 1.184-.723.566-4.438 3.682-4.74 10.02-.282 5.912 4.27 9.435 4.888 9.884l.07.05A73.49 73.49 0 0111.91 24h.481c.114-1.032.284-2.056.51-3.07.417-.296.604-.463.85-.693a11.342 11.342 0 003.639-8.464c.01-.814-.103-1.662-.197-2.218zm-5.336 8.195s0-8.291.275-8.29c.213 0 .49 10.695.49 10.695-.381-.045-.765-1.76-.765-2.405z"},child:[]}]})(e)}function QM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M23.5594 14.7228a.5269.5269 0 0 0-.0563-.1191c-.139-.2632-.4768-.3418-1.0074-.2321-1.6533.3411-2.2935.1312-2.5256-.0191 1.342-2.0482 2.445-4.522 3.0411-6.8297.2714-1.0507.7982-3.5237.1222-4.7316a1.5641 1.5641 0 0 0-.1509-.235C21.6931.9086 19.8007.0248 17.5099.0005c-1.4947-.0158-2.7705.3461-3.1161.4794a9.449 9.449 0 0 0-.5159-.0816 8.044 8.044 0 0 0-1.3114-.1278c-1.1822-.0184-2.2038.2642-3.0498.8406-.8573-.3211-4.7888-1.645-7.2219.0788C.9359 2.1526.3086 3.8733.4302 6.3043c.0409.818.5069 3.334 1.2423 5.7436.4598 1.5065.9387 2.7019 1.4334 3.582.553.9942 1.1259 1.5933 1.7143 1.7895.4474.1491 1.1327.1441 1.8581-.7279.8012-.9635 1.5903-1.8258 1.9446-2.2069.4351.2355.9064.3625 1.39.3772a.0569.0569 0 0 0 .0004.0041 11.0312 11.0312 0 0 0-.2472.3054c-.3389.4302-.4094.5197-1.5002.7443-.3102.064-1.1344.2339-1.1464.8115-.0025.1224.0329.2309.0919.3268.2269.4231.9216.6097 1.015.6331 1.3345.3335 2.5044.092 3.3714-.6787-.017 2.231.0775 4.4174.3454 5.0874.2212.5529.7618 1.9045 2.4692 1.9043.2505 0 .5263-.0291.8296-.0941 1.7819-.3821 2.5557-1.1696 2.855-2.9059.1503-.8707.4016-2.8753.5388-4.1012.0169-.0703.0357-.1207.057-.1362.0007-.0005.0697-.0471.4272.0307a.3673.3673 0 0 0 .0443.0068l.2539.0223.0149.001c.8468.0384 1.9114-.1426 2.5312-.4308.6438-.2988 1.8057-1.0323 1.5951-1.6698zM2.371 11.8765c-.7435-2.4358-1.1779-4.8851-1.2123-5.5719-.1086-2.1714.4171-3.6829 1.5623-4.4927 1.8367-1.2986 4.8398-.5408 6.108-.13-.0032.0032-.0066.0061-.0098.0094-2.0238 2.044-1.9758 5.536-1.9708 5.7495-.0002.0823.0066.1989.0162.3593.0348.5873.0996 1.6804-.0735 2.9184-.1609 1.1504.1937 2.2764.9728 3.0892.0806.0841.1648.1631.2518.2374-.3468.3714-1.1004 1.1926-1.9025 2.1576-.5677.6825-.9597.5517-1.0886.5087-.3919-.1307-.813-.5871-1.2381-1.3223-.4796-.839-.9635-2.0317-1.4155-3.5126zm6.0072 5.0871c-.1711-.0428-.3271-.1132-.4322-.1772.0889-.0394.2374-.0902.4833-.1409 1.2833-.2641 1.4815-.4506 1.9143-1.0002.0992-.126.2116-.2687.3673-.4426a.3549.3549 0 0 0 .0737-.1298c.1708-.1513.2724-.1099.4369-.0417.156.0646.3078.26.3695.4752.0291.1016.0619.2945-.0452.4444-.9043 1.2658-2.2216 1.2494-3.1676 1.0128zm2.094-3.988-.0525.141c-.133.3566-.2567.6881-.3334 1.003-.6674-.0021-1.3168-.2872-1.8105-.8024-.6279-.6551-.9131-1.5664-.7825-2.5004.1828-1.3079.1153-2.4468.079-3.0586-.005-.0857-.0095-.1607-.0122-.2199.2957-.2621 1.6659-.9962 2.6429-.7724.4459.1022.7176.4057.8305.928.5846 2.7038.0774 3.8307-.3302 4.7363-.084.1866-.1633.3629-.2311.5454zm7.3637 4.5725c-.0169.1768-.0358.376-.0618.5959l-.146.4383a.3547.3547 0 0 0-.0182.1077c-.0059.4747-.054.6489-.115.8693-.0634.2292-.1353.4891-.1794 1.0575-.11 1.4143-.8782 2.2267-2.4172 2.5565-1.5155.3251-1.7843-.4968-2.0212-1.2217a6.5824 6.5824 0 0 0-.0769-.2266c-.2154-.5858-.1911-1.4119-.1574-2.5551.0165-.5612-.0249-1.9013-.3302-2.6462.0044-.2932.0106-.5909.019-.8918a.3529.3529 0 0 0-.0153-.1126 1.4927 1.4927 0 0 0-.0439-.208c-.1226-.4283-.4213-.7866-.7797-.9351-.1424-.059-.4038-.1672-.7178-.0869.067-.276.1831-.5875.309-.9249l.0529-.142c.0595-.16.134-.3257.213-.5012.4265-.9476 1.0106-2.2453.3766-5.1772-.2374-1.0981-1.0304-1.6343-2.2324-1.5098-.7207.0746-1.3799.3654-1.7088.5321a5.6716 5.6716 0 0 0-.1958.1041c.0918-1.1064.4386-3.1741 1.7357-4.4823a4.0306 4.0306 0 0 1 .3033-.276.3532.3532 0 0 0 .1447-.0644c.7524-.5706 1.6945-.8506 2.802-.8325.4091.0067.8017.0339 1.1742.081 1.939.3544 3.2439 1.4468 4.0359 2.3827.8143.9623 1.2552 1.9315 1.4312 2.4543-1.3232-.1346-2.2234.1268-2.6797.779-.9926 1.4189.543 4.1729 1.2811 5.4964.1353.2426.2522.4522.2889.5413.2403.5825.5515.9713.7787 1.2552.0696.087.1372.1714.1885.245-.4008.1155-1.1208.3825-1.0552 1.717-.0123.1563-.0423.4469-.0834.8148-.0461.2077-.0702.4603-.0994.7662zm.8905-1.6211c-.0405-.8316.2691-.9185.5967-1.0105a2.8566 2.8566 0 0 0 .135-.0406 1.202 1.202 0 0 0 .1342.103c.5703.3765 1.5823.4213 3.0068.1344-.2016.1769-.5189.3994-.9533.6011-.4098.1903-1.0957.333-1.7473.3636-.7197.0336-1.0859-.0807-1.1721-.151zm.5695-9.2712c-.0059.3508-.0542.6692-.1054 1.0017-.055.3576-.112.7274-.1264 1.1762-.0142.4368.0404.8909.0932 1.3301.1066.887.216 1.8003-.2075 2.7014a3.5272 3.5272 0 0 1-.1876-.3856c-.0527-.1276-.1669-.3326-.3251-.6162-.6156-1.1041-2.0574-3.6896-1.3193-4.7446.3795-.5427 1.3408-.5661 2.1781-.463zm.2284 7.0137a12.3762 12.3762 0 0 0-.0853-.1074l-.0355-.0444c.7262-1.1995.5842-2.3862.4578-3.4385-.0519-.4318-.1009-.8396-.0885-1.2226.0129-.4061.0666-.7543.1185-1.0911.0639-.415.1288-.8443.1109-1.3505.0134-.0531.0188-.1158.0118-.1902-.0457-.4855-.5999-1.938-1.7294-3.253-.6076-.7073-1.4896-1.4972-2.6889-2.0395.5251-.1066 1.2328-.2035 2.0244-.1859 2.0515.0456 3.6746.8135 4.8242 2.2824a.908.908 0 0 1 .0667.1002c.7231 1.3556-.2762 6.2751-2.9867 10.5405zm-8.8166-6.1162c-.025.1794-.3089.4225-.6211.4225a.5821.5821 0 0 1-.0809-.0056c-.1873-.026-.3765-.144-.5059-.3156-.0458-.0605-.1203-.178-.1055-.2844.0055-.0401.0261-.0985.0925-.1488.1182-.0894.3518-.1226.6096-.0867.3163.0441.6426.1938.6113.4186zm7.9305-.4114c.0111.0792-.049.201-.1531.3102-.0683.0717-.212.1961-.4079.2232a.5456.5456 0 0 1-.075.0052c-.2935 0-.5414-.2344-.5607-.3717-.024-.1765.2641-.3106.5611-.352.297-.0414.6111.0088.6356.1851z"},child:[]}]})(e)}function JM(e){return qo({tag:"svg",attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M24 18.185v2.274h-4.89v-2.274H24zm-24-.106h11.505v2.274H0zm12.89 0h4.89v2.274h-4.89zm6.221-3.607H24v2.274h-4.89l.001-2.274zM0 14.367h11.505v2.274H0v-2.274zm12.89 0h4.89v2.274h-4.89v-2.274zm6.221-3.346H24v2.273h-4.89l.001-2.273zM0 10.916h11.505v2.271H0v-2.271zm12.89 0h4.89v2.271h-4.89v-2.271zm6.22-3.609H24v2.279h-4.89V7.307zM0 7.206h11.505V9.48H0V7.201zm12.89 0h4.89V9.48h-4.89V7.201zm6.221-3.556H24v2.276h-4.89v-2.28l.001.004zM0 3.541h11.505v2.274H0V3.541zm12.89 0h4.89v2.274h-4.89V3.541z"},child:[]}]})(e)}function Bm(e){switch(e){case"app":return h.jsx(JM,{});case"github":return h.jsx(YM,{});case"gateway-https":return h.jsx(KM,{});case"gateway-tcp":return h.jsx(XM,{});case"mongodb":return h.jsx(qM,{});case"postgresql":return h.jsx(QM,{});case"volume":return h.jsx(GM,{});case void 0:throw new Error("MUST NOT REACH!")}}function ej(e,t){t.addNodes({id:Aa(),position:{x:0,y:0},type:e.type,connectable:!0,data:e.init})}function tj(){let e=Yo();const t=zM();let n=x.useCallback(i=>()=>ej(i,e),[e]);const[r,o]=x.useState(t.map(i=>i.title));return h.jsx(h.Fragment,{children:h.jsx(Fm,{type:"multiple",value:r,onValueChange:i=>o(i),children:t.map(i=>h.jsxs(sd,{value:i.title,className:"px-3"+(i.active?" bg-amber-100":""),children:[h.jsx(ad,{children:i.title}),h.jsx($m,{children:h.jsx("div",{className:"flex flex-col space-y-1",children:i.items.map(s=>h.jsxs(Ln,{onClick:n(s),style:{justifyContent:"flex-start"},children:[Bm(s.type),s.title]},s.title))})})]},i.title))})})}const qv=e=>Symbol.iterator in e,Qv=e=>"entries"in e,Jv=(e,t)=>{const n=e instanceof Map?e:new Map(e.entries()),r=t instanceof Map?t:new Map(t.entries());if(n.size!==r.size)return!1;for(const[o,i]of n)if(!Object.is(i,r.get(o)))return!1;return!0},nj=(e,t)=>{const n=e[Symbol.iterator](),r=t[Symbol.iterator]();let o=n.next(),i=r.next();for(;!o.done&&!i.done;){if(!Object.is(o.value,i.value))return!1;o=n.next(),i=r.next()}return!!o.done&&!!i.done};function rj(e,t){return Object.is(e,t)?!0:typeof e!="object"||e===null||typeof t!="object"||t===null?!1:!qv(e)||!qv(t)?Jv({entries:()=>Object.entries(e)},{entries:()=>Object.entries(t)}):Qv(e)&&Qv(t)?Jv(e,t):nj(e,t)}function oj(e){const t=de.useRef();return n=>{const r=e(n);return rj(t.current,r)?t.current:t.current=r}}function Qo(e){const{id:t,selected:n,children:r}=e,o=$M(t),i=o.some(l=>l.type==="FATAL"),s=o.some(l=>l.type==="WARNING"),a=["px-4","py-2","rounded-md","bg-white"];return i?a.push("border-red-500"):s?a.push("border-yellow-500"):a.push("border-black"),n?a.push("border-2"):a.push("border"),h.jsxs("div",{className:a.join(" "),children:[h.jsx("div",{style:{position:"absolute",top:"5px",left:"5px"},children:Bm(e.type)}),r]})}var cl=e=>e.type==="checkbox",bo=e=>e instanceof Date,wt=e=>e==null;const O_=e=>typeof e=="object";var Xe=e=>!wt(e)&&!Array.isArray(e)&&O_(e)&&!bo(e),D_=e=>Xe(e)&&e.target?cl(e.target)?e.target.checked:e.target.value:e,ij=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,L_=(e,t)=>e.has(ij(t)),sj=e=>{const t=e.constructor&&e.constructor.prototype;return Xe(t)&&t.hasOwnProperty("isPrototypeOf")},Um=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Nt(e){let t;const n=Array.isArray(e);if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set(e);else if(!(Um&&(e instanceof Blob||e instanceof FileList))&&(n||Xe(e)))if(t=n?[]:{},!n&&!sj(e))t=e;else for(const r in e)e.hasOwnProperty(r)&&(t[r]=Nt(e[r]));else return e;return t}var ud=e=>Array.isArray(e)?e.filter(Boolean):[],Ye=e=>e===void 0,re=(e,t,n)=>{if(!t||!Xe(e))return n;const r=ud(t.split(/[,[\].]+?/)).reduce((o,i)=>wt(o)?o:o[i],e);return Ye(r)||r===e?Ye(e[t])?n:e[t]:r},Qt=e=>typeof e=="boolean",Wm=e=>/^\w*$/.test(e),z_=e=>ud(e.replace(/["|']|\]/g,"").split(/\.|\[/)),Ie=(e,t,n)=>{let r=-1;const o=Wm(t)?[t]:z_(t),i=o.length,s=i-1;for(;++r<i;){const a=o[r];let l=n;if(r!==s){const c=e[a];l=Xe(c)||Array.isArray(c)?c:isNaN(+o[r+1])?{}:[]}if(a==="__proto__")return;e[a]=l,e=e[a]}return e};const fu={BLUR:"blur",FOCUS_OUT:"focusout",CHANGE:"change"},hn={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},Qn={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},$_=de.createContext(null),dd=()=>de.useContext($_),aj=e=>{const{children:t,...n}=e;return de.createElement($_.Provider,{value:n},t)};var F_=(e,t,n,r=!0)=>{const o={defaultValues:t._defaultValues};for(const i in e)Object.defineProperty(o,i,{get:()=>{const s=i;return t._proxyFormState[s]!==hn.all&&(t._proxyFormState[s]=!r||hn.all),n&&(n[s]=!0),e[s]}});return o},Tt=e=>Xe(e)&&!Object.keys(e).length,V_=(e,t,n,r)=>{n(e);const{name:o,...i}=e;return Tt(i)||Object.keys(i).length>=Object.keys(t).length||Object.keys(i).find(s=>t[s]===(!r||hn.all))},na=e=>Array.isArray(e)?e:[e],H_=(e,t,n)=>!e||!t||e===t||na(e).some(r=>r&&(n?r===t:r.startsWith(t)||t.startsWith(r)));function Zm(e){const t=de.useRef(e);t.current=e,de.useEffect(()=>{const n=!e.disabled&&t.current.subject&&t.current.subject.subscribe({next:t.current.next});return()=>{n&&n.unsubscribe()}},[e.disabled])}function lj(e){const t=dd(),{control:n=t.control,disabled:r,name:o,exact:i}=e||{},[s,a]=de.useState(n._formState),l=de.useRef(!0),c=de.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1}),d=de.useRef(o);return d.current=o,Zm({disabled:r,next:u=>l.current&&H_(d.current,u.name,i)&&V_(u,c.current,n._updateFormState)&&a({...n._formState,...u}),subject:n._subjects.state}),de.useEffect(()=>(l.current=!0,c.current.isValid&&n._updateValid(!0),()=>{l.current=!1}),[n]),F_(s,n,c.current,!1)}var Mn=e=>typeof e=="string",B_=(e,t,n,r,o)=>Mn(e)?(r&&t.watch.add(e),re(n,e,o)):Array.isArray(e)?e.map(i=>(r&&t.watch.add(i),re(n,i))):(r&&(t.watchAll=!0),n);function cj(e){const t=dd(),{control:n=t.control,name:r,defaultValue:o,disabled:i,exact:s}=e||{},a=de.useRef(r);a.current=r,Zm({disabled:i,subject:n._subjects.values,next:d=>{H_(a.current,d.name,s)&&c(Nt(B_(a.current,n._names,d.values||n._formValues,!1,o)))}});const[l,c]=de.useState(n._getWatch(r,o));return de.useEffect(()=>n._removeUnmounted()),l}function uj(e){const t=dd(),{name:n,disabled:r,control:o=t.control,shouldUnregister:i}=e,s=L_(o._names.array,n),a=cj({control:o,name:n,defaultValue:re(o._formValues,n,re(o._defaultValues,n,e.defaultValue)),exact:!0}),l=lj({control:o,name:n,exact:!0}),c=de.useRef(o.register(n,{...e.rules,value:a,...Qt(e.disabled)?{disabled:e.disabled}:{}}));return de.useEffect(()=>{const d=o._options.shouldUnregister||i,u=(f,p)=>{const y=re(o._fields,f);y&&y._f&&(y._f.mount=p)};if(u(n,!0),d){const f=Nt(re(o._options.defaultValues,n));Ie(o._defaultValues,n,f),Ye(re(o._formValues,n))&&Ie(o._formValues,n,f)}return()=>{(s?d&&!o._state.action:d)?o.unregister(n):u(n,!1)}},[n,o,s,i]),de.useEffect(()=>{re(o._fields,n)&&o._updateDisabledField({disabled:r,fields:o._fields,name:n,value:re(o._fields,n)._f.value})},[r,n,o]),{field:{name:n,value:a,...Qt(r)||l.disabled?{disabled:l.disabled||r}:{},onChange:de.useCallback(d=>c.current.onChange({target:{value:D_(d),name:n},type:fu.CHANGE}),[n]),onBlur:de.useCallback(()=>c.current.onBlur({target:{value:re(o._formValues,n),name:n},type:fu.BLUR}),[n,o]),ref:de.useCallback(d=>{const u=re(o._fields,n);u&&d&&(u._f.ref={focus:()=>d.focus(),select:()=>d.select(),setCustomValidity:f=>d.setCustomValidity(f),reportValidity:()=>d.reportValidity()})},[o._fields,n])},formState:l,fieldState:Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!re(l.errors,n)},isDirty:{enumerable:!0,get:()=>!!re(l.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!re(l.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!re(l.validatingFields,n)},error:{enumerable:!0,get:()=>re(l.errors,n)}})}}const dj=e=>e.render(uj(e));var U_=(e,t,n,r,o)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:o||!0}}:{},ey=e=>({isOnSubmit:!e||e===hn.onSubmit,isOnBlur:e===hn.onBlur,isOnChange:e===hn.onChange,isOnAll:e===hn.all,isOnTouch:e===hn.onTouched}),ty=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));const ra=(e,t,n,r)=>{for(const o of n||Object.keys(e)){const i=re(e,o);if(i){const{_f:s,...a}=i;if(s){if(s.refs&&s.refs[0]&&t(s.refs[0],o)&&!r)return!0;if(s.ref&&t(s.ref,s.name)&&!r)return!0;if(ra(a,t))break}else if(Xe(a)&&ra(a,t))break}}};var fj=(e,t,n)=>{const r=na(re(e,n));return Ie(r,"root",t[n]),Ie(e,n,r),e},Gm=e=>e.type==="file",sr=e=>typeof e=="function",pu=e=>{if(!Um)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},hc=e=>Mn(e),Ym=e=>e.type==="radio",hu=e=>e instanceof RegExp;const ny={value:!1,isValid:!1},ry={value:!0,isValid:!0};var W_=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Ye(e[0].attributes.value)?Ye(e[0].value)||e[0].value===""?ry:{value:e[0].value,isValid:!0}:ry:ny}return ny};const oy={isValid:!1,value:null};var Z_=e=>Array.isArray(e)?e.reduce((t,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:t,oy):oy;function iy(e,t,n="validate"){if(hc(e)||Array.isArray(e)&&e.every(hc)||Qt(e)&&!e)return{type:n,message:hc(e)?e:"",ref:t}}var ei=e=>Xe(e)&&!hu(e)?e:{value:e,message:""},sy=async(e,t,n,r,o)=>{const{ref:i,refs:s,required:a,maxLength:l,minLength:c,min:d,max:u,pattern:f,validate:p,name:y,valueAsNumber:v,mount:_,disabled:m}=e._f,g=re(t,y);if(!_||m)return{};const w=s?s[0]:i,S=A=>{r&&w.reportValidity&&(w.setCustomValidity(Qt(A)?"":A||""),w.reportValidity())},C={},N=Ym(i),E=cl(i),P=N||E,O=(v||Gm(i))&&Ye(i.value)&&Ye(g)||pu(i)&&i.value===""||g===""||Array.isArray(g)&&!g.length,j=U_.bind(null,y,n,C),$=(A,L,b,M=Qn.maxLength,T=Qn.minLength)=>{const D=A?L:b;C[y]={type:A?M:T,message:D,ref:i,...j(A?M:T,D)}};if(o?!Array.isArray(g)||!g.length:a&&(!P&&(O||wt(g))||Qt(g)&&!g||E&&!W_(s).isValid||N&&!Z_(s).isValid)){const{value:A,message:L}=hc(a)?{value:!!a,message:a}:ei(a);if(A&&(C[y]={type:Qn.required,message:L,ref:w,...j(Qn.required,L)},!n))return S(L),C}if(!O&&(!wt(d)||!wt(u))){let A,L;const b=ei(u),M=ei(d);if(!wt(g)&&!isNaN(g)){const T=i.valueAsNumber||g&&+g;wt(b.value)||(A=T>b.value),wt(M.value)||(L=T<M.value)}else{const T=i.valueAsDate||new Date(g),D=z=>new Date(new Date().toDateString()+" "+z),k=i.type=="time",I=i.type=="week";Mn(b.value)&&g&&(A=k?D(g)>D(b.value):I?g>b.value:T>new Date(b.value)),Mn(M.value)&&g&&(L=k?D(g)<D(M.value):I?g<M.value:T<new Date(M.value))}if((A||L)&&($(!!A,b.message,M.message,Qn.max,Qn.min),!n))return S(C[y].message),C}if((l||c)&&!O&&(Mn(g)||o&&Array.isArray(g))){const A=ei(l),L=ei(c),b=!wt(A.value)&&g.length>+A.value,M=!wt(L.value)&&g.length<+L.value;if((b||M)&&($(b,A.message,L.message),!n))return S(C[y].message),C}if(f&&!O&&Mn(g)){const{value:A,message:L}=ei(f);if(hu(A)&&!g.match(A)&&(C[y]={type:Qn.pattern,message:L,ref:i,...j(Qn.pattern,L)},!n))return S(L),C}if(p){if(sr(p)){const A=await p(g,t),L=iy(A,w);if(L&&(C[y]={...L,...j(Qn.validate,L.message)},!n))return S(L.message),C}else if(Xe(p)){let A={};for(const L in p){if(!Tt(A)&&!n)break;const b=iy(await p[L](g,t),w,L);b&&(A={...b,...j(L,b.message)},S(b.message),n&&(C[y]=A))}if(!Tt(A)&&(C[y]={ref:w,...A},!n))return C}}return S(!0),C};function pj(e,t){const n=t.slice(0,-1).length;let r=0;for(;r<n;)e=Ye(e)?r++:e[t[r++]];return e}function hj(e){for(const t in e)if(e.hasOwnProperty(t)&&!Ye(e[t]))return!1;return!0}function et(e,t){const n=Array.isArray(t)?t:Wm(t)?[t]:z_(t),r=n.length===1?e:pj(e,n),o=n.length-1,i=n[o];return r&&delete r[i],o!==0&&(Xe(r)&&Tt(r)||Array.isArray(r)&&hj(r))&&et(e,n.slice(0,-1)),e}var wf=()=>{let e=[];return{get observers(){return e},next:o=>{for(const i of e)i.next&&i.next(o)},subscribe:o=>(e.push(o),{unsubscribe:()=>{e=e.filter(i=>i!==o)}}),unsubscribe:()=>{e=[]}}},rh=e=>wt(e)||!O_(e);function Vr(e,t){if(rh(e)||rh(t))return e===t;if(bo(e)&&bo(t))return e.getTime()===t.getTime();const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const o of n){const i=e[o];if(!r.includes(o))return!1;if(o!=="ref"){const s=t[o];if(bo(i)&&bo(s)||Xe(i)&&Xe(s)||Array.isArray(i)&&Array.isArray(s)?!Vr(i,s):i!==s)return!1}}return!0}var G_=e=>e.type==="select-multiple",mj=e=>Ym(e)||cl(e),_f=e=>pu(e)&&e.isConnected,Y_=e=>{for(const t in e)if(sr(e[t]))return!0;return!1};function mu(e,t={}){const n=Array.isArray(e);if(Xe(e)||n)for(const r in e)Array.isArray(e[r])||Xe(e[r])&&!Y_(e[r])?(t[r]=Array.isArray(e[r])?[]:{},mu(e[r],t[r])):wt(e[r])||(t[r]=!0);return t}function K_(e,t,n){const r=Array.isArray(e);if(Xe(e)||r)for(const o in e)Array.isArray(e[o])||Xe(e[o])&&!Y_(e[o])?Ye(t)||rh(n[o])?n[o]=Array.isArray(e[o])?mu(e[o],[]):{...mu(e[o])}:K_(e[o],wt(t)?{}:t[o],n[o]):n[o]=!Vr(e[o],t[o]);return n}var Rs=(e,t)=>K_(e,t,mu(t)),X_=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>Ye(e)?e:t?e===""?NaN:e&&+e:n&&Mn(e)?new Date(e):r?r(e):e;function Sf(e){const t=e.ref;if(!(e.refs?e.refs.every(n=>n.disabled):t.disabled))return Gm(t)?t.files:Ym(t)?Z_(e.refs).value:G_(t)?[...t.selectedOptions].map(({value:n})=>n):cl(t)?W_(e.refs).value:X_(Ye(t.value)?e.ref.value:t.value,e)}var gj=(e,t,n,r)=>{const o={};for(const i of e){const s=re(t,i);s&&Ie(o,i,s._f)}return{criteriaMode:n,names:[...e],fields:o,shouldUseNativeValidation:r}},As=e=>Ye(e)?e:hu(e)?e.source:Xe(e)?hu(e.value)?e.value.source:e.value:e;const ay="AsyncFunction";var vj=e=>(!e||!e.validate)&&!!(sr(e.validate)&&e.validate.constructor.name===ay||Xe(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===ay)),yj=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate);function ly(e,t,n){const r=re(e,n);if(r||Wm(n))return{error:r,name:n};const o=n.split(".");for(;o.length;){const i=o.join("."),s=re(t,i),a=re(e,i);if(s&&!Array.isArray(s)&&n!==i)return{name:n};if(a&&a.type)return{name:i,error:a};o.pop()}return{name:n}}var xj=(e,t,n,r,o)=>o.isOnAll?!1:!n&&o.isOnTouch?!(t||e):(n?r.isOnBlur:o.isOnBlur)?!e:(n?r.isOnChange:o.isOnChange)?e:!0,wj=(e,t)=>!ud(re(e,t)).length&&et(e,t);const _j={mode:hn.onSubmit,reValidateMode:hn.onChange,shouldFocusError:!0};function Sj(e={}){let t={..._j,...e},n={submitCount:0,isDirty:!1,isLoading:sr(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},o=Xe(t.defaultValues)||Xe(t.values)?Nt(t.defaultValues||t.values)||{}:{},i=t.shouldUnregister?{}:Nt(o),s={action:!1,mount:!1,watch:!1},a={mount:new Set,unMount:new Set,array:new Set,watch:new Set},l,c=0;const d={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},u={values:wf(),array:wf(),state:wf()},f=ey(t.mode),p=ey(t.reValidateMode),y=t.criteriaMode===hn.all,v=R=>F=>{clearTimeout(c),c=setTimeout(R,F)},_=async R=>{if(!e.disabled&&(d.isValid||R)){const F=t.resolver?Tt((await P()).errors):await j(r,!0);F!==n.isValid&&u.state.next({isValid:F})}},m=(R,F)=>{!e.disabled&&(d.isValidating||d.validatingFields)&&((R||Array.from(a.mount)).forEach(W=>{W&&(F?Ie(n.validatingFields,W,F):et(n.validatingFields,W))}),u.state.next({validatingFields:n.validatingFields,isValidating:!Tt(n.validatingFields)}))},g=(R,F=[],W,ie,te=!0,q=!0)=>{if(ie&&W&&!e.disabled){if(s.action=!0,q&&Array.isArray(re(r,R))){const pe=W(re(r,R),ie.argA,ie.argB);te&&Ie(r,R,pe)}if(q&&Array.isArray(re(n.errors,R))){const pe=W(re(n.errors,R),ie.argA,ie.argB);te&&Ie(n.errors,R,pe),wj(n.errors,R)}if(d.touchedFields&&q&&Array.isArray(re(n.touchedFields,R))){const pe=W(re(n.touchedFields,R),ie.argA,ie.argB);te&&Ie(n.touchedFields,R,pe)}d.dirtyFields&&(n.dirtyFields=Rs(o,i)),u.state.next({name:R,isDirty:A(R,F),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else Ie(i,R,F)},w=(R,F)=>{Ie(n.errors,R,F),u.state.next({errors:n.errors})},S=R=>{n.errors=R,u.state.next({errors:n.errors,isValid:!1})},C=(R,F,W,ie)=>{const te=re(r,R);if(te){const q=re(i,R,Ye(W)?re(o,R):W);Ye(q)||ie&&ie.defaultChecked||F?Ie(i,R,F?q:Sf(te._f)):M(R,q),s.mount&&_()}},N=(R,F,W,ie,te)=>{let q=!1,pe=!1;const ye={name:R};if(!e.disabled){const ze=!!(re(r,R)&&re(r,R)._f&&re(r,R)._f.disabled);if(!W||ie){d.isDirty&&(pe=n.isDirty,n.isDirty=ye.isDirty=A(),q=pe!==ye.isDirty);const Ve=ze||Vr(re(o,R),F);pe=!!(!ze&&re(n.dirtyFields,R)),Ve||ze?et(n.dirtyFields,R):Ie(n.dirtyFields,R,!0),ye.dirtyFields=n.dirtyFields,q=q||d.dirtyFields&&pe!==!Ve}if(W){const Ve=re(n.touchedFields,R);Ve||(Ie(n.touchedFields,R,W),ye.touchedFields=n.touchedFields,q=q||d.touchedFields&&Ve!==W)}q&&te&&u.state.next(ye)}return q?ye:{}},E=(R,F,W,ie)=>{const te=re(n.errors,R),q=d.isValid&&Qt(F)&&n.isValid!==F;if(e.delayError&&W?(l=v(()=>w(R,W)),l(e.delayError)):(clearTimeout(c),l=null,W?Ie(n.errors,R,W):et(n.errors,R)),(W?!Vr(te,W):te)||!Tt(ie)||q){const pe={...ie,...q&&Qt(F)?{isValid:F}:{},errors:n.errors,name:R};n={...n,...pe},u.state.next(pe)}},P=async R=>{m(R,!0);const F=await t.resolver(i,t.context,gj(R||a.mount,r,t.criteriaMode,t.shouldUseNativeValidation));return m(R),F},O=async R=>{const{errors:F}=await P(R);if(R)for(const W of R){const ie=re(F,W);ie?Ie(n.errors,W,ie):et(n.errors,W)}else n.errors=F;return F},j=async(R,F,W={valid:!0})=>{for(const ie in R){const te=R[ie];if(te){const{_f:q,...pe}=te;if(q){const ye=a.array.has(q.name),ze=te._f&&vj(te._f);ze&&d.validatingFields&&m([ie],!0);const Ve=await sy(te,i,y,t.shouldUseNativeValidation&&!F,ye);if(ze&&d.validatingFields&&m([ie]),Ve[q.name]&&(W.valid=!1,F))break;!F&&(re(Ve,q.name)?ye?fj(n.errors,Ve,q.name):Ie(n.errors,q.name,Ve[q.name]):et(n.errors,q.name))}!Tt(pe)&&await j(pe,F,W)}}return W.valid},$=()=>{for(const R of a.unMount){const F=re(r,R);F&&(F._f.refs?F._f.refs.every(W=>!_f(W)):!_f(F._f.ref))&&G(R)}a.unMount=new Set},A=(R,F)=>!e.disabled&&(R&&F&&Ie(i,R,F),!Vr(U(),o)),L=(R,F,W)=>B_(R,a,{...s.mount?i:Ye(F)?o:Mn(R)?{[R]:F}:F},W,F),b=R=>ud(re(s.mount?i:o,R,e.shouldUnregister?re(o,R,[]):[])),M=(R,F,W={})=>{const ie=re(r,R);let te=F;if(ie){const q=ie._f;q&&(!q.disabled&&Ie(i,R,X_(F,q)),te=pu(q.ref)&&wt(F)?"":F,G_(q.ref)?[...q.ref.options].forEach(pe=>pe.selected=te.includes(pe.value)):q.refs?cl(q.ref)?q.refs.length>1?q.refs.forEach(pe=>(!pe.defaultChecked||!pe.disabled)&&(pe.checked=Array.isArray(te)?!!te.find(ye=>ye===pe.value):te===pe.value)):q.refs[0]&&(q.refs[0].checked=!!te):q.refs.forEach(pe=>pe.checked=pe.value===te):Gm(q.ref)?q.ref.value="":(q.ref.value=te,q.ref.type||u.values.next({name:R,values:{...i}})))}(W.shouldDirty||W.shouldTouch)&&N(R,te,W.shouldTouch,W.shouldDirty,!0),W.shouldValidate&&z(R)},T=(R,F,W)=>{for(const ie in F){const te=F[ie],q=`${R}.${ie}`,pe=re(r,q);(a.array.has(R)||Xe(te)||pe&&!pe._f)&&!bo(te)?T(q,te,W):M(q,te,W)}},D=(R,F,W={})=>{const ie=re(r,R),te=a.array.has(R),q=Nt(F);Ie(i,R,q),te?(u.array.next({name:R,values:{...i}}),(d.isDirty||d.dirtyFields)&&W.shouldDirty&&u.state.next({name:R,dirtyFields:Rs(o,i),isDirty:A(R,q)})):ie&&!ie._f&&!wt(q)?T(R,q,W):M(R,q,W),ty(R,a)&&u.state.next({...n}),u.values.next({name:s.mount?R:void 0,values:{...i}})},k=async R=>{s.mount=!0;const F=R.target;let W=F.name,ie=!0;const te=re(r,W),q=()=>F.type?Sf(te._f):D_(R),pe=ye=>{ie=Number.isNaN(ye)||bo(ye)&&isNaN(ye.getTime())||Vr(ye,re(i,W,ye))};if(te){let ye,ze;const Ve=q(),Yn=R.type===fu.BLUR||R.type===fu.FOCUS_OUT,gs=!yj(te._f)&&!t.resolver&&!re(n.errors,W)&&!te._f.deps||xj(Yn,re(n.touchedFields,W),n.isSubmitted,p,f),vs=ty(W,a,Yn);Ie(i,W,Ve),Yn?(te._f.onBlur&&te._f.onBlur(R),l&&l(0)):te._f.onChange&&te._f.onChange(R);const ys=N(W,Ve,Yn,!1),Rd=!Tt(ys)||vs;if(!Yn&&u.values.next({name:W,type:R.type,values:{...i}}),gs)return d.isValid&&(e.mode==="onBlur"?Yn&&_():_()),Rd&&u.state.next({name:W,...vs?{}:ys});if(!Yn&&vs&&u.state.next({...n}),t.resolver){const{errors:gl}=await P([W]);if(pe(Ve),ie){const Ad=ly(n.errors,r,W),vl=ly(gl,r,Ad.name||W);ye=vl.error,W=vl.name,ze=Tt(gl)}}else m([W],!0),ye=(await sy(te,i,y,t.shouldUseNativeValidation))[W],m([W]),pe(Ve),ie&&(ye?ze=!1:d.isValid&&(ze=await j(r,!0)));ie&&(te._f.deps&&z(te._f.deps),E(W,ze,ye,ys))}},I=(R,F)=>{if(re(n.errors,F)&&R.focus)return R.focus(),1},z=async(R,F={})=>{let W,ie;const te=na(R);if(t.resolver){const q=await O(Ye(R)?R:te);W=Tt(q),ie=R?!te.some(pe=>re(q,pe)):W}else R?(ie=(await Promise.all(te.map(async q=>{const pe=re(r,q);return await j(pe&&pe._f?{[q]:pe}:pe)}))).every(Boolean),!(!ie&&!n.isValid)&&_()):ie=W=await j(r);return u.state.next({...!Mn(R)||d.isValid&&W!==n.isValid?{}:{name:R},...t.resolver||!R?{isValid:W}:{},errors:n.errors}),F.shouldFocus&&!ie&&ra(r,I,R?te:a.mount),ie},U=R=>{const F={...s.mount?i:o};return Ye(R)?F:Mn(R)?re(F,R):R.map(W=>re(F,W))},Y=(R,F)=>({invalid:!!re((F||n).errors,R),isDirty:!!re((F||n).dirtyFields,R),error:re((F||n).errors,R),isValidating:!!re(n.validatingFields,R),isTouched:!!re((F||n).touchedFields,R)}),H=R=>{R&&na(R).forEach(F=>et(n.errors,F)),u.state.next({errors:R?n.errors:{}})},Z=(R,F,W)=>{const ie=(re(r,R,{_f:{}})._f||{}).ref,te=re(n.errors,R)||{},{ref:q,message:pe,type:ye,...ze}=te;Ie(n.errors,R,{...ze,...F,ref:ie}),u.state.next({name:R,errors:n.errors,isValid:!1}),W&&W.shouldFocus&&ie&&ie.focus&&ie.focus()},K=(R,F)=>sr(R)?u.values.subscribe({next:W=>R(L(void 0,F),W)}):L(R,F,!0),G=(R,F={})=>{for(const W of R?na(R):a.mount)a.mount.delete(W),a.array.delete(W),F.keepValue||(et(r,W),et(i,W)),!F.keepError&&et(n.errors,W),!F.keepDirty&&et(n.dirtyFields,W),!F.keepTouched&&et(n.touchedFields,W),!F.keepIsValidating&&et(n.validatingFields,W),!t.shouldUnregister&&!F.keepDefaultValue&&et(o,W);u.values.next({values:{...i}}),u.state.next({...n,...F.keepDirty?{isDirty:A()}:{}}),!F.keepIsValid&&_()},V=({disabled:R,name:F,field:W,fields:ie,value:te})=>{if(Qt(R)&&s.mount||R){const q=R?void 0:Ye(te)?Sf(W?W._f:re(ie,F)._f):te;Ie(i,F,q),N(F,q,!1,!1,!0)}},B=(R,F={})=>{let W=re(r,R);const ie=Qt(F.disabled)||Qt(e.disabled);return Ie(r,R,{...W||{},_f:{...W&&W._f?W._f:{ref:{name:R}},name:R,mount:!0,...F}}),a.mount.add(R),W?V({field:W,disabled:Qt(F.disabled)?F.disabled:e.disabled,name:R,value:F.value}):C(R,!0,F.value),{...ie?{disabled:F.disabled||e.disabled}:{},...t.progressive?{required:!!F.required,min:As(F.min),max:As(F.max),minLength:As(F.minLength),maxLength:As(F.maxLength),pattern:As(F.pattern)}:{},name:R,onChange:k,onBlur:k,ref:te=>{if(te){B(R,F),W=re(r,R);const q=Ye(te.value)&&te.querySelectorAll&&te.querySelectorAll("input,select,textarea")[0]||te,pe=mj(q),ye=W._f.refs||[];if(pe?ye.find(ze=>ze===q):q===W._f.ref)return;Ie(r,R,{_f:{...W._f,...pe?{refs:[...ye.filter(_f),q,...Array.isArray(re(o,R))?[{}]:[]],ref:{type:q.type,name:R}}:{ref:q}}}),C(R,!1,void 0,q)}else W=re(r,R,{}),W._f&&(W._f.mount=!1),(t.shouldUnregister||F.shouldUnregister)&&!(L_(a.array,R)&&s.action)&&a.unMount.add(R)}}},ee=()=>t.shouldFocusError&&ra(r,I,a.mount),ne=R=>{Qt(R)&&(u.state.next({disabled:R}),ra(r,(F,W)=>{const ie=re(r,W);ie&&(F.disabled=ie._f.disabled||R,Array.isArray(ie._f.refs)&&ie._f.refs.forEach(te=>{te.disabled=ie._f.disabled||R}))},0,!1))},oe=(R,F)=>async W=>{let ie;W&&(W.preventDefault&&W.preventDefault(),W.persist&&W.persist());let te=Nt(i);if(u.state.next({isSubmitting:!0}),t.resolver){const{errors:q,values:pe}=await P();n.errors=q,te=pe}else await j(r);if(et(n.errors,"root"),Tt(n.errors)){u.state.next({errors:{}});try{await R(te,W)}catch(q){ie=q}}else F&&await F({...n.errors},W),ee(),setTimeout(ee);if(u.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Tt(n.errors)&&!ie,submitCount:n.submitCount+1,errors:n.errors}),ie)throw ie},X=(R,F={})=>{re(r,R)&&(Ye(F.defaultValue)?D(R,Nt(re(o,R))):(D(R,F.defaultValue),Ie(o,R,Nt(F.defaultValue))),F.keepTouched||et(n.touchedFields,R),F.keepDirty||(et(n.dirtyFields,R),n.isDirty=F.defaultValue?A(R,Nt(re(o,R))):A()),F.keepError||(et(n.errors,R),d.isValid&&_()),u.state.next({...n}))},ae=(R,F={})=>{const W=R?Nt(R):o,ie=Nt(W),te=Tt(R),q=te?o:ie;if(F.keepDefaultValues||(o=W),!F.keepValues){if(F.keepDirtyValues){const pe=new Set([...a.mount,...Object.keys(Rs(o,i))]);for(const ye of Array.from(pe))re(n.dirtyFields,ye)?Ie(q,ye,re(i,ye)):D(ye,re(q,ye))}else{if(Um&&Ye(R))for(const pe of a.mount){const ye=re(r,pe);if(ye&&ye._f){const ze=Array.isArray(ye._f.refs)?ye._f.refs[0]:ye._f.ref;if(pu(ze)){const Ve=ze.closest("form");if(Ve){Ve.reset();break}}}}r={}}i=e.shouldUnregister?F.keepDefaultValues?Nt(o):{}:Nt(q),u.array.next({values:{...q}}),u.values.next({values:{...q}})}a={mount:F.keepDirtyValues?a.mount:new Set,unMount:new Set,array:new Set,watch:new Set,watchAll:!1,focus:""},s.mount=!d.isValid||!!F.keepIsValid||!!F.keepDirtyValues,s.watch=!!e.shouldUnregister,u.state.next({submitCount:F.keepSubmitCount?n.submitCount:0,isDirty:te?!1:F.keepDirty?n.isDirty:!!(F.keepDefaultValues&&!Vr(R,o)),isSubmitted:F.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:te?{}:F.keepDirtyValues?F.keepDefaultValues&&i?Rs(o,i):n.dirtyFields:F.keepDefaultValues&&R?Rs(o,R):F.keepDirty?n.dirtyFields:{},touchedFields:F.keepTouched?n.touchedFields:{},errors:F.keepErrors?n.errors:{},isSubmitSuccessful:F.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},me=(R,F)=>ae(sr(R)?R(i):R,F);return{control:{register:B,unregister:G,getFieldState:Y,handleSubmit:oe,setError:Z,_executeSchema:P,_getWatch:L,_getDirty:A,_updateValid:_,_removeUnmounted:$,_updateFieldArray:g,_updateDisabledField:V,_getFieldArray:b,_reset:ae,_resetDefaultValues:()=>sr(t.defaultValues)&&t.defaultValues().then(R=>{me(R,t.resetOptions),u.state.next({isLoading:!1})}),_updateFormState:R=>{n={...n,...R}},_disableForm:ne,_subjects:u,_proxyFormState:d,_setErrors:S,get _fields(){return r},get _formValues(){return i},get _state(){return s},set _state(R){s=R},get _defaultValues(){return o},get _names(){return a},set _names(R){a=R},get _formState(){return n},set _formState(R){n=R},get _options(){return t},set _options(R){t={...t,...R}}},trigger:z,register:B,handleSubmit:oe,watch:K,setValue:D,getValues:U,reset:me,resetField:X,clearErrors:H,unregister:G,setError:Z,setFocus:(R,F={})=>{const W=re(r,R),ie=W&&W._f;if(ie){const te=ie.refs?ie.refs[0]:ie.ref;te.focus&&(te.focus(),F.shouldSelect&&te.select())}},getFieldState:Y}}function yr(e={}){const t=de.useRef(),n=de.useRef(),[r,o]=de.useState({isDirty:!1,isValidating:!1,isLoading:sr(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,defaultValues:sr(e.defaultValues)?void 0:e.defaultValues});t.current||(t.current={...Sj(e),formState:r});const i=t.current.control;return i._options=e,Zm({subject:i._subjects.state,next:s=>{V_(s,i._proxyFormState,i._updateFormState,!0)&&o({...i._formState})}}),de.useEffect(()=>i._disableForm(e.disabled),[i,e.disabled]),de.useEffect(()=>{if(i._proxyFormState.isDirty){const s=i._getDirty();s!==r.isDirty&&i._subjects.state.next({isDirty:s})}},[i,r.isDirty]),de.useEffect(()=>{e.values&&!Vr(e.values,n.current)?(i._reset(e.values,i._options.resetOptions),n.current=e.values,o(s=>({...s}))):i._resetDefaultValues()},[e.values,i]),de.useEffect(()=>{e.errors&&i._setErrors(e.errors)},[e.errors,i]),de.useEffect(()=>{i._state.mount||(i._updateValid(),i._state.mount=!0),i._state.watch&&(i._state.watch=!1,i._subjects.state.next({...i._formState})),i._removeUnmounted()}),de.useEffect(()=>{e.shouldUnregister&&i._subjects.values.next({values:i._getWatch()})},[e.shouldUnregister,i]),de.useEffect(()=>{t.current&&(t.current.watch=t.current.watch.bind({}))},[r]),t.current.formState=F_(r,i),t.current}const cy=(e,t,n)=>{if(e&&"reportValidity"in e){const r=re(n,t);e.setCustomValidity(r&&r.message||""),e.reportValidity()}},q_=(e,t)=>{for(const n in t.fields){const r=t.fields[n];r&&r.ref&&"reportValidity"in r.ref?cy(r.ref,n,e):r.refs&&r.refs.forEach(o=>cy(o,n,e))}},bj=(e,t)=>{t.shouldUseNativeValidation&&q_(e,t);const n={};for(const r in e){const o=re(t.fields,r),i=Object.assign(e[r]||{},{ref:o&&o.ref});if(Cj(t.names||Object.keys(e),r)){const s=Object.assign({},re(n,r));Ie(s,"root",i),Ie(n,r,s)}else Ie(n,r,i)}return n},Cj=(e,t)=>e.some(n=>n.startsWith(t+"."));var Ej=function(e,t){for(var n={};e.length;){var r=e[0],o=r.code,i=r.message,s=r.path.join(".");if(!n[s])if("unionErrors"in r){var a=r.unionErrors[0].errors[0];n[s]={message:a.message,type:a.code}}else n[s]={message:i,type:o};if("unionErrors"in r&&r.unionErrors.forEach(function(d){return d.errors.forEach(function(u){return e.push(u)})}),t){var l=n[s].types,c=l&&l[r.code];n[s]=U_(s,t,n,o,c?[].concat(c,r.message):r.message)}e.shift()}return n},xr=function(e,t,n){return n===void 0&&(n={}),function(r,o,i){try{return Promise.resolve(function(s,a){try{var l=Promise.resolve(e[n.mode==="sync"?"parse":"parseAsync"](r,t)).then(function(c){return i.shouldUseNativeValidation&&q_({},i),{errors:{},values:n.raw?r:c}})}catch(c){return a(c)}return l&&l.then?l.then(void 0,a):l}(0,function(s){if(function(a){return Array.isArray(a==null?void 0:a.errors)}(s))return{values:{},errors:bj(Ej(s.errors,!i.shouldUseNativeValidation&&i.criteriaMode==="all"),i)};throw s}))}catch(s){return Promise.reject(s)}}},kj="Label",Q_=x.forwardRef((e,t)=>h.jsx(xe.label,{...e,ref:t,onMouseDown:n=>{var o;n.target.closest("button, input, select, textarea")||((o=e.onMouseDown)==null||o.call(e,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));Q_.displayName=kj;var J_=Q_;const Nj=td("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),eS=x.forwardRef(({className:e,...t},n)=>h.jsx(J_,{ref:n,className:we(Nj(),e),...t}));eS.displayName=J_.displayName;const wr=aj,tS=x.createContext({}),ut=({...e})=>h.jsx(tS.Provider,{value:{name:e.name},children:h.jsx(dj,{...e})}),fd=()=>{const e=x.useContext(tS),t=x.useContext(nS),{getFieldState:n,formState:r}=dd(),o=n(e.name,r);if(!e)throw new Error("useFormField should be used within <FormField>");const{id:i}=t;return{id:i,name:e.name,formItemId:`${i}-form-item`,formDescriptionId:`${i}-form-item-description`,formMessageId:`${i}-form-item-message`,...o}},nS=x.createContext({}),ot=x.forwardRef(({className:e,...t},n)=>{const r=x.useId();return h.jsx(nS.Provider,{value:{id:r},children:h.jsx("div",{ref:n,className:we("space-y-2",e),...t})})});ot.displayName="FormItem";const Tj=x.forwardRef(({className:e,...t},n)=>{const{error:r,formItemId:o}=fd();return h.jsx(eS,{ref:n,className:we(r&&"text-destructive",e),htmlFor:o,...t})});Tj.displayName="FormLabel";const it=x.forwardRef(({...e},t)=>{const{error:n,formItemId:r,formDescriptionId:o,formMessageId:i}=fd();return h.jsx(to,{ref:t,id:r,"aria-describedby":n?`${o} ${i}`:`${o}`,"aria-invalid":!!n,...e})});it.displayName="FormControl";const Pj=x.forwardRef(({className:e,...t},n)=>{const{formDescriptionId:r}=fd();return h.jsx("p",{ref:n,id:r,className:we("text-[0.8rem] text-muted-foreground",e),...t})});Pj.displayName="FormDescription";const st=x.forwardRef(({className:e,children:t,...n},r)=>{const{error:o,formMessageId:i}=fd(),s=o?String(o==null?void 0:o.message):t;return s?h.jsx("p",{ref:r,id:i,className:we("text-[0.8rem] font-medium text-destructive",e),...n,children:s}):null});st.displayName="FormMessage";const nn=x.forwardRef(({className:e,type:t,...n},r)=>h.jsx("input",{type:t,className:we("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...n}));nn.displayName="Input";function uy(e,[t,n]){return Math.min(n,Math.max(t,e))}function Ij(e,t=globalThis==null?void 0:globalThis.document){const n=Dt(e);x.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var Rj="DismissableLayer",oh="dismissableLayer.update",Aj="dismissableLayer.pointerDownOutside",Mj="dismissableLayer.focusOutside",dy,rS=x.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),ul=x.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:a,...l}=e,c=x.useContext(rS),[d,u]=x.useState(null),f=(d==null?void 0:d.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=x.useState({}),y=Ae(t,E=>u(E)),v=Array.from(c.layers),[_]=[...c.layersWithOutsidePointerEventsDisabled].slice(-1),m=v.indexOf(_),g=d?v.indexOf(d):-1,w=c.layersWithOutsidePointerEventsDisabled.size>0,S=g>=m,C=Oj(E=>{const P=E.target,O=[...c.branches].some(j=>j.contains(P));!S||O||(o==null||o(E),s==null||s(E),E.defaultPrevented||a==null||a())},f),N=Dj(E=>{const P=E.target;[...c.branches].some(j=>j.contains(P))||(i==null||i(E),s==null||s(E),E.defaultPrevented||a==null||a())},f);return Ij(E=>{g===c.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&a&&(E.preventDefault(),a()))},f),x.useEffect(()=>{if(d)return n&&(c.layersWithOutsidePointerEventsDisabled.size===0&&(dy=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),c.layersWithOutsidePointerEventsDisabled.add(d)),c.layers.add(d),fy(),()=>{n&&c.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=dy)}},[d,f,n,c]),x.useEffect(()=>()=>{d&&(c.layers.delete(d),c.layersWithOutsidePointerEventsDisabled.delete(d),fy())},[d,c]),x.useEffect(()=>{const E=()=>p({});return document.addEventListener(oh,E),()=>document.removeEventListener(oh,E)},[]),h.jsx(xe.div,{...l,ref:y,style:{pointerEvents:w?S?"auto":"none":void 0,...e.style},onFocusCapture:he(e.onFocusCapture,N.onFocusCapture),onBlurCapture:he(e.onBlurCapture,N.onBlurCapture),onPointerDownCapture:he(e.onPointerDownCapture,C.onPointerDownCapture)})});ul.displayName=Rj;var jj="DismissableLayerBranch",oS=x.forwardRef((e,t)=>{const n=x.useContext(rS),r=x.useRef(null),o=Ae(t,r);return x.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),h.jsx(xe.div,{...e,ref:o})});oS.displayName=jj;function Oj(e,t=globalThis==null?void 0:globalThis.document){const n=Dt(e),r=x.useRef(!1),o=x.useRef(()=>{});return x.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let l=function(){iS(Aj,n,c,{discrete:!0})};const c={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=l,t.addEventListener("click",o.current,{once:!0})):l()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function Dj(e,t=globalThis==null?void 0:globalThis.document){const n=Dt(e),r=x.useRef(!1);return x.useEffect(()=>{const o=i=>{i.target&&!r.current&&iS(Mj,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function fy(){const e=new CustomEvent(oh);document.dispatchEvent(e)}function iS(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?e_(o,i):o.dispatchEvent(i)}var Lj=ul,zj=oS,bf=0;function sS(){x.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??py()),document.body.insertAdjacentElement("beforeend",e[1]??py()),bf++,()=>{bf===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),bf--}},[])}function py(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var Cf="focusScope.autoFocusOnMount",Ef="focusScope.autoFocusOnUnmount",hy={bubbles:!1,cancelable:!0},$j="FocusScope",Km=x.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[a,l]=x.useState(null),c=Dt(o),d=Dt(i),u=x.useRef(null),f=Ae(t,v=>l(v)),p=x.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;x.useEffect(()=>{if(r){let v=function(w){if(p.paused||!a)return;const S=w.target;a.contains(S)?u.current=S:Mr(u.current,{select:!0})},_=function(w){if(p.paused||!a)return;const S=w.relatedTarget;S!==null&&(a.contains(S)||Mr(u.current,{select:!0}))},m=function(w){if(document.activeElement===document.body)for(const C of w)C.removedNodes.length>0&&Mr(a)};document.addEventListener("focusin",v),document.addEventListener("focusout",_);const g=new MutationObserver(m);return a&&g.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",v),document.removeEventListener("focusout",_),g.disconnect()}}},[r,a,p.paused]),x.useEffect(()=>{if(a){gy.add(p);const v=document.activeElement;if(!a.contains(v)){const m=new CustomEvent(Cf,hy);a.addEventListener(Cf,c),a.dispatchEvent(m),m.defaultPrevented||(Fj(Wj(aS(a)),{select:!0}),document.activeElement===v&&Mr(a))}return()=>{a.removeEventListener(Cf,c),setTimeout(()=>{const m=new CustomEvent(Ef,hy);a.addEventListener(Ef,d),a.dispatchEvent(m),m.defaultPrevented||Mr(v??document.body,{select:!0}),a.removeEventListener(Ef,d),gy.remove(p)},0)}}},[a,c,d,p]);const y=x.useCallback(v=>{if(!n&&!r||p.paused)return;const _=v.key==="Tab"&&!v.altKey&&!v.ctrlKey&&!v.metaKey,m=document.activeElement;if(_&&m){const g=v.currentTarget,[w,S]=Vj(g);w&&S?!v.shiftKey&&m===S?(v.preventDefault(),n&&Mr(w,{select:!0})):v.shiftKey&&m===w&&(v.preventDefault(),n&&Mr(S,{select:!0})):m===g&&v.preventDefault()}},[n,r,p.paused]);return h.jsx(xe.div,{tabIndex:-1,...s,ref:f,onKeyDown:y})});Km.displayName=$j;function Fj(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Mr(r,{select:t}),document.activeElement!==n)return}function Vj(e){const t=aS(e),n=my(t,e),r=my(t.reverse(),e);return[n,r]}function aS(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function my(e,t){for(const n of e)if(!Hj(n,{upTo:t}))return n}function Hj(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function Bj(e){return e instanceof HTMLInputElement&&"select"in e}function Mr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Bj(e)&&t&&e.select()}}var gy=Uj();function Uj(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=vy(e,t),e.unshift(t)},remove(t){var n;e=vy(e,t),(n=e[0])==null||n.resume()}}}function vy(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Wj(e){return e.filter(t=>t.tagName!=="A")}const Zj=["top","right","bottom","left"],so=Math.min,Vt=Math.max,gu=Math.round,Wl=Math.floor,$n=e=>({x:e,y:e}),Gj={left:"right",right:"left",bottom:"top",top:"bottom"},Yj={start:"end",end:"start"};function ih(e,t,n){return Vt(e,so(t,n))}function _r(e,t){return typeof e=="function"?e(t):e}function Sr(e){return e.split("-")[0]}function ps(e){return e.split("-")[1]}function Xm(e){return e==="x"?"y":"x"}function qm(e){return e==="y"?"height":"width"}function ao(e){return["top","bottom"].includes(Sr(e))?"y":"x"}function Qm(e){return Xm(ao(e))}function Kj(e,t,n){n===void 0&&(n=!1);const r=ps(e),o=Qm(e),i=qm(o);let s=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(s=vu(s)),[s,vu(s)]}function Xj(e){const t=vu(e);return[sh(e),t,sh(t)]}function sh(e){return e.replace(/start|end/g,t=>Yj[t])}function qj(e,t,n){const r=["left","right"],o=["right","left"],i=["top","bottom"],s=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?i:s;default:return[]}}function Qj(e,t,n,r){const o=ps(e);let i=qj(Sr(e),n==="start",r);return o&&(i=i.map(s=>s+"-"+o),t&&(i=i.concat(i.map(sh)))),i}function vu(e){return e.replace(/left|right|bottom|top/g,t=>Gj[t])}function Jj(e){return{top:0,right:0,bottom:0,left:0,...e}}function lS(e){return typeof e!="number"?Jj(e):{top:e,right:e,bottom:e,left:e}}function yu(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}function yy(e,t,n){let{reference:r,floating:o}=e;const i=ao(t),s=Qm(t),a=qm(s),l=Sr(t),c=i==="y",d=r.x+r.width/2-o.width/2,u=r.y+r.height/2-o.height/2,f=r[a]/2-o[a]/2;let p;switch(l){case"top":p={x:d,y:r.y-o.height};break;case"bottom":p={x:d,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:u};break;case"left":p={x:r.x-o.width,y:u};break;default:p={x:r.x,y:r.y}}switch(ps(t)){case"start":p[s]-=f*(n&&c?-1:1);break;case"end":p[s]+=f*(n&&c?-1:1);break}return p}const e9=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:i=[],platform:s}=n,a=i.filter(Boolean),l=await(s.isRTL==null?void 0:s.isRTL(t));let c=await s.getElementRects({reference:e,floating:t,strategy:o}),{x:d,y:u}=yy(c,r,l),f=r,p={},y=0;for(let v=0;v<a.length;v++){const{name:_,fn:m}=a[v],{x:g,y:w,data:S,reset:C}=await m({x:d,y:u,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:s,elements:{reference:e,floating:t}});d=g??d,u=w??u,p={...p,[_]:{...p[_],...S}},C&&y<=50&&(y++,typeof C=="object"&&(C.placement&&(f=C.placement),C.rects&&(c=C.rects===!0?await s.getElementRects({reference:e,floating:t,strategy:o}):C.rects),{x:d,y:u}=yy(c,f,l)),v=-1)}return{x:d,y:u,placement:f,strategy:o,middlewareData:p}};async function Ga(e,t){var n;t===void 0&&(t={});const{x:r,y:o,platform:i,rects:s,elements:a,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:f=!1,padding:p=0}=_r(t,e),y=lS(p),_=a[f?u==="floating"?"reference":"floating":u],m=yu(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(_)))==null||n?_:_.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(a.floating)),boundary:c,rootBoundary:d,strategy:l})),g=u==="floating"?{x:r,y:o,width:s.floating.width,height:s.floating.height}:s.reference,w=await(i.getOffsetParent==null?void 0:i.getOffsetParent(a.floating)),S=await(i.isElement==null?void 0:i.isElement(w))?await(i.getScale==null?void 0:i.getScale(w))||{x:1,y:1}:{x:1,y:1},C=yu(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:g,offsetParent:w,strategy:l}):g);return{top:(m.top-C.top+y.top)/S.y,bottom:(C.bottom-m.bottom+y.bottom)/S.y,left:(m.left-C.left+y.left)/S.x,right:(C.right-m.right+y.right)/S.x}}const t9=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:i,platform:s,elements:a,middlewareData:l}=t,{element:c,padding:d=0}=_r(e,t)||{};if(c==null)return{};const u=lS(d),f={x:n,y:r},p=Qm(o),y=qm(p),v=await s.getDimensions(c),_=p==="y",m=_?"top":"left",g=_?"bottom":"right",w=_?"clientHeight":"clientWidth",S=i.reference[y]+i.reference[p]-f[p]-i.floating[y],C=f[p]-i.reference[p],N=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c));let E=N?N[w]:0;(!E||!await(s.isElement==null?void 0:s.isElement(N)))&&(E=a.floating[w]||i.floating[y]);const P=S/2-C/2,O=E/2-v[y]/2-1,j=so(u[m],O),$=so(u[g],O),A=j,L=E-v[y]-$,b=E/2-v[y]/2+P,M=ih(A,b,L),T=!l.arrow&&ps(o)!=null&&b!==M&&i.reference[y]/2-(b<A?j:$)-v[y]/2<0,D=T?b<A?b-A:b-L:0;return{[p]:f[p]+D,data:{[p]:M,centerOffset:b-M-D,...T&&{alignmentOffset:D}},reset:T}}}),n9=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:o,middlewareData:i,rects:s,initialPlacement:a,platform:l,elements:c}=t,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:f,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:y="none",flipAlignment:v=!0,..._}=_r(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};const m=Sr(o),g=ao(a),w=Sr(a)===a,S=await(l.isRTL==null?void 0:l.isRTL(c.floating)),C=f||(w||!v?[vu(a)]:Xj(a)),N=y!=="none";!f&&N&&C.push(...Qj(a,v,y,S));const E=[a,...C],P=await Ga(t,_),O=[];let j=((r=i.flip)==null?void 0:r.overflows)||[];if(d&&O.push(P[m]),u){const b=Kj(o,s,S);O.push(P[b[0]],P[b[1]])}if(j=[...j,{placement:o,overflows:O}],!O.every(b=>b<=0)){var $,A;const b=((($=i.flip)==null?void 0:$.index)||0)+1,M=E[b];if(M)return{data:{index:b,overflows:j},reset:{placement:M}};let T=(A=j.filter(D=>D.overflows[0]<=0).sort((D,k)=>D.overflows[1]-k.overflows[1])[0])==null?void 0:A.placement;if(!T)switch(p){case"bestFit":{var L;const D=(L=j.filter(k=>{if(N){const I=ao(k.placement);return I===g||I==="y"}return!0}).map(k=>[k.placement,k.overflows.filter(I=>I>0).reduce((I,z)=>I+z,0)]).sort((k,I)=>k[1]-I[1])[0])==null?void 0:L[0];D&&(T=D);break}case"initialPlacement":T=a;break}if(o!==T)return{reset:{placement:T}}}return{}}}};function xy(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function wy(e){return Zj.some(t=>e[t]>=0)}const r9=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...o}=_r(e,t);switch(r){case"referenceHidden":{const i=await Ga(t,{...o,elementContext:"reference"}),s=xy(i,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:wy(s)}}}case"escaped":{const i=await Ga(t,{...o,altBoundary:!0}),s=xy(i,n.floating);return{data:{escapedOffsets:s,escaped:wy(s)}}}default:return{}}}}};async function o9(e,t){const{placement:n,platform:r,elements:o}=e,i=await(r.isRTL==null?void 0:r.isRTL(o.floating)),s=Sr(n),a=ps(n),l=ao(n)==="y",c=["left","top"].includes(s)?-1:1,d=i&&l?-1:1,u=_r(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:y}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return a&&typeof y=="number"&&(p=a==="end"?y*-1:y),l?{x:p*d,y:f*c}:{x:f*c,y:p*d}}const i9=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:i,placement:s,middlewareData:a}=t,l=await o9(t,e);return s===((n=a.offset)==null?void 0:n.placement)&&(r=a.arrow)!=null&&r.alignmentOffset?{}:{x:o+l.x,y:i+l.y,data:{...l,placement:s}}}}},s9=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:i=!0,crossAxis:s=!1,limiter:a={fn:_=>{let{x:m,y:g}=_;return{x:m,y:g}}},...l}=_r(e,t),c={x:n,y:r},d=await Ga(t,l),u=ao(Sr(o)),f=Xm(u);let p=c[f],y=c[u];if(i){const _=f==="y"?"top":"left",m=f==="y"?"bottom":"right",g=p+d[_],w=p-d[m];p=ih(g,p,w)}if(s){const _=u==="y"?"top":"left",m=u==="y"?"bottom":"right",g=y+d[_],w=y-d[m];y=ih(g,y,w)}const v=a.fn({...t,[f]:p,[u]:y});return{...v,data:{x:v.x-n,y:v.y-r,enabled:{[f]:i,[u]:s}}}}}},a9=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:i,middlewareData:s}=t,{offset:a=0,mainAxis:l=!0,crossAxis:c=!0}=_r(e,t),d={x:n,y:r},u=ao(o),f=Xm(u);let p=d[f],y=d[u];const v=_r(a,t),_=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:0,crossAxis:0,...v};if(l){const w=f==="y"?"height":"width",S=i.reference[f]-i.floating[w]+_.mainAxis,C=i.reference[f]+i.reference[w]-_.mainAxis;p<S?p=S:p>C&&(p=C)}if(c){var m,g;const w=f==="y"?"width":"height",S=["top","left"].includes(Sr(o)),C=i.reference[u]-i.floating[w]+(S&&((m=s.offset)==null?void 0:m[u])||0)+(S?0:_.crossAxis),N=i.reference[u]+i.reference[w]+(S?0:((g=s.offset)==null?void 0:g[u])||0)-(S?_.crossAxis:0);y<C?y=C:y>N&&(y=N)}return{[f]:p,[u]:y}}}},l9=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:o,rects:i,platform:s,elements:a}=t,{apply:l=()=>{},...c}=_r(e,t),d=await Ga(t,c),u=Sr(o),f=ps(o),p=ao(o)==="y",{width:y,height:v}=i.floating;let _,m;u==="top"||u==="bottom"?(_=u,m=f===(await(s.isRTL==null?void 0:s.isRTL(a.floating))?"start":"end")?"left":"right"):(m=u,_=f==="end"?"top":"bottom");const g=v-d.top-d.bottom,w=y-d.left-d.right,S=so(v-d[_],g),C=so(y-d[m],w),N=!t.middlewareData.shift;let E=S,P=C;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(P=w),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(E=g),N&&!f){const j=Vt(d.left,0),$=Vt(d.right,0),A=Vt(d.top,0),L=Vt(d.bottom,0);p?P=y-2*(j!==0||$!==0?j+$:Vt(d.left,d.right)):E=v-2*(A!==0||L!==0?A+L:Vt(d.top,d.bottom))}await l({...t,availableWidth:P,availableHeight:E});const O=await s.getDimensions(a.floating);return y!==O.width||v!==O.height?{reset:{rects:!0}}:{}}}};function pd(){return typeof window<"u"}function hs(e){return cS(e)?(e.nodeName||"").toLowerCase():"#document"}function Gt(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Gn(e){var t;return(t=(cS(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function cS(e){return pd()?e instanceof Node||e instanceof Gt(e).Node:!1}function En(e){return pd()?e instanceof Element||e instanceof Gt(e).Element:!1}function Wn(e){return pd()?e instanceof HTMLElement||e instanceof Gt(e).HTMLElement:!1}function _y(e){return!pd()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Gt(e).ShadowRoot}function dl(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=kn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function c9(e){return["table","td","th"].includes(hs(e))}function hd(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function Jm(e){const t=eg(),n=En(e)?kn(e):e;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function u9(e){let t=lo(e);for(;Wn(t)&&!is(t);){if(Jm(t))return t;if(hd(t))return null;t=lo(t)}return null}function eg(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function is(e){return["html","body","#document"].includes(hs(e))}function kn(e){return Gt(e).getComputedStyle(e)}function md(e){return En(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function lo(e){if(hs(e)==="html")return e;const t=e.assignedSlot||e.parentNode||_y(e)&&e.host||Gn(e);return _y(t)?t.host:t}function uS(e){const t=lo(e);return is(t)?e.ownerDocument?e.ownerDocument.body:e.body:Wn(t)&&dl(t)?t:uS(t)}function Ya(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=uS(e),i=o===((r=e.ownerDocument)==null?void 0:r.body),s=Gt(o);if(i){const a=ah(s);return t.concat(s,s.visualViewport||[],dl(o)?o:[],a&&n?Ya(a):[])}return t.concat(o,Ya(o,[],n))}function ah(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function dS(e){const t=kn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Wn(e),i=o?e.offsetWidth:n,s=o?e.offsetHeight:r,a=gu(n)!==i||gu(r)!==s;return a&&(n=i,r=s),{width:n,height:r,$:a}}function tg(e){return En(e)?e:e.contextElement}function Oi(e){const t=tg(e);if(!Wn(t))return $n(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:i}=dS(t);let s=(i?gu(n.width):n.width)/r,a=(i?gu(n.height):n.height)/o;return(!s||!Number.isFinite(s))&&(s=1),(!a||!Number.isFinite(a))&&(a=1),{x:s,y:a}}const d9=$n(0);function fS(e){const t=Gt(e);return!eg()||!t.visualViewport?d9:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function f9(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==Gt(e)?!1:t}function Vo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),i=tg(e);let s=$n(1);t&&(r?En(r)&&(s=Oi(r)):s=Oi(e));const a=f9(i,n,r)?fS(i):$n(0);let l=(o.left+a.x)/s.x,c=(o.top+a.y)/s.y,d=o.width/s.x,u=o.height/s.y;if(i){const f=Gt(i),p=r&&En(r)?Gt(r):r;let y=f,v=ah(y);for(;v&&r&&p!==y;){const _=Oi(v),m=v.getBoundingClientRect(),g=kn(v),w=m.left+(v.clientLeft+parseFloat(g.paddingLeft))*_.x,S=m.top+(v.clientTop+parseFloat(g.paddingTop))*_.y;l*=_.x,c*=_.y,d*=_.x,u*=_.y,l+=w,c+=S,y=Gt(v),v=ah(y)}}return yu({width:d,height:u,x:l,y:c})}function ng(e,t){const n=md(e).scrollLeft;return t?t.left+n:Vo(Gn(e)).left+n}function pS(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),o=r.left+t.scrollLeft-(n?0:ng(e,r)),i=r.top+t.scrollTop;return{x:o,y:i}}function p9(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const i=o==="fixed",s=Gn(r),a=t?hd(t.floating):!1;if(r===s||a&&i)return n;let l={scrollLeft:0,scrollTop:0},c=$n(1);const d=$n(0),u=Wn(r);if((u||!u&&!i)&&((hs(r)!=="body"||dl(s))&&(l=md(r)),Wn(r))){const p=Vo(r);c=Oi(r),d.x=p.x+r.clientLeft,d.y=p.y+r.clientTop}const f=s&&!u&&!i?pS(s,l,!0):$n(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+d.x+f.x,y:n.y*c.y-l.scrollTop*c.y+d.y+f.y}}function h9(e){return Array.from(e.getClientRects())}function m9(e){const t=Gn(e),n=md(e),r=e.ownerDocument.body,o=Vt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),i=Vt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let s=-n.scrollLeft+ng(e);const a=-n.scrollTop;return kn(r).direction==="rtl"&&(s+=Vt(t.clientWidth,r.clientWidth)-o),{width:o,height:i,x:s,y:a}}function g9(e,t){const n=Gt(e),r=Gn(e),o=n.visualViewport;let i=r.clientWidth,s=r.clientHeight,a=0,l=0;if(o){i=o.width,s=o.height;const c=eg();(!c||c&&t==="fixed")&&(a=o.offsetLeft,l=o.offsetTop)}return{width:i,height:s,x:a,y:l}}function v9(e,t){const n=Vo(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,i=Wn(e)?Oi(e):$n(1),s=e.clientWidth*i.x,a=e.clientHeight*i.y,l=o*i.x,c=r*i.y;return{width:s,height:a,x:l,y:c}}function Sy(e,t,n){let r;if(t==="viewport")r=g9(e,n);else if(t==="document")r=m9(Gn(e));else if(En(t))r=v9(t,n);else{const o=fS(e);r={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return yu(r)}function hS(e,t){const n=lo(e);return n===t||!En(n)||is(n)?!1:kn(n).position==="fixed"||hS(n,t)}function y9(e,t){const n=t.get(e);if(n)return n;let r=Ya(e,[],!1).filter(a=>En(a)&&hs(a)!=="body"),o=null;const i=kn(e).position==="fixed";let s=i?lo(e):e;for(;En(s)&&!is(s);){const a=kn(s),l=Jm(s);!l&&a.position==="fixed"&&(o=null),(i?!l&&!o:!l&&a.position==="static"&&!!o&&["absolute","fixed"].includes(o.position)||dl(s)&&!l&&hS(e,s))?r=r.filter(d=>d!==s):o=a,s=lo(s)}return t.set(e,r),r}function x9(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const s=[...n==="clippingAncestors"?hd(t)?[]:y9(t,this._c):[].concat(n),r],a=s[0],l=s.reduce((c,d)=>{const u=Sy(t,d,o);return c.top=Vt(u.top,c.top),c.right=so(u.right,c.right),c.bottom=so(u.bottom,c.bottom),c.left=Vt(u.left,c.left),c},Sy(t,a,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function w9(e){const{width:t,height:n}=dS(e);return{width:t,height:n}}function _9(e,t,n){const r=Wn(t),o=Gn(t),i=n==="fixed",s=Vo(e,!0,i,t);let a={scrollLeft:0,scrollTop:0};const l=$n(0);if(r||!r&&!i)if((hs(t)!=="body"||dl(o))&&(a=md(t)),r){const f=Vo(t,!0,i,t);l.x=f.x+t.clientLeft,l.y=f.y+t.clientTop}else o&&(l.x=ng(o));const c=o&&!r&&!i?pS(o,a):$n(0),d=s.left+a.scrollLeft-l.x-c.x,u=s.top+a.scrollTop-l.y-c.y;return{x:d,y:u,width:s.width,height:s.height}}function kf(e){return kn(e).position==="static"}function by(e,t){if(!Wn(e)||kn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return Gn(e)===n&&(n=n.ownerDocument.body),n}function mS(e,t){const n=Gt(e);if(hd(e))return n;if(!Wn(e)){let o=lo(e);for(;o&&!is(o);){if(En(o)&&!kf(o))return o;o=lo(o)}return n}let r=by(e,t);for(;r&&c9(r)&&kf(r);)r=by(r,t);return r&&is(r)&&kf(r)&&!Jm(r)?n:r||u9(e)||n}const S9=async function(e){const t=this.getOffsetParent||mS,n=this.getDimensions,r=await n(e.floating);return{reference:_9(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function b9(e){return kn(e).direction==="rtl"}const C9={convertOffsetParentRelativeRectToViewportRelativeRect:p9,getDocumentElement:Gn,getClippingRect:x9,getOffsetParent:mS,getElementRects:S9,getClientRects:h9,getDimensions:w9,getScale:Oi,isElement:En,isRTL:b9};function E9(e,t){let n=null,r;const o=Gn(e);function i(){var a;clearTimeout(r),(a=n)==null||a.disconnect(),n=null}function s(a,l){a===void 0&&(a=!1),l===void 0&&(l=1),i();const{left:c,top:d,width:u,height:f}=e.getBoundingClientRect();if(a||t(),!u||!f)return;const p=Wl(d),y=Wl(o.clientWidth-(c+u)),v=Wl(o.clientHeight-(d+f)),_=Wl(c),g={rootMargin:-p+"px "+-y+"px "+-v+"px "+-_+"px",threshold:Vt(0,so(1,l))||1};let w=!0;function S(C){const N=C[0].intersectionRatio;if(N!==l){if(!w)return s();N?s(!1,N):r=setTimeout(()=>{s(!1,1e-7)},1e3)}w=!1}try{n=new IntersectionObserver(S,{...g,root:o.ownerDocument})}catch{n=new IntersectionObserver(S,g)}n.observe(e)}return s(!0),i}function k9(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:i=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:a=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,c=tg(e),d=o||i?[...c?Ya(c):[],...Ya(t)]:[];d.forEach(m=>{o&&m.addEventListener("scroll",n,{passive:!0}),i&&m.addEventListener("resize",n)});const u=c&&a?E9(c,n):null;let f=-1,p=null;s&&(p=new ResizeObserver(m=>{let[g]=m;g&&g.target===c&&p&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(t)})),n()}),c&&!l&&p.observe(c),p.observe(t));let y,v=l?Vo(e):null;l&&_();function _(){const m=Vo(e);v&&(m.x!==v.x||m.y!==v.y||m.width!==v.width||m.height!==v.height)&&n(),v=m,y=requestAnimationFrame(_)}return n(),()=>{var m;d.forEach(g=>{o&&g.removeEventListener("scroll",n),i&&g.removeEventListener("resize",n)}),u==null||u(),(m=p)==null||m.disconnect(),p=null,l&&cancelAnimationFrame(y)}}const N9=i9,T9=s9,P9=n9,I9=l9,R9=r9,Cy=t9,A9=a9,M9=(e,t,n)=>{const r=new Map,o={platform:C9,...n},i={...o.platform,_c:r};return e9(e,t,{...o,platform:i})};var mc=typeof document<"u"?x.useLayoutEffect:x.useEffect;function xu(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!xu(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const i=o[r];if(!(i==="_owner"&&e.$$typeof)&&!xu(e[i],t[i]))return!1}return!0}return e!==e&&t!==t}function gS(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Ey(e,t){const n=gS(e);return Math.round(t*n)/n}function Nf(e){const t=x.useRef(e);return mc(()=>{t.current=e}),t}function j9(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,elements:{reference:i,floating:s}={},transform:a=!0,whileElementsMounted:l,open:c}=e,[d,u]=x.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=x.useState(r);xu(f,r)||p(r);const[y,v]=x.useState(null),[_,m]=x.useState(null),g=x.useCallback(k=>{k!==N.current&&(N.current=k,v(k))},[]),w=x.useCallback(k=>{k!==E.current&&(E.current=k,m(k))},[]),S=i||y,C=s||_,N=x.useRef(null),E=x.useRef(null),P=x.useRef(d),O=l!=null,j=Nf(l),$=Nf(o),A=Nf(c),L=x.useCallback(()=>{if(!N.current||!E.current)return;const k={placement:t,strategy:n,middleware:f};$.current&&(k.platform=$.current),M9(N.current,E.current,k).then(I=>{const z={...I,isPositioned:A.current!==!1};b.current&&!xu(P.current,z)&&(P.current=z,Go.flushSync(()=>{u(z)}))})},[f,t,n,$,A]);mc(()=>{c===!1&&P.current.isPositioned&&(P.current.isPositioned=!1,u(k=>({...k,isPositioned:!1})))},[c]);const b=x.useRef(!1);mc(()=>(b.current=!0,()=>{b.current=!1}),[]),mc(()=>{if(S&&(N.current=S),C&&(E.current=C),S&&C){if(j.current)return j.current(S,C,L);L()}},[S,C,L,j,O]);const M=x.useMemo(()=>({reference:N,floating:E,setReference:g,setFloating:w}),[g,w]),T=x.useMemo(()=>({reference:S,floating:C}),[S,C]),D=x.useMemo(()=>{const k={position:n,left:0,top:0};if(!T.floating)return k;const I=Ey(T.floating,d.x),z=Ey(T.floating,d.y);return a?{...k,transform:"translate("+I+"px, "+z+"px)",...gS(T.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:I,top:z}},[n,a,T.floating,d.x,d.y]);return x.useMemo(()=>({...d,update:L,refs:M,elements:T,floatingStyles:D}),[d,L,M,T,D])}const O9=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:o}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Cy({element:r.current,padding:o}).fn(n):{}:r?Cy({element:r,padding:o}).fn(n):{}}}},D9=(e,t)=>({...N9(e),options:[e,t]}),L9=(e,t)=>({...T9(e),options:[e,t]}),z9=(e,t)=>({...A9(e),options:[e,t]}),$9=(e,t)=>({...P9(e),options:[e,t]}),F9=(e,t)=>({...I9(e),options:[e,t]}),V9=(e,t)=>({...R9(e),options:[e,t]}),H9=(e,t)=>({...O9(e),options:[e,t]});var B9="Arrow",vS=x.forwardRef((e,t)=>{const{children:n,width:r=10,height:o=5,...i}=e;return h.jsx(xe.svg,{...i,ref:t,width:r,height:o,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:h.jsx("polygon",{points:"0,0 30,0 15,10"})})});vS.displayName=B9;var U9=vS;function W9(e,t=[]){let n=[];function r(i,s){const a=x.createContext(s),l=n.length;n=[...n,s];function c(u){const{scope:f,children:p,...y}=u,v=(f==null?void 0:f[e][l])||a,_=x.useMemo(()=>y,Object.values(y));return h.jsx(v.Provider,{value:_,children:p})}function d(u,f){const p=(f==null?void 0:f[e][l])||a,y=x.useContext(p);if(y)return y;if(s!==void 0)return s;throw new Error(`\`${u}\` must be used within \`${i}\``)}return c.displayName=i+"Provider",[c,d]}const o=()=>{const i=n.map(s=>x.createContext(s));return function(a){const l=(a==null?void 0:a[e])||i;return x.useMemo(()=>({[`__scope${e}`]:{...a,[e]:l}}),[a,l])}};return o.scopeName=e,[r,Z9(o,...t)]}function Z9(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:l,scopeName:c})=>{const u=l(i)[`__scope${c}`];return{...a,...u}},{});return x.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}function G9(e){const[t,n]=x.useState(void 0);return pt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const i=o[0];let s,a;if("borderBoxSize"in i){const l=i.borderBoxSize,c=Array.isArray(l)?l[0]:l;s=c.inlineSize,a=c.blockSize}else s=e.offsetWidth,a=e.offsetHeight;n({width:s,height:a})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var rg="Popper",[yS,gd]=W9(rg),[Y9,xS]=yS(rg),wS=e=>{const{__scopePopper:t,children:n}=e,[r,o]=x.useState(null);return h.jsx(Y9,{scope:t,anchor:r,onAnchorChange:o,children:n})};wS.displayName=rg;var _S="PopperAnchor",SS=x.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...o}=e,i=xS(_S,n),s=x.useRef(null),a=Ae(t,s);return x.useEffect(()=>{i.onAnchorChange((r==null?void 0:r.current)||s.current)}),r?null:h.jsx(xe.div,{...o,ref:a})});SS.displayName=_S;var og="PopperContent",[K9,X9]=yS(og),bS=x.forwardRef((e,t)=>{var V,B,ee,ne,oe,X;const{__scopePopper:n,side:r="bottom",sideOffset:o=0,align:i="center",alignOffset:s=0,arrowPadding:a=0,avoidCollisions:l=!0,collisionBoundary:c=[],collisionPadding:d=0,sticky:u="partial",hideWhenDetached:f=!1,updatePositionStrategy:p="optimized",onPlaced:y,...v}=e,_=xS(og,n),[m,g]=x.useState(null),w=Ae(t,ae=>g(ae)),[S,C]=x.useState(null),N=G9(S),E=(N==null?void 0:N.width)??0,P=(N==null?void 0:N.height)??0,O=r+(i!=="center"?"-"+i:""),j=typeof d=="number"?d:{top:0,right:0,bottom:0,left:0,...d},$=Array.isArray(c)?c:[c],A=$.length>0,L={padding:j,boundary:$.filter(Q9),altBoundary:A},{refs:b,floatingStyles:M,placement:T,isPositioned:D,middlewareData:k}=j9({strategy:"fixed",placement:O,whileElementsMounted:(...ae)=>k9(...ae,{animationFrame:p==="always"}),elements:{reference:_.anchor},middleware:[D9({mainAxis:o+P,alignmentAxis:s}),l&&L9({mainAxis:!0,crossAxis:!1,limiter:u==="partial"?z9():void 0,...L}),l&&$9({...L}),F9({...L,apply:({elements:ae,rects:me,availableWidth:Le,availableHeight:qe})=>{const{width:Et,height:R}=me.reference,F=ae.floating.style;F.setProperty("--radix-popper-available-width",`${Le}px`),F.setProperty("--radix-popper-available-height",`${qe}px`),F.setProperty("--radix-popper-anchor-width",`${Et}px`),F.setProperty("--radix-popper-anchor-height",`${R}px`)}}),S&&H9({element:S,padding:a}),J9({arrowWidth:E,arrowHeight:P}),f&&V9({strategy:"referenceHidden",...L})]}),[I,z]=kS(T),U=Dt(y);pt(()=>{D&&(U==null||U())},[D,U]);const Y=(V=k.arrow)==null?void 0:V.x,H=(B=k.arrow)==null?void 0:B.y,Z=((ee=k.arrow)==null?void 0:ee.centerOffset)!==0,[K,G]=x.useState();return pt(()=>{m&&G(window.getComputedStyle(m).zIndex)},[m]),h.jsx("div",{ref:b.setFloating,"data-radix-popper-content-wrapper":"",style:{...M,transform:D?M.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:K,"--radix-popper-transform-origin":[(ne=k.transformOrigin)==null?void 0:ne.x,(oe=k.transformOrigin)==null?void 0:oe.y].join(" "),...((X=k.hide)==null?void 0:X.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:h.jsx(K9,{scope:n,placedSide:I,onArrowChange:C,arrowX:Y,arrowY:H,shouldHideArrow:Z,children:h.jsx(xe.div,{"data-side":I,"data-align":z,...v,ref:w,style:{...v.style,animation:D?void 0:"none"}})})})});bS.displayName=og;var CS="PopperArrow",q9={top:"bottom",right:"left",bottom:"top",left:"right"},ES=x.forwardRef(function(t,n){const{__scopePopper:r,...o}=t,i=X9(CS,r),s=q9[i.placedSide];return h.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:h.jsx(U9,{...o,ref:n,style:{...o.style,display:"block"}})})});ES.displayName=CS;function Q9(e){return e!==null}var J9=e=>({name:"transformOrigin",options:e,fn(t){var _,m,g;const{placement:n,rects:r,middlewareData:o}=t,s=((_=o.arrow)==null?void 0:_.centerOffset)!==0,a=s?0:e.arrowWidth,l=s?0:e.arrowHeight,[c,d]=kS(n),u={start:"0%",center:"50%",end:"100%"}[d],f=(((m=o.arrow)==null?void 0:m.x)??0)+a/2,p=(((g=o.arrow)==null?void 0:g.y)??0)+l/2;let y="",v="";return c==="bottom"?(y=s?u:`${f}px`,v=`${-l}px`):c==="top"?(y=s?u:`${f}px`,v=`${r.floating.height+l}px`):c==="right"?(y=`${-l}px`,v=s?u:`${p}px`):c==="left"&&(y=`${r.floating.width+l}px`,v=s?u:`${p}px`),{data:{x:y,y:v}}}});function kS(e){const[t,n="center"]=e.split("-");return[t,n]}var NS=wS,TS=SS,PS=bS,IS=ES,e7="Portal",fl=x.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=x.useState(!1);pt(()=>i(!0),[]);const s=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return s?F5.createPortal(h.jsx(xe.div,{...r,ref:t}),s):null});fl.displayName=e7;function t7(e){const t=x.useRef({value:e,previous:e});return x.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var n7="VisuallyHidden",pl=x.forwardRef((e,t)=>h.jsx(xe.span,{...e,ref:t,style:{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal",...e.style}}));pl.displayName=n7;var r7=pl,o7=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},ti=new WeakMap,Zl=new WeakMap,Gl={},Tf=0,RS=function(e){return e&&(e.host||RS(e.parentNode))},i7=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=RS(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},s7=function(e,t,n,r){var o=i7(t,Array.isArray(e)?e:[e]);Gl[n]||(Gl[n]=new WeakMap);var i=Gl[n],s=[],a=new Set,l=new Set(o),c=function(u){!u||a.has(u)||(a.add(u),c(u.parentNode))};o.forEach(c);var d=function(u){!u||l.has(u)||Array.prototype.forEach.call(u.children,function(f){if(a.has(f))d(f);else try{var p=f.getAttribute(r),y=p!==null&&p!=="false",v=(ti.get(f)||0)+1,_=(i.get(f)||0)+1;ti.set(f,v),i.set(f,_),s.push(f),v===1&&y&&Zl.set(f,!0),_===1&&f.setAttribute(n,"true"),y||f.setAttribute(r,"true")}catch(m){console.error("aria-hidden: cannot operate on ",f,m)}})};return d(t),a.clear(),Tf++,function(){s.forEach(function(u){var f=ti.get(u)-1,p=i.get(u)-1;ti.set(u,f),i.set(u,p),f||(Zl.has(u)||u.removeAttribute(r),Zl.delete(u)),p||u.removeAttribute(n)}),Tf--,Tf||(ti=new WeakMap,ti=new WeakMap,Zl=new WeakMap,Gl={})}},AS=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=o7(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),s7(r,o,n,"aria-hidden")):function(){return null}},An=function(){return An=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},An.apply(this,arguments)};function MS(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function a7(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var gc="right-scroll-bar-position",vc="width-before-scroll-bar",l7="with-scroll-bars-hidden",c7="--removed-body-scroll-bar-size";function Pf(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function u7(e,t){var n=x.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var d7=typeof window<"u"?x.useLayoutEffect:x.useEffect,ky=new WeakMap;function f7(e,t){var n=u7(null,function(r){return e.forEach(function(o){return Pf(o,r)})});return d7(function(){var r=ky.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(a){i.has(a)||Pf(a,null)}),i.forEach(function(a){o.has(a)||Pf(a,s)})}ky.set(n,e)},[e]),n}function p7(e){return e}function h7(e,t){t===void 0&&(t=p7);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(a){return a!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var a=n;n=[],a.forEach(i),s=n}var l=function(){var d=s;s=[],d.forEach(i)},c=function(){return Promise.resolve().then(l)};c(),n={push:function(d){s.push(d),c()},filter:function(d){return s=s.filter(d),n}}}};return o}function m7(e){e===void 0&&(e={});var t=h7(null);return t.options=An({async:!0,ssr:!1},e),t}var jS=function(e){var t=e.sideCar,n=MS(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return x.createElement(r,An({},n))};jS.isSideCarExport=!0;function g7(e,t){return e.useMedium(t),jS}var OS=m7(),If=function(){},vd=x.forwardRef(function(e,t){var n=x.useRef(null),r=x.useState({onScrollCapture:If,onWheelCapture:If,onTouchMoveCapture:If}),o=r[0],i=r[1],s=e.forwardProps,a=e.children,l=e.className,c=e.removeScrollBar,d=e.enabled,u=e.shards,f=e.sideCar,p=e.noIsolation,y=e.inert,v=e.allowPinchZoom,_=e.as,m=_===void 0?"div":_,g=e.gapMode,w=MS(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),S=f,C=f7([n,t]),N=An(An({},w),o);return x.createElement(x.Fragment,null,d&&x.createElement(S,{sideCar:OS,removeScrollBar:c,shards:u,noIsolation:p,inert:y,setCallbacks:i,allowPinchZoom:!!v,lockRef:n,gapMode:g}),s?x.cloneElement(x.Children.only(a),An(An({},N),{ref:C})):x.createElement(m,An({},N,{className:l,ref:C}),a))});vd.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};vd.classNames={fullWidth:vc,zeroRight:gc};var v7=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function y7(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=v7();return t&&e.setAttribute("nonce",t),e}function x7(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function w7(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var _7=function(){var e=0,t=null;return{add:function(n){e==0&&(t=y7())&&(x7(t,n),w7(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},S7=function(){var e=_7();return function(t,n){x.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},DS=function(){var e=S7(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},b7={left:0,top:0,right:0,gap:0},Rf=function(e){return parseInt(e||"",10)||0},C7=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Rf(n),Rf(r),Rf(o)]},E7=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return b7;var t=C7(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},k7=DS(),Di="data-scroll-locked",N7=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,a=e.gap;return n===void 0&&(n="margin"),`
+  .`.concat(l7,` {
+   overflow: hidden `).concat(r,`;
+   padding-right: `).concat(a,"px ").concat(r,`;
+  }
+  body[`).concat(Di,`] {
+    overflow: hidden `).concat(r,`;
+    overscroll-behavior: contain;
+    `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&`
+    padding-left: `.concat(o,`px;
+    padding-top: `).concat(i,`px;
+    padding-right: `).concat(s,`px;
+    margin-left:0;
+    margin-top:0;
+    margin-right: `).concat(a,"px ").concat(r,`;
+    `),n==="padding"&&"padding-right: ".concat(a,"px ").concat(r,";")].filter(Boolean).join(""),`
+  }
+  
+  .`).concat(gc,` {
+    right: `).concat(a,"px ").concat(r,`;
+  }
+  
+  .`).concat(vc,` {
+    margin-right: `).concat(a,"px ").concat(r,`;
+  }
+  
+  .`).concat(gc," .").concat(gc,` {
+    right: 0 `).concat(r,`;
+  }
+  
+  .`).concat(vc," .").concat(vc,` {
+    margin-right: 0 `).concat(r,`;
+  }
+  
+  body[`).concat(Di,`] {
+    `).concat(c7,": ").concat(a,`px;
+  }
+`)},Ny=function(){var e=parseInt(document.body.getAttribute(Di)||"0",10);return isFinite(e)?e:0},T7=function(){x.useEffect(function(){return document.body.setAttribute(Di,(Ny()+1).toString()),function(){var e=Ny()-1;e<=0?document.body.removeAttribute(Di):document.body.setAttribute(Di,e.toString())}},[])},P7=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;T7();var i=x.useMemo(function(){return E7(o)},[o]);return x.createElement(k7,{styles:N7(i,!t,o,n?"":"!important")})},lh=!1;if(typeof window<"u")try{var Yl=Object.defineProperty({},"passive",{get:function(){return lh=!0,!0}});window.addEventListener("test",Yl,Yl),window.removeEventListener("test",Yl,Yl)}catch{lh=!1}var ni=lh?{passive:!1}:!1,I7=function(e){return e.tagName==="TEXTAREA"},LS=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!I7(e)&&n[t]==="visible")},R7=function(e){return LS(e,"overflowY")},A7=function(e){return LS(e,"overflowX")},Ty=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=zS(e,r);if(o){var i=$S(e,r),s=i[1],a=i[2];if(s>a)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},M7=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},j7=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},zS=function(e,t){return e==="v"?R7(t):A7(t)},$S=function(e,t){return e==="v"?M7(t):j7(t)},O7=function(e,t){return e==="h"&&t==="rtl"?-1:1},D7=function(e,t,n,r,o){var i=O7(e,window.getComputedStyle(t).direction),s=i*r,a=n.target,l=t.contains(a),c=!1,d=s>0,u=0,f=0;do{var p=$S(e,a),y=p[0],v=p[1],_=p[2],m=v-_-i*y;(y||m)&&zS(e,a)&&(u+=m,f+=y),a instanceof ShadowRoot?a=a.host:a=a.parentNode}while(!l&&a!==document.body||l&&(t.contains(a)||t===a));return(d&&(Math.abs(u)<1||!o)||!d&&(Math.abs(f)<1||!o))&&(c=!0),c},Kl=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Py=function(e){return[e.deltaX,e.deltaY]},Iy=function(e){return e&&"current"in e?e.current:e},L7=function(e,t){return e[0]===t[0]&&e[1]===t[1]},z7=function(e){return`
+  .block-interactivity-`.concat(e,` {pointer-events: none;}
+  .allow-interactivity-`).concat(e,` {pointer-events: all;}
+`)},$7=0,ri=[];function F7(e){var t=x.useRef([]),n=x.useRef([0,0]),r=x.useRef(),o=x.useState($7++)[0],i=x.useState(DS)[0],s=x.useRef(e);x.useEffect(function(){s.current=e},[e]),x.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var v=a7([e.lockRef.current],(e.shards||[]).map(Iy),!0).filter(Boolean);return v.forEach(function(_){return _.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),v.forEach(function(_){return _.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var a=x.useCallback(function(v,_){if("touches"in v&&v.touches.length===2||v.type==="wheel"&&v.ctrlKey)return!s.current.allowPinchZoom;var m=Kl(v),g=n.current,w="deltaX"in v?v.deltaX:g[0]-m[0],S="deltaY"in v?v.deltaY:g[1]-m[1],C,N=v.target,E=Math.abs(w)>Math.abs(S)?"h":"v";if("touches"in v&&E==="h"&&N.type==="range")return!1;var P=Ty(E,N);if(!P)return!0;if(P?C=E:(C=E==="v"?"h":"v",P=Ty(E,N)),!P)return!1;if(!r.current&&"changedTouches"in v&&(w||S)&&(r.current=C),!C)return!0;var O=r.current||C;return D7(O,_,v,O==="h"?w:S,!0)},[]),l=x.useCallback(function(v){var _=v;if(!(!ri.length||ri[ri.length-1]!==i)){var m="deltaY"in _?Py(_):Kl(_),g=t.current.filter(function(C){return C.name===_.type&&(C.target===_.target||_.target===C.shadowParent)&&L7(C.delta,m)})[0];if(g&&g.should){_.cancelable&&_.preventDefault();return}if(!g){var w=(s.current.shards||[]).map(Iy).filter(Boolean).filter(function(C){return C.contains(_.target)}),S=w.length>0?a(_,w[0]):!s.current.noIsolation;S&&_.cancelable&&_.preventDefault()}}},[]),c=x.useCallback(function(v,_,m,g){var w={name:v,delta:_,target:m,should:g,shadowParent:V7(m)};t.current.push(w),setTimeout(function(){t.current=t.current.filter(function(S){return S!==w})},1)},[]),d=x.useCallback(function(v){n.current=Kl(v),r.current=void 0},[]),u=x.useCallback(function(v){c(v.type,Py(v),v.target,a(v,e.lockRef.current))},[]),f=x.useCallback(function(v){c(v.type,Kl(v),v.target,a(v,e.lockRef.current))},[]);x.useEffect(function(){return ri.push(i),e.setCallbacks({onScrollCapture:u,onWheelCapture:u,onTouchMoveCapture:f}),document.addEventListener("wheel",l,ni),document.addEventListener("touchmove",l,ni),document.addEventListener("touchstart",d,ni),function(){ri=ri.filter(function(v){return v!==i}),document.removeEventListener("wheel",l,ni),document.removeEventListener("touchmove",l,ni),document.removeEventListener("touchstart",d,ni)}},[]);var p=e.removeScrollBar,y=e.inert;return x.createElement(x.Fragment,null,y?x.createElement(i,{styles:z7(o)}):null,p?x.createElement(P7,{gapMode:e.gapMode}):null)}function V7(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const H7=g7(OS,F7);var ig=x.forwardRef(function(e,t){return x.createElement(vd,An({},e,{ref:t,sideCar:H7}))});ig.classNames=vd.classNames;var B7=[" ","Enter","ArrowUp","ArrowDown"],U7=[" ","Enter"],hl="Select",[yd,xd,W7]=nd(hl),[ms,hz]=Xo(hl,[W7,gd]),wd=gd(),[Z7,po]=ms(hl),[G7,Y7]=ms(hl),FS=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:o,onOpenChange:i,value:s,defaultValue:a,onValueChange:l,dir:c,name:d,autoComplete:u,disabled:f,required:p,form:y}=e,v=wd(t),[_,m]=x.useState(null),[g,w]=x.useState(null),[S,C]=x.useState(!1),N=rd(c),[E=!1,P]=Hn({prop:r,defaultProp:o,onChange:i}),[O,j]=Hn({prop:s,defaultProp:a,onChange:l}),$=x.useRef(null),A=_?y||!!_.closest("form"):!0,[L,b]=x.useState(new Set),M=Array.from(L).map(T=>T.props.value).join(";");return h.jsx(NS,{...v,children:h.jsxs(Z7,{required:p,scope:t,trigger:_,onTriggerChange:m,valueNode:g,onValueNodeChange:w,valueNodeHasChildren:S,onValueNodeHasChildrenChange:C,contentId:xn(),value:O,onValueChange:j,open:E,onOpenChange:P,dir:N,triggerPointerDownPosRef:$,disabled:f,children:[h.jsx(yd.Provider,{scope:t,children:h.jsx(G7,{scope:e.__scopeSelect,onNativeOptionAdd:x.useCallback(T=>{b(D=>new Set(D).add(T))},[]),onNativeOptionRemove:x.useCallback(T=>{b(D=>{const k=new Set(D);return k.delete(T),k})},[]),children:n})}),A?h.jsxs(db,{"aria-hidden":!0,required:p,tabIndex:-1,name:d,autoComplete:u,value:O,onChange:T=>j(T.target.value),disabled:f,form:y,children:[O===void 0?h.jsx("option",{value:""}):null,Array.from(L)]},M):null]})})};FS.displayName=hl;var VS="SelectTrigger",HS=x.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...o}=e,i=wd(n),s=po(VS,n),a=s.disabled||r,l=Ae(t,s.onTriggerChange),c=xd(n),d=x.useRef("touch"),[u,f,p]=fb(v=>{const _=c().filter(w=>!w.disabled),m=_.find(w=>w.value===s.value),g=pb(_,v,m);g!==void 0&&s.onValueChange(g.value)}),y=v=>{a||(s.onOpenChange(!0),p()),v&&(s.triggerPointerDownPosRef.current={x:Math.round(v.pageX),y:Math.round(v.pageY)})};return h.jsx(TS,{asChild:!0,...i,children:h.jsx(xe.button,{type:"button",role:"combobox","aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:a,"data-disabled":a?"":void 0,"data-placeholder":ub(s.value)?"":void 0,...o,ref:l,onClick:he(o.onClick,v=>{v.currentTarget.focus(),d.current!=="mouse"&&y(v)}),onPointerDown:he(o.onPointerDown,v=>{d.current=v.pointerType;const _=v.target;_.hasPointerCapture(v.pointerId)&&_.releasePointerCapture(v.pointerId),v.button===0&&v.ctrlKey===!1&&v.pointerType==="mouse"&&(y(v),v.preventDefault())}),onKeyDown:he(o.onKeyDown,v=>{const _=u.current!=="";!(v.ctrlKey||v.altKey||v.metaKey)&&v.key.length===1&&f(v.key),!(_&&v.key===" ")&&B7.includes(v.key)&&(y(),v.preventDefault())})})})});HS.displayName=VS;var BS="SelectValue",US=x.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:o,children:i,placeholder:s="",...a}=e,l=po(BS,n),{onValueNodeHasChildrenChange:c}=l,d=i!==void 0,u=Ae(t,l.onValueNodeChange);return pt(()=>{c(d)},[c,d]),h.jsx(xe.span,{...a,ref:u,style:{pointerEvents:"none"},children:ub(l.value)?h.jsx(h.Fragment,{children:s}):i})});US.displayName=BS;var K7="SelectIcon",WS=x.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...o}=e;return h.jsx(xe.span,{"aria-hidden":!0,...o,ref:t,children:r||"▼"})});WS.displayName=K7;var X7="SelectPortal",ZS=e=>h.jsx(fl,{asChild:!0,...e});ZS.displayName=X7;var Ho="SelectContent",GS=x.forwardRef((e,t)=>{const n=po(Ho,e.__scopeSelect),[r,o]=x.useState();if(pt(()=>{o(new DocumentFragment)},[]),!n.open){const i=r;return i?Go.createPortal(h.jsx(YS,{scope:e.__scopeSelect,children:h.jsx(yd.Slot,{scope:e.__scopeSelect,children:h.jsx("div",{children:e.children})})}),i):null}return h.jsx(KS,{...e,ref:t})});GS.displayName=Ho;var ln=10,[YS,ho]=ms(Ho),q7="SelectContentImpl",KS=x.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:o,onEscapeKeyDown:i,onPointerDownOutside:s,side:a,sideOffset:l,align:c,alignOffset:d,arrowPadding:u,collisionBoundary:f,collisionPadding:p,sticky:y,hideWhenDetached:v,avoidCollisions:_,...m}=e,g=po(Ho,n),[w,S]=x.useState(null),[C,N]=x.useState(null),E=Ae(t,V=>S(V)),[P,O]=x.useState(null),[j,$]=x.useState(null),A=xd(n),[L,b]=x.useState(!1),M=x.useRef(!1);x.useEffect(()=>{if(w)return AS(w)},[w]),sS();const T=x.useCallback(V=>{const[B,...ee]=A().map(X=>X.ref.current),[ne]=ee.slice(-1),oe=document.activeElement;for(const X of V)if(X===oe||(X==null||X.scrollIntoView({block:"nearest"}),X===B&&C&&(C.scrollTop=0),X===ne&&C&&(C.scrollTop=C.scrollHeight),X==null||X.focus(),document.activeElement!==oe))return},[A,C]),D=x.useCallback(()=>T([P,w]),[T,P,w]);x.useEffect(()=>{L&&D()},[L,D]);const{onOpenChange:k,triggerPointerDownPosRef:I}=g;x.useEffect(()=>{if(w){let V={x:0,y:0};const B=ne=>{var oe,X;V={x:Math.abs(Math.round(ne.pageX)-(((oe=I.current)==null?void 0:oe.x)??0)),y:Math.abs(Math.round(ne.pageY)-(((X=I.current)==null?void 0:X.y)??0))}},ee=ne=>{V.x<=10&&V.y<=10?ne.preventDefault():w.contains(ne.target)||k(!1),document.removeEventListener("pointermove",B),I.current=null};return I.current!==null&&(document.addEventListener("pointermove",B),document.addEventListener("pointerup",ee,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",B),document.removeEventListener("pointerup",ee,{capture:!0})}}},[w,k,I]),x.useEffect(()=>{const V=()=>k(!1);return window.addEventListener("blur",V),window.addEventListener("resize",V),()=>{window.removeEventListener("blur",V),window.removeEventListener("resize",V)}},[k]);const[z,U]=fb(V=>{const B=A().filter(oe=>!oe.disabled),ee=B.find(oe=>oe.ref.current===document.activeElement),ne=pb(B,V,ee);ne&&setTimeout(()=>ne.ref.current.focus())}),Y=x.useCallback((V,B,ee)=>{const ne=!M.current&&!ee;(g.value!==void 0&&g.value===B||ne)&&(O(V),ne&&(M.current=!0))},[g.value]),H=x.useCallback(()=>w==null?void 0:w.focus(),[w]),Z=x.useCallback((V,B,ee)=>{const ne=!M.current&&!ee;(g.value!==void 0&&g.value===B||ne)&&$(V)},[g.value]),K=r==="popper"?ch:XS,G=K===ch?{side:a,sideOffset:l,align:c,alignOffset:d,arrowPadding:u,collisionBoundary:f,collisionPadding:p,sticky:y,hideWhenDetached:v,avoidCollisions:_}:{};return h.jsx(YS,{scope:n,content:w,viewport:C,onViewportChange:N,itemRefCallback:Y,selectedItem:P,onItemLeave:H,itemTextRefCallback:Z,focusSelectedItem:D,selectedItemText:j,position:r,isPositioned:L,searchRef:z,children:h.jsx(ig,{as:to,allowPinchZoom:!0,children:h.jsx(Km,{asChild:!0,trapped:g.open,onMountAutoFocus:V=>{V.preventDefault()},onUnmountAutoFocus:he(o,V=>{var B;(B=g.trigger)==null||B.focus({preventScroll:!0}),V.preventDefault()}),children:h.jsx(ul,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:s,onFocusOutside:V=>V.preventDefault(),onDismiss:()=>g.onOpenChange(!1),children:h.jsx(K,{role:"listbox",id:g.contentId,"data-state":g.open?"open":"closed",dir:g.dir,onContextMenu:V=>V.preventDefault(),...m,...G,onPlaced:()=>b(!0),ref:E,style:{display:"flex",flexDirection:"column",outline:"none",...m.style},onKeyDown:he(m.onKeyDown,V=>{const B=V.ctrlKey||V.altKey||V.metaKey;if(V.key==="Tab"&&V.preventDefault(),!B&&V.key.length===1&&U(V.key),["ArrowUp","ArrowDown","Home","End"].includes(V.key)){let ne=A().filter(oe=>!oe.disabled).map(oe=>oe.ref.current);if(["ArrowUp","End"].includes(V.key)&&(ne=ne.slice().reverse()),["ArrowUp","ArrowDown"].includes(V.key)){const oe=V.target,X=ne.indexOf(oe);ne=ne.slice(X+1)}setTimeout(()=>T(ne)),V.preventDefault()}})})})})})})});KS.displayName=q7;var Q7="SelectItemAlignedPosition",XS=x.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...o}=e,i=po(Ho,n),s=ho(Ho,n),[a,l]=x.useState(null),[c,d]=x.useState(null),u=Ae(t,E=>d(E)),f=xd(n),p=x.useRef(!1),y=x.useRef(!0),{viewport:v,selectedItem:_,selectedItemText:m,focusSelectedItem:g}=s,w=x.useCallback(()=>{if(i.trigger&&i.valueNode&&a&&c&&v&&_&&m){const E=i.trigger.getBoundingClientRect(),P=c.getBoundingClientRect(),O=i.valueNode.getBoundingClientRect(),j=m.getBoundingClientRect();if(i.dir!=="rtl"){const oe=j.left-P.left,X=O.left-oe,ae=E.left-X,me=E.width+ae,Le=Math.max(me,P.width),qe=window.innerWidth-ln,Et=uy(X,[ln,Math.max(ln,qe-Le)]);a.style.minWidth=me+"px",a.style.left=Et+"px"}else{const oe=P.right-j.right,X=window.innerWidth-O.right-oe,ae=window.innerWidth-E.right-X,me=E.width+ae,Le=Math.max(me,P.width),qe=window.innerWidth-ln,Et=uy(X,[ln,Math.max(ln,qe-Le)]);a.style.minWidth=me+"px",a.style.right=Et+"px"}const $=f(),A=window.innerHeight-ln*2,L=v.scrollHeight,b=window.getComputedStyle(c),M=parseInt(b.borderTopWidth,10),T=parseInt(b.paddingTop,10),D=parseInt(b.borderBottomWidth,10),k=parseInt(b.paddingBottom,10),I=M+T+L+k+D,z=Math.min(_.offsetHeight*5,I),U=window.getComputedStyle(v),Y=parseInt(U.paddingTop,10),H=parseInt(U.paddingBottom,10),Z=E.top+E.height/2-ln,K=A-Z,G=_.offsetHeight/2,V=_.offsetTop+G,B=M+T+V,ee=I-B;if(B<=Z){const oe=$.length>0&&_===$[$.length-1].ref.current;a.style.bottom="0px";const X=c.clientHeight-v.offsetTop-v.offsetHeight,ae=Math.max(K,G+(oe?H:0)+X+D),me=B+ae;a.style.height=me+"px"}else{const oe=$.length>0&&_===$[0].ref.current;a.style.top="0px";const ae=Math.max(Z,M+v.offsetTop+(oe?Y:0)+G)+ee;a.style.height=ae+"px",v.scrollTop=B-Z+v.offsetTop}a.style.margin=`${ln}px 0`,a.style.minHeight=z+"px",a.style.maxHeight=A+"px",r==null||r(),requestAnimationFrame(()=>p.current=!0)}},[f,i.trigger,i.valueNode,a,c,v,_,m,i.dir,r]);pt(()=>w(),[w]);const[S,C]=x.useState();pt(()=>{c&&C(window.getComputedStyle(c).zIndex)},[c]);const N=x.useCallback(E=>{E&&y.current===!0&&(w(),g==null||g(),y.current=!1)},[w,g]);return h.jsx(eO,{scope:n,contentWrapper:a,shouldExpandOnScrollRef:p,onScrollButtonChange:N,children:h.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:S},children:h.jsx(xe.div,{...o,ref:u,style:{boxSizing:"border-box",maxHeight:"100%",...o.style}})})})});XS.displayName=Q7;var J7="SelectPopperPosition",ch=x.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:o=ln,...i}=e,s=wd(n);return h.jsx(PS,{...s,...i,ref:t,align:r,collisionPadding:o,style:{boxSizing:"border-box",...i.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});ch.displayName=J7;var[eO,sg]=ms(Ho,{}),uh="SelectViewport",qS=x.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...o}=e,i=ho(uh,n),s=sg(uh,n),a=Ae(t,i.onViewportChange),l=x.useRef(0);return h.jsxs(h.Fragment,{children:[h.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),h.jsx(yd.Slot,{scope:n,children:h.jsx(xe.div,{"data-radix-select-viewport":"",role:"presentation",...o,ref:a,style:{position:"relative",flex:1,overflow:"hidden auto",...o.style},onScroll:he(o.onScroll,c=>{const d=c.currentTarget,{contentWrapper:u,shouldExpandOnScrollRef:f}=s;if(f!=null&&f.current&&u){const p=Math.abs(l.current-d.scrollTop);if(p>0){const y=window.innerHeight-ln*2,v=parseFloat(u.style.minHeight),_=parseFloat(u.style.height),m=Math.max(v,_);if(m<y){const g=m+p,w=Math.min(y,g),S=g-w;u.style.height=w+"px",u.style.bottom==="0px"&&(d.scrollTop=S>0?S:0,u.style.justifyContent="flex-end")}}}l.current=d.scrollTop})})})]})});qS.displayName=uh;var QS="SelectGroup",[tO,nO]=ms(QS),rO=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=xn();return h.jsx(tO,{scope:n,id:o,children:h.jsx(xe.div,{role:"group","aria-labelledby":o,...r,ref:t})})});rO.displayName=QS;var JS="SelectLabel",eb=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=nO(JS,n);return h.jsx(xe.div,{id:o.id,...r,ref:t})});eb.displayName=JS;var wu="SelectItem",[oO,tb]=ms(wu),nb=x.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:o=!1,textValue:i,...s}=e,a=po(wu,n),l=ho(wu,n),c=a.value===r,[d,u]=x.useState(i??""),[f,p]=x.useState(!1),y=Ae(t,g=>{var w;return(w=l.itemRefCallback)==null?void 0:w.call(l,g,r,o)}),v=xn(),_=x.useRef("touch"),m=()=>{o||(a.onValueChange(r),a.onOpenChange(!1))};if(r==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return h.jsx(oO,{scope:n,value:r,disabled:o,textId:v,isSelected:c,onItemTextChange:x.useCallback(g=>{u(w=>w||((g==null?void 0:g.textContent)??"").trim())},[]),children:h.jsx(yd.ItemSlot,{scope:n,value:r,disabled:o,textValue:d,children:h.jsx(xe.div,{role:"option","aria-labelledby":v,"data-highlighted":f?"":void 0,"aria-selected":c&&f,"data-state":c?"checked":"unchecked","aria-disabled":o||void 0,"data-disabled":o?"":void 0,tabIndex:o?void 0:-1,...s,ref:y,onFocus:he(s.onFocus,()=>p(!0)),onBlur:he(s.onBlur,()=>p(!1)),onClick:he(s.onClick,()=>{_.current!=="mouse"&&m()}),onPointerUp:he(s.onPointerUp,()=>{_.current==="mouse"&&m()}),onPointerDown:he(s.onPointerDown,g=>{_.current=g.pointerType}),onPointerMove:he(s.onPointerMove,g=>{var w;_.current=g.pointerType,o?(w=l.onItemLeave)==null||w.call(l):_.current==="mouse"&&g.currentTarget.focus({preventScroll:!0})}),onPointerLeave:he(s.onPointerLeave,g=>{var w;g.currentTarget===document.activeElement&&((w=l.onItemLeave)==null||w.call(l))}),onKeyDown:he(s.onKeyDown,g=>{var S;((S=l.searchRef)==null?void 0:S.current)!==""&&g.key===" "||(U7.includes(g.key)&&m(),g.key===" "&&g.preventDefault())})})})})});nb.displayName=wu;var Hs="SelectItemText",rb=x.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:o,...i}=e,s=po(Hs,n),a=ho(Hs,n),l=tb(Hs,n),c=Y7(Hs,n),[d,u]=x.useState(null),f=Ae(t,m=>u(m),l.onItemTextChange,m=>{var g;return(g=a.itemTextRefCallback)==null?void 0:g.call(a,m,l.value,l.disabled)}),p=d==null?void 0:d.textContent,y=x.useMemo(()=>h.jsx("option",{value:l.value,disabled:l.disabled,children:p},l.value),[l.disabled,l.value,p]),{onNativeOptionAdd:v,onNativeOptionRemove:_}=c;return pt(()=>(v(y),()=>_(y)),[v,_,y]),h.jsxs(h.Fragment,{children:[h.jsx(xe.span,{id:l.textId,...i,ref:f}),l.isSelected&&s.valueNode&&!s.valueNodeHasChildren?Go.createPortal(i.children,s.valueNode):null]})});rb.displayName=Hs;var ob="SelectItemIndicator",ib=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return tb(ob,n).isSelected?h.jsx(xe.span,{"aria-hidden":!0,...r,ref:t}):null});ib.displayName=ob;var dh="SelectScrollUpButton",sb=x.forwardRef((e,t)=>{const n=ho(dh,e.__scopeSelect),r=sg(dh,e.__scopeSelect),[o,i]=x.useState(!1),s=Ae(t,r.onScrollButtonChange);return pt(()=>{if(n.viewport&&n.isPositioned){let a=function(){const c=l.scrollTop>0;i(c)};const l=n.viewport;return a(),l.addEventListener("scroll",a),()=>l.removeEventListener("scroll",a)}},[n.viewport,n.isPositioned]),o?h.jsx(lb,{...e,ref:s,onAutoScroll:()=>{const{viewport:a,selectedItem:l}=n;a&&l&&(a.scrollTop=a.scrollTop-l.offsetHeight)}}):null});sb.displayName=dh;var fh="SelectScrollDownButton",ab=x.forwardRef((e,t)=>{const n=ho(fh,e.__scopeSelect),r=sg(fh,e.__scopeSelect),[o,i]=x.useState(!1),s=Ae(t,r.onScrollButtonChange);return pt(()=>{if(n.viewport&&n.isPositioned){let a=function(){const c=l.scrollHeight-l.clientHeight,d=Math.ceil(l.scrollTop)<c;i(d)};const l=n.viewport;return a(),l.addEventListener("scroll",a),()=>l.removeEventListener("scroll",a)}},[n.viewport,n.isPositioned]),o?h.jsx(lb,{...e,ref:s,onAutoScroll:()=>{const{viewport:a,selectedItem:l}=n;a&&l&&(a.scrollTop=a.scrollTop+l.offsetHeight)}}):null});ab.displayName=fh;var lb=x.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...o}=e,i=ho("SelectScrollButton",n),s=x.useRef(null),a=xd(n),l=x.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return x.useEffect(()=>()=>l(),[l]),pt(()=>{var d;const c=a().find(u=>u.ref.current===document.activeElement);(d=c==null?void 0:c.ref.current)==null||d.scrollIntoView({block:"nearest"})},[a]),h.jsx(xe.div,{"aria-hidden":!0,...o,ref:t,style:{flexShrink:0,...o.style},onPointerDown:he(o.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:he(o.onPointerMove,()=>{var c;(c=i.onItemLeave)==null||c.call(i),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:he(o.onPointerLeave,()=>{l()})})}),iO="SelectSeparator",cb=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return h.jsx(xe.div,{"aria-hidden":!0,...r,ref:t})});cb.displayName=iO;var ph="SelectArrow",sO=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=wd(n),i=po(ph,n),s=ho(ph,n);return i.open&&s.position==="popper"?h.jsx(IS,{...o,...r,ref:t}):null});sO.displayName=ph;function ub(e){return e===""||e===void 0}var db=x.forwardRef((e,t)=>{const{value:n,...r}=e,o=x.useRef(null),i=Ae(t,o),s=t7(n);return x.useEffect(()=>{const a=o.current,l=window.HTMLSelectElement.prototype,d=Object.getOwnPropertyDescriptor(l,"value").set;if(s!==n&&d){const u=new Event("change",{bubbles:!0});d.call(a,n),a.dispatchEvent(u)}},[s,n]),h.jsx(pl,{asChild:!0,children:h.jsx("select",{...r,ref:i,defaultValue:n})})});db.displayName="BubbleSelect";function fb(e){const t=Dt(e),n=x.useRef(""),r=x.useRef(0),o=x.useCallback(s=>{const a=n.current+s;t(a),function l(c){n.current=c,window.clearTimeout(r.current),c!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(a)},[t]),i=x.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return x.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,o,i]}function pb(e,t,n){const o=t.length>1&&Array.from(t).every(c=>c===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let s=aO(e,Math.max(i,0));o.length===1&&(s=s.filter(c=>c!==n));const l=s.find(c=>c.textValue.toLowerCase().startsWith(o.toLowerCase()));return l!==n?l:void 0}function aO(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var lO=FS,hb=HS,cO=US,uO=WS,dO=ZS,mb=GS,fO=qS,gb=eb,vb=nb,pO=rb,hO=ib,yb=sb,xb=ab,wb=cb;const ur=lO,dr=cO,Fn=x.forwardRef(({className:e,children:t,...n},r)=>h.jsxs(hb,{ref:r,className:we("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,h.jsx(uO,{asChild:!0,children:h.jsx(c6,{className:"h-4 w-4 opacity-50"})})]}));Fn.displayName=hb.displayName;const _b=x.forwardRef(({className:e,...t},n)=>h.jsx(yb,{ref:n,className:we("flex cursor-default items-center justify-center py-1",e),...t,children:h.jsx(h6,{})}));_b.displayName=yb.displayName;const Sb=x.forwardRef(({className:e,...t},n)=>h.jsx(xb,{ref:n,className:we("flex cursor-default items-center justify-center py-1",e),...t,children:h.jsx(v_,{})}));Sb.displayName=xb.displayName;const Vn=x.forwardRef(({className:e,children:t,position:n="popper",...r},o)=>h.jsx(dO,{children:h.jsxs(mb,{ref:o,className:we("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[h.jsx(_b,{}),h.jsx(fO,{className:we("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),h.jsx(Sb,{})]})}));Vn.displayName=mb.displayName;const mO=x.forwardRef(({className:e,...t},n)=>h.jsx(gb,{ref:n,className:we("px-2 py-1.5 text-sm font-semibold",e),...t}));mO.displayName=gb.displayName;const _n=x.forwardRef(({className:e,children:t,...n},r)=>h.jsxs(vb,{ref:r,className:we("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[h.jsx("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:h.jsx(hO,{children:h.jsx(d6,{className:"h-4 w-4"})})}),h.jsx(pO,{children:t})]}));_n.displayName=vb.displayName;const gO=x.forwardRef(({className:e,...t},n)=>h.jsx(wb,{ref:n,className:we("-mx-1 my-1 h-px bg-muted",e),...t}));gO.displayName=wb.displayName;const vO=Pe.object({network:Pe.string().min(1,"reqired"),subdomain:Pe.string().min(1,"required")}),yO=Pe.object({id:Pe.string(),portId:Pe.string()});function xO(e){const{id:t,selected:n}=e,r=x.useMemo(()=>os(e,"https"),[e]);return h.jsxs(Qo,{id:t,selected:n,type:e.type,children:[Lt(e),h.jsx(Wt,{type:"target",id:"https",position:ue.Bottom,isConnectable:r,isConnectableStart:r,isConnectableEnd:r})]})}function wO({id:e,data:t}){var c,d;const n=zt(),r=ll(),o=yr({resolver:xr(vO),mode:"onChange",defaultValues:{network:"",subdomain:""}});x.useEffect(()=>{const u=o.watch((f,{name:p})=>{p==="network"?f.network!==void 0&&n.updateNodeData(e,{network:f.network}):p==="subdomain"&&n.updateNodeData(e,{subdomain:f.subdomain})});return()=>u.unsubscribe()},[o,n]);const i=yr({resolver:xr(yO),mode:"onChange",defaultValues:{id:(c=t.https)==null?void 0:c.serviceId,portId:(d=t.https)==null?void 0:d.portId}});x.useEffect(()=>{var u,f;i.reset({id:(u=t.https)==null?void 0:u.serviceId,portId:(f=t.https)==null?void 0:f.portId})},[i,t]);const s=Ko(),a=x.useMemo(()=>{if(t!==void 0&&t.https!==void 0){const u=t.https;return s.find(f=>f.id===u.serviceId)}return null},[t]),l=x.useMemo(()=>s.filter(u=>u.id===e?!1:a!==null&&a.id===e?!0:u.type!=="app"?!1:u.data&&u.data.ports&&u.data.ports.length>0),[s,a]);return x.useEffect(()=>{const u=i.watch((f,{name:p,type:y})=>{if(console.log({name:p,type:y}),y==="change")switch(p){case"id":if(!f.id)break;const v=n.edges.filter(m=>m.target===e),_=v[0]?v[0].id:void 0;n.replaceEdge({source:f.id,sourceHandle:"ports",target:e,targetHandle:"https"},_);break;case"portId":n.updateNodeData(e,{https:{serviceId:f.id,portId:f.portId}});break}});return()=>u.unsubscribe()},[i,n,l]),h.jsxs(h.Fragment,{children:[h.jsx(wr,{...o,children:h.jsxs("form",{className:"space-y-2",children:[h.jsx(ut,{control:o.control,name:"network",render:({field:u})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:u.onChange,defaultValue:u.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Network"})})}),h.jsx(Vn,{children:r.networks.map(f=>h.jsx(_n,{value:f.domain,children:`${f.name} - ${f.domain}`},f.name))})]}),h.jsx(st,{})]})}),h.jsx(ut,{control:o.control,name:"subdomain",render:({field:u})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"subdomain",className:"border border-black",...u})}),h.jsx(st,{})]})})]})}),h.jsx(wr,{...i,children:h.jsxs("form",{className:"space-y-2",children:[h.jsx(ut,{control:i.control,name:"id",render:({field:u})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:u.onChange,defaultValue:u.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Service"})})}),h.jsx(Vn,{children:l.map(f=>h.jsx(_n,{value:f.id,children:Lt(f)},f.id))})]}),h.jsx(st,{})]})}),h.jsx(ut,{control:i.control,name:"portId",render:({field:u})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:u.onChange,defaultValue:u.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Port"})})}),h.jsx(Vn,{children:a&&a.data.ports.map(f=>h.jsxs(_n,{value:f.id,children:[f.name," - ",f.value]},f.id))})]}),h.jsx(st,{})]})})]})})]})}/**
+ * @license lucide-react v0.454.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const _O=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),bb=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/**
+ * @license lucide-react v0.454.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */var SO={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
+ * @license lucide-react v0.454.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const bO=x.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:o="",children:i,iconNode:s,...a},l)=>x.createElement("svg",{ref:l,...SO,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:bb("lucide",o),...a},[...s.map(([c,d])=>x.createElement(c,d)),...Array.isArray(i)?i:[i]]));/**
+ * @license lucide-react v0.454.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const CO=(e,t)=>{const n=x.forwardRef(({className:r,...o},i)=>x.createElement(bO,{ref:i,iconNode:t,className:bb(`lucide-${_O(e)}`,r),...o}));return n.displayName=`${e}`,n};/**
+ * @license lucide-react v0.454.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const EO=CO("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);var[_d,mz]=Xo("Tooltip",[gd]),Sd=gd(),Cb="TooltipProvider",kO=700,hh="tooltip.open",[NO,ag]=_d(Cb),Eb=e=>{const{__scopeTooltip:t,delayDuration:n=kO,skipDelayDuration:r=300,disableHoverableContent:o=!1,children:i}=e,[s,a]=x.useState(!0),l=x.useRef(!1),c=x.useRef(0);return x.useEffect(()=>{const d=c.current;return()=>window.clearTimeout(d)},[]),h.jsx(NO,{scope:t,isOpenDelayed:s,delayDuration:n,onOpen:x.useCallback(()=>{window.clearTimeout(c.current),a(!1)},[]),onClose:x.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>a(!0),r)},[r]),isPointerInTransitRef:l,onPointerInTransitChange:x.useCallback(d=>{l.current=d},[]),disableHoverableContent:o,children:i})};Eb.displayName=Cb;var bd="Tooltip",[TO,ml]=_d(bd),kb=e=>{const{__scopeTooltip:t,children:n,open:r,defaultOpen:o=!1,onOpenChange:i,disableHoverableContent:s,delayDuration:a}=e,l=ag(bd,e.__scopeTooltip),c=Sd(t),[d,u]=x.useState(null),f=xn(),p=x.useRef(0),y=s??l.disableHoverableContent,v=a??l.delayDuration,_=x.useRef(!1),[m=!1,g]=Hn({prop:r,defaultProp:o,onChange:E=>{E?(l.onOpen(),document.dispatchEvent(new CustomEvent(hh))):l.onClose(),i==null||i(E)}}),w=x.useMemo(()=>m?_.current?"delayed-open":"instant-open":"closed",[m]),S=x.useCallback(()=>{window.clearTimeout(p.current),p.current=0,_.current=!1,g(!0)},[g]),C=x.useCallback(()=>{window.clearTimeout(p.current),p.current=0,g(!1)},[g]),N=x.useCallback(()=>{window.clearTimeout(p.current),p.current=window.setTimeout(()=>{_.current=!0,g(!0),p.current=0},v)},[v,g]);return x.useEffect(()=>()=>{p.current&&(window.clearTimeout(p.current),p.current=0)},[]),h.jsx(NS,{...c,children:h.jsx(TO,{scope:t,contentId:f,open:m,stateAttribute:w,trigger:d,onTriggerChange:u,onTriggerEnter:x.useCallback(()=>{l.isOpenDelayed?N():S()},[l.isOpenDelayed,N,S]),onTriggerLeave:x.useCallback(()=>{y?C():(window.clearTimeout(p.current),p.current=0)},[C,y]),onOpen:S,onClose:C,disableHoverableContent:y,children:n})})};kb.displayName=bd;var mh="TooltipTrigger",Nb=x.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=ml(mh,n),i=ag(mh,n),s=Sd(n),a=x.useRef(null),l=Ae(t,a,o.onTriggerChange),c=x.useRef(!1),d=x.useRef(!1),u=x.useCallback(()=>c.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener("pointerup",u),[u]),h.jsx(TS,{asChild:!0,...s,children:h.jsx(xe.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...r,ref:l,onPointerMove:he(e.onPointerMove,f=>{f.pointerType!=="touch"&&!d.current&&!i.isPointerInTransitRef.current&&(o.onTriggerEnter(),d.current=!0)}),onPointerLeave:he(e.onPointerLeave,()=>{o.onTriggerLeave(),d.current=!1}),onPointerDown:he(e.onPointerDown,()=>{c.current=!0,document.addEventListener("pointerup",u,{once:!0})}),onFocus:he(e.onFocus,()=>{c.current||o.onOpen()}),onBlur:he(e.onBlur,o.onClose),onClick:he(e.onClick,o.onClose)})})});Nb.displayName=mh;var lg="TooltipPortal",[PO,IO]=_d(lg,{forceMount:void 0}),Tb=e=>{const{__scopeTooltip:t,forceMount:n,children:r,container:o}=e,i=ml(lg,t);return h.jsx(PO,{scope:t,forceMount:n,children:h.jsx(kr,{present:n||i.open,children:h.jsx(fl,{asChild:!0,container:o,children:r})})})};Tb.displayName=lg;var ss="TooltipContent",Pb=x.forwardRef((e,t)=>{const n=IO(ss,e.__scopeTooltip),{forceMount:r=n.forceMount,side:o="top",...i}=e,s=ml(ss,e.__scopeTooltip);return h.jsx(kr,{present:r||s.open,children:s.disableHoverableContent?h.jsx(Ib,{side:o,...i,ref:t}):h.jsx(RO,{side:o,...i,ref:t})})}),RO=x.forwardRef((e,t)=>{const n=ml(ss,e.__scopeTooltip),r=ag(ss,e.__scopeTooltip),o=x.useRef(null),i=Ae(t,o),[s,a]=x.useState(null),{trigger:l,onClose:c}=n,d=o.current,{onPointerInTransitChange:u}=r,f=x.useCallback(()=>{a(null),u(!1)},[u]),p=x.useCallback((y,v)=>{const _=y.currentTarget,m={x:y.clientX,y:y.clientY},g=OO(m,_.getBoundingClientRect()),w=DO(m,g),S=LO(v.getBoundingClientRect()),C=$O([...w,...S]);a(C),u(!0)},[u]);return x.useEffect(()=>()=>f(),[f]),x.useEffect(()=>{if(l&&d){const y=_=>p(_,d),v=_=>p(_,l);return l.addEventListener("pointerleave",y),d.addEventListener("pointerleave",v),()=>{l.removeEventListener("pointerleave",y),d.removeEventListener("pointerleave",v)}}},[l,d,p,f]),x.useEffect(()=>{if(s){const y=v=>{const _=v.target,m={x:v.clientX,y:v.clientY},g=(l==null?void 0:l.contains(_))||(d==null?void 0:d.contains(_)),w=!zO(m,s);g?f():w&&(f(),c())};return document.addEventListener("pointermove",y),()=>document.removeEventListener("pointermove",y)}},[l,d,s,c,f]),h.jsx(Ib,{...e,ref:i})}),[AO,MO]=_d(bd,{isInside:!1}),Ib=x.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":o,onEscapeKeyDown:i,onPointerDownOutside:s,...a}=e,l=ml(ss,n),c=Sd(n),{onClose:d}=l;return x.useEffect(()=>(document.addEventListener(hh,d),()=>document.removeEventListener(hh,d)),[d]),x.useEffect(()=>{if(l.trigger){const u=f=>{const p=f.target;p!=null&&p.contains(l.trigger)&&d()};return window.addEventListener("scroll",u,{capture:!0}),()=>window.removeEventListener("scroll",u,{capture:!0})}},[l.trigger,d]),h.jsx(ul,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:i,onPointerDownOutside:s,onFocusOutside:u=>u.preventDefault(),onDismiss:d,children:h.jsxs(PS,{"data-state":l.stateAttribute,...c,...a,ref:t,style:{...a.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[h.jsx(Z2,{children:r}),h.jsx(AO,{scope:n,isInside:!0,children:h.jsx(r7,{id:l.contentId,role:"tooltip",children:o||r})})]})})});Pb.displayName=ss;var Rb="TooltipArrow",jO=x.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=Sd(n);return MO(Rb,n).isInside?null:h.jsx(IS,{...o,...r,ref:t})});jO.displayName=Rb;function OO(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),o=Math.abs(t.right-e.x),i=Math.abs(t.left-e.x);switch(Math.min(n,r,o,i)){case i:return"left";case o:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function DO(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function LO(e){const{top:t,right:n,bottom:r,left:o}=e;return[{x:o,y:t},{x:n,y:t},{x:n,y:r},{x:o,y:r}]}function zO(e,t){const{x:n,y:r}=e;let o=!1;for(let i=0,s=t.length-1;i<t.length;s=i++){const a=t[i].x,l=t[i].y,c=t[s].x,d=t[s].y;l>r!=d>r&&n<(c-a)*(r-l)/(d-l)+a&&(o=!o)}return o}function $O(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),FO(t)}function FO(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const o=e[r];for(;t.length>=2;){const i=t[t.length-1],s=t[t.length-2];if((i.x-s.x)*(o.y-s.y)>=(i.y-s.y)*(o.x-s.x))t.pop();else break}t.push(o)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const o=e[r];for(;n.length>=2;){const i=n[n.length-1],s=n[n.length-2];if((i.x-s.x)*(o.y-s.y)>=(i.y-s.y)*(o.x-s.x))n.pop();else break}n.push(o)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var VO=Eb,HO=kb,BO=Nb,UO=Tb,Ab=Pb;const WO=VO,ZO=HO,GO=BO,Mb=x.forwardRef(({className:e,sideOffset:t=4,...n},r)=>h.jsx(UO,{children:h.jsx(Ab,{ref:r,sideOffset:t,className:we("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n})}));Mb.displayName=Ab.displayName;function YO(e){const{id:t,selected:n}=e,r=x.useMemo(()=>os(e,"ports"),[e]),o=x.useMemo(()=>os(e,"repository"),[e]);return h.jsx(Qo,{id:t,selected:n,type:e.type,children:h.jsxs("div",{style:{padding:"10px 20px"},children:[Lt(e),h.jsx(Wt,{id:"repository",type:"target",position:ue.Left,isConnectableStart:o,isConnectableEnd:o,isConnectable:o}),h.jsx(Wt,{id:"ports",type:"source",position:ue.Top,isConnectableStart:r,isConnectableEnd:r,isConnectable:r}),h.jsx(Wt,{id:"env_var",type:"target",position:ue.Bottom,isConnectableStart:!0,isConnectableEnd:!0,isConnectable:!0})]})})}const KO=Pe.object({name:Pe.string().min(1,"requried"),type:Pe.enum(R_)}),XO=Pe.object({name:Pe.string().min(1,"required"),value:Pe.coerce.number().gt(0,"can not be negative")});function qO({id:e,data:t}){const n=zt(),r=yr({resolver:xr(KO),mode:"onChange",defaultValues:{name:t.label,type:t.type}}),o=yr({resolver:xr(XO),mode:"onSubmit",defaultValues:{name:"",value:0}}),i=x.useCallback(p=>{n.updateNodeData(e,{ports:(t.ports||[]).concat({id:Aa(),name:p.name,value:p.value})}),o.reset()},[t,o]);x.useEffect(()=>{const p=r.watch((y,{name:v,type:_})=>{if(console.log({name:v,type:_}),_==="change")switch(v){case"name":if(!y.name)break;n.updateNodeData(e,{label:y.name});break;case"type":if(!y.type)break;n.updateNodeData(e,{type:y.type});break}});return()=>p.unsubscribe()},[r,n]);const s=x.useCallback((p,y)=>v=>{p.ref(v),v!=null&&y===t.activeField&&(console.log(v),v.focus(),n.updateNodeData(e,{activeField:void 0}))},[t,n]),[a,l]=x.useState({});x.useEffect(()=>{t.activeField==="type"?l({open:!0,onOpenChange:()=>n.updateNodeData(e,{activeField:void 0})}):l({})},[n,t,l]);const c=x.useCallback(p=>()=>{n.updateNodeData(e,{...t,envVars:t.envVars.map(y=>y.id!==p.id?y:{...y,isEditting:!0})})},[e,t,n]),d=(p,y,v)=>{v.updateNodeData(e,{...t,envVars:t.envVars.map(_=>{if(_.id!==p.id)return _;if(y)return{..._,isEditting:!1,alias:y.toUpperCase()};if(console.log(_),"alias"in _){const{alias:m,...g}=_;return console.log(g),{...g,isEditting:!1}}return{..._,isEditting:!1}})})},u=x.useCallback(p=>y=>{y.key==="Enter"&&(y.preventDefault(),d(p,y.currentTarget.value,n))},[e,t,n]),f=x.useCallback(p=>y=>{d(p,y.currentTarget.value,n)},[e,t,n]);return h.jsxs(h.Fragment,{children:[h.jsx(wr,{...r,children:h.jsxs("form",{children:[h.jsx(ut,{control:r.control,name:"name",render:({field:p})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"name",className:"border border-black",...p,ref:s(p,"name")})}),h.jsx(st,{})]})}),h.jsx(ut,{control:r.control,name:"type",render:({field:p})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:p.onChange,defaultValue:p.value,...a,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Runtime"})})}),h.jsx(Vn,{children:R_.map(y=>h.jsx(_n,{value:y,children:y},y))})]}),h.jsx(st,{})]})})]})}),"Ports",h.jsx("ul",{children:t&&t.ports&&t.ports.map(p=>h.jsxs("li",{children:[p.name," - ",p.value]},p.id))}),h.jsx(wr,{...o,children:h.jsxs("form",{className:"flex flex-row space-x-1",onSubmit:o.handleSubmit(i),children:[h.jsx(ut,{control:o.control,name:"name",render:({field:p})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"name",className:"border border-black",...p})}),h.jsx(st,{})]})}),h.jsx(ut,{control:o.control,name:"value",render:({field:p})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"value",className:"border border-black",...p})}),h.jsx(st,{})]})}),h.jsx(Ln,{type:"submit",children:"Add Port"})]})}),"Env Vars",h.jsx("ul",{children:t&&t.envVars&&t.envVars.map(p=>{if("name"in p){const y="alias"in p?p.alias:p.name;return p.isEditting?h.jsx("li",{children:h.jsx(nn,{type:"text",className:"border border-black",defaultValue:y,onKeyUp:u(p),onBlur:f(p),autoFocus:!0})},p.id):h.jsx("li",{onClick:c(p),children:h.jsx(WO,{children:h.jsxs(ZO,{children:[h.jsxs(GO,{children:[h.jsx(Ln,{size:"icon",variant:"ghost",children:h.jsx(EO,{})}),y]}),h.jsx(Mb,{children:p.name})]})})},p.id)}})})]})}function QO(e){const{id:t,data:n,selected:r}=e,o=x.useMemo(()=>os(e,"volume"),[e]);return h.jsx(Qo,{id:t,selected:r,type:e.type,children:h.jsxs("div",{style:{padding:"10px 20px"},children:[h.jsx("div",{children:Lt(e)}),h.jsx("div",{children:n.type&&`${n.type}`}),h.jsx("div",{children:n.size&&`${n.size}`}),h.jsx(Wt,{id:"volume",type:"source",position:ue.Top,isConnectableStart:o,isConnectableEnd:o,isConnectable:o})]})})}const jb=["ReadWriteOnce","ReadOnlyMany","ReadWriteMany","ReadWriteOncePod"],JO=Pe.object({name:Pe.string().min(1),type:Pe.enum(jb),size:Pe.string().min(1).default("1Gi")});function eD({id:e,data:t}){const n=zt(),r=yr({resolver:xr(JO),mode:"onChange",defaultValues:{name:"",type:void 0,size:""}});return x.useEffect(()=>{const o=r.watch((i,{name:s,type:a})=>{a==="change"&&(console.log({name:s,type:a,value:i}),n.updateNodeData(e,{label:i.name,type:i.type,size:i.size}))});return()=>o.unsubscribe()},[r,n]),x.useEffect(()=>{r.reset({name:t.label,type:t.type,size:t.size})},[r,t]),h.jsx(h.Fragment,{children:h.jsx(wr,{...r,children:h.jsxs("form",{className:"space-y-2",children:[h.jsx(ut,{control:r.control,name:"name",render:({field:o})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"name",className:"border border-black",...o})}),h.jsx(st,{})]})}),h.jsx(ut,{control:r.control,name:"type",render:({field:o})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:o.onChange,defaultValue:o.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Volume Type"})})}),h.jsx(Vn,{children:jb.map(i=>h.jsx(_n,{value:i,children:i},i))})]}),h.jsx(st,{})]})}),h.jsx(ut,{control:r.control,name:"size",render:({field:o})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"size",className:"border border-black",...o})}),h.jsx(st,{})]})})]})})})}function tD(e){const{id:t,selected:n}=e;return h.jsx(Qo,{id:t,selected:n,type:e.type,children:h.jsxs("div",{style:{padding:"10px 20px"},children:[Lt(e),h.jsx(Wt,{id:"env_var",type:"source",position:ue.Top,isConnectableStart:!0,isConnectableEnd:!0,isConnectable:!0})]})})}const nD=Pe.object({name:Pe.string().min(1,"required")});function rD(e){const{id:t}=e,n=zt(),r=yr({resolver:xr(nD),mode:"onChange",defaultValues:{name:""}});return x.useEffect(()=>{const o=r.watch((i,{type:s})=>{s==="change"&&n.updateNodeData(t,{label:i.name})});return()=>o.unsubscribe()},[r,n]),h.jsx(h.Fragment,{children:h.jsx(wr,{...r,children:h.jsx("form",{className:"space-y-2",children:h.jsx(ut,{control:r.control,name:"name",render:({field:o})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"name",className:"border border-black",...o})}),h.jsx(st,{})]})})})})})}function oD(e){const{id:t,selected:n}=e;return h.jsx(Qo,{id:t,selected:n,type:e.type,children:h.jsxs("div",{style:{padding:"10px 20px"},children:[Lt(e),h.jsx(Wt,{id:"env_var",type:"source",position:ue.Top,isConnectableStart:!0,isConnectableEnd:!0,isConnectable:!0})]})})}function iD(e){return h.jsx(h.Fragment,{children:h.jsx("div",{children:Lt(e)})})}function sD(e){const{id:t,selected:n}=e,r=x.useMemo(()=>os(e,"repository"),[e]);return h.jsx(Qo,{id:t,selected:n,type:e.type,children:h.jsxs("div",{style:{padding:"10px 20px"},children:[Lt(e),h.jsx(Wt,{id:"repository",type:"source",position:ue.Right,isConnectableStart:r,isConnectableEnd:r,isConnectable:r})]})})}const aD=Pe.object({address:Pe.string().min(1)});function lD(e){const{id:t,data:n}=e,r=zt(),o=yr({resolver:xr(aD),mode:"onChange",defaultValues:{address:n.address}});return x.useEffect(()=>{const i=o.watch((s,{name:a,type:l})=>{if(l==="change")switch(a){case"address":r.updateNodeData(t,{address:s.address});break}});return()=>i.unsubscribe()},[o,r]),h.jsx(h.Fragment,{children:h.jsx(wr,{...o,children:h.jsx("form",{className:"space-y-2",children:h.jsx(ut,{control:o.control,name:"address",render:({field:i})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"address",className:"border border-black",...i})}),h.jsx(st,{})]})})})})})}const cD=1,uD=1e6;let Af=0;function dD(){return Af=(Af+1)%Number.MAX_SAFE_INTEGER,Af.toString()}const Mf=new Map,Ry=e=>{if(Mf.has(e))return;const t=setTimeout(()=>{Mf.delete(e),oa({type:"REMOVE_TOAST",toastId:e})},uD);Mf.set(e,t)},fD=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,cD)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(n=>n.id===t.toast.id?{...n,...t.toast}:n)};case"DISMISS_TOAST":{const{toastId:n}=t;return n?Ry(n):e.toasts.forEach(r=>{Ry(r.id)}),{...e,toasts:e.toasts.map(r=>r.id===n||n===void 0?{...r,open:!1}:r)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(n=>n.id!==t.toastId)}}},yc=[];let xc={toasts:[]};function oa(e){xc=fD(xc,e),yc.forEach(t=>{t(xc)})}function pD({...e}){const t=dD(),n=o=>oa({type:"UPDATE_TOAST",toast:{...o,id:t}}),r=()=>oa({type:"DISMISS_TOAST",toastId:t});return oa({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:o=>{o||r()}}}),{id:t,dismiss:r,update:n}}function cg(){const[e,t]=x.useState(xc);return x.useEffect(()=>(yc.push(t),()=>{const n=yc.indexOf(t);n>-1&&yc.splice(n,1)}),[e]),{...e,toast:pD,dismiss:n=>oa({type:"DISMISS_TOAST",toastId:n})}}function hD(){const{toast:e}=cg(),t=zt(),n=A_(),r=Ko(),o=ll(),i=cd(),s=Yo(),[a,l]=x.useState(!1),[c,d]=x.useState(!1);x.useEffect(()=>{l(!i.some(g=>g.type==="FATAL"))},[i,l]);const u=x.useCallback(async()=>{if(n!=null){d(!0);try{const g=w_(r,o);if(g==null)throw new Error("MUST NOT REACH!");const w=await fetch(`/api/project/${n}/deploy`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:JSON.stringify(s.toObject()),config:g})});w.ok?e({title:"Deployment succeeded"}):e({variant:"destructive",title:"Deployment failed",description:await w.text()})}catch(g){console.log(g),e({variant:"destructive",title:"Deployment failed"})}finally{d(!1)}}},[n,s,r,o,d]),[f,p]=x.useState(),y=x.useCallback(async()=>{if(n==null)return;const g=await fetch(`/api/project/${n}/saved`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s.toObject())});g.ok?e({title:"Save succeeded"}):e({variant:"destructive",title:"Save failed",description:await g.text()})},[n,s,p]),v=x.useCallback(async()=>{if(n==null)return;const w=await(await fetch(`/api/project/${n}/saved`,{method:"GET"})).json(),{x:S=0,y:C=0,zoom:N=1}=w.viewport;t.setNodes(w.nodes||[]),t.setEdges(w.edges||[]),s.setViewport({x:S,y:C,zoom:N})},[n,s,f]),[_,m]=x.useState({});return x.useEffect(()=>{m(c?{loading:!0}:a?{disabled:!1}:{disabled:!0})},[a,c,m]),h.jsxs(h.Fragment,{children:[h.jsx(Ln,{onClick:u,..._,children:"Deploy"}),h.jsx(Ln,{onClick:y,children:"Save"}),h.jsx(Ln,{onClick:v,children:"Restore"})]})}const mD=Pe.object({network:Pe.string().min(1,"reqired"),subdomain:Pe.string().min(1,"required")}),gD=Pe.object({serviceId:Pe.string(),portId:Pe.string()});function vD(e){const{id:t,selected:n}=e,r=x.useMemo(()=>os(e,"tcp"),[e]);return h.jsxs(Qo,{id:t,selected:n,type:e.type,children:[Lt(e),h.jsx(Wt,{type:"target",id:"tcp",position:ue.Bottom,isConnectable:r,isConnectableStart:r,isConnectableEnd:r})]})}function yD({id:e,data:t}){var v,_;const n=zt(),r=ll(),o=yr({resolver:xr(mD),mode:"onChange",defaultValues:{network:"",subdomain:""}});x.useEffect(()=>{const m=o.watch((g,{name:w})=>{w==="network"?g.network!==void 0&&n.updateNodeData(e,{network:g.network}):w==="subdomain"&&n.updateNodeData(e,{subdomain:g.subdomain})});return()=>m.unsubscribe()},[o,n]);const i=yr({resolver:xr(gD),mode:"onSubmit",defaultValues:{serviceId:(v=t.selected)==null?void 0:v.serviceId,portId:(_=t.selected)==null?void 0:_.portId}});x.useEffect(()=>{var m,g;i.reset({serviceId:(m=t.selected)==null?void 0:m.serviceId,portId:(g=t.selected)==null?void 0:g.portId}),console.log(i.getValues())},[i,t]);const s=Ko(),[a,l]=x.useState(void 0);x.useEffect(()=>{var m;if(((m=t.selected)==null?void 0:m.serviceId)==null)l(void 0);else{const g=t.selected.serviceId;l(s.find(w=>w.id===g))}},[t,l]);const c=x.useMemo(()=>(console.log(a),s.filter(m=>m.id===e?!1:a!=null&&a.id===e||"ports"in m.data&&(m.data.ports||[]).length>0)),[s,a]);x.useEffect(()=>{const m=i.watch((g,{name:w,type:S})=>{if(S==="change")switch(w){case"serviceId":if(!g.serviceId)break;n.updateNodeData(e,{selected:{serviceId:g.serviceId}});break;case"portId":if(!g.portId)break;n.updateNodeData(e,{selected:{serviceId:g.serviceId,portId:g.portId}});break}});return()=>m.unsubscribe()},[i,n]);const[d,u]=x.useState(new Map),[f,p]=x.useState(new Map);x.useEffect(()=>{u(new Map((t.exposed||[]).map(m=>[m.serviceId,Lt(s.find(g=>g.id===m.serviceId))]))),p(new Map((t.exposed||[]).map(m=>[`${m.serviceId} - ${m.portId}`,(s.find(g=>g.id===m.serviceId).data.ports||[]).find(g=>g.id===m.portId).name])))},[s,t,u,p]);const y=x.useCallback(m=>{n.setEdges(n.edges.filter(w=>w.target!==e));const g=(t.exposed||[]).concat({serviceId:m.serviceId,portId:m.portId});n.updateNodeData(e,{exposed:g,selected:void 0}),n.setEdges(n.edges.concat(g.map(w=>({id:Aa(),source:w.serviceId,sourceHandle:"ports",target:e,targetHandle:"tcp"}))))},[e,t,i,n,u,p]);return h.jsxs(h.Fragment,{children:[h.jsx(wr,{...o,children:h.jsxs("form",{className:"space-y-2",children:[h.jsx(ut,{control:o.control,name:"network",render:({field:m})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:m.onChange,defaultValue:m.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Network"})})}),h.jsx(Vn,{children:r.networks.map(g=>h.jsx(_n,{value:g.domain,children:`${g.name} - ${g.domain}`},g.name))})]}),h.jsx(st,{})]})}),h.jsx(ut,{control:o.control,name:"subdomain",render:({field:m})=>h.jsxs(ot,{children:[h.jsx(it,{children:h.jsx(nn,{placeholder:"subdomain",className:"border border-black",...m})}),h.jsx(st,{})]})})]})}),"Exposed Services",h.jsx("ul",{children:(t.exposed||[]).map((m,g)=>h.jsxs("li",{children:[d.get(m.serviceId)," - ",f.get(`${m.serviceId} - ${m.portId}`)]},g))}),h.jsx(wr,{...i,children:h.jsxs("form",{className:"space-y-2",onSubmit:i.handleSubmit(y),children:[h.jsx(ut,{control:i.control,name:"serviceId",render:({field:m})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:m.onChange,defaultValue:m.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Service"})})}),h.jsx(Vn,{children:c.map(g=>h.jsx(_n,{value:g.id,children:Lt(g)}))})]}),h.jsx(st,{})]})}),h.jsx(ut,{control:i.control,name:"portId",render:({field:m})=>h.jsxs(ot,{children:[h.jsxs(ur,{onValueChange:m.onChange,defaultValue:m.value,children:[h.jsx(it,{children:h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Port"})})}),h.jsx(Vn,{children:a&&(a.data.ports||[]).map(g=>h.jsxs(_n,{value:g.id,children:[g.name," - ",g.value]},g.id))})]}),h.jsx(st,{})]})}),h.jsx(Ln,{type:"submit",children:"Expose"})]})})]})}const xD=e=>({nodes:e.nodes,edges:e.edges,onNodesChange:e.onNodesChange,onEdgesChange:e.onEdgesChange,onConnect:e.onConnect});function wD(){const{nodes:e,edges:t,onNodesChange:n,onEdgesChange:r,onConnect:o}=zt(oj(xD)),i=Yo(),s=x.useMemo(()=>({app:YO,"gateway-https":xO,"gateway-tcp":vD,volume:QO,postgresql:tD,mongodb:oD,github:sD}),[]),a=x.useCallback(l=>{if(l.source===l.target)return!1;const c=i.getNode(l.source),d=i.getNode(l.target);return c.type==="github"?l.targetHandle==="repository":c.type==="app"&&l.sourceHandle==="ports"&&(!c.data.ports||c.data.ports.length===0)||d.type==="gateway-https"&&l.targetHandle==="https"&&d.data.https!==void 0?!1:c.type==="volume"?l.targetHandle==="volume":!0},[i]);return h.jsx("div",{style:{width:"100%",height:"100%"},children:h.jsxs(vR,{nodeTypes:s,nodes:e,edges:t,onNodesChange:n,onEdgesChange:r,onConnect:o,isValidConnection:a,fitView:!0,proOptions:{hideAttribution:!0},children:[h.jsx(IR,{}),h.jsx(bR,{variant:cr.Dots,gap:12,size:1}),h.jsx(Qu,{position:"bottom-right",children:h.jsx(hD,{})})]})})}function _D(e){switch(e.type){case"app":return h.jsx(qO,{...e});case"gateway-https":return h.jsx(wO,{...e});case"gateway-tcp":return h.jsx(yD,{...e});case"volume":return h.jsx(eD,{...e});case"postgresql":return h.jsx(rD,{...e});case"mongodb":return h.jsx(iD,{...e});case"github":return h.jsx(lD,{...e});default:return h.jsx(h.Fragment,{children:"nooo"})}}function SD(e,t,n){return n.indexOf(e)===t}function bD(){const e=Ko(),[t,n]=x.useState([]),r=x.useMemo(()=>e.filter(i=>i.selected).map(i=>i.id),[e]),o=x.useMemo(()=>t.concat(r).filter(SD),[t,r]);return h.jsx(Fm,{type:"multiple",value:o,onValueChange:i=>n(i),children:e.map(i=>h.jsxs(sd,{value:i.id,className:"px-3",children:[h.jsx(ad,{children:h.jsxs("div",{className:"flex flex-row space-x-2",children:[Bm(i.type),h.jsx("span",{children:Lt(i)})]})}),h.jsx(Vm,{children:h.jsx(_D,{...i})})]},i.id))})}const{createElement:as,createContext:CD,createRef:gz,forwardRef:Ob,useCallback:kt,useContext:Db,useEffect:Io,useImperativeHandle:Lb,useLayoutEffect:ED,useMemo:kD,useRef:Pt,useState:Li}=Nh,Ay=Nh[`useId${Math.random()}`.slice(0,5)],ND=ED,Cd=CD(null);Cd.displayName="PanelGroupContext";const Ro=ND,TD=typeof Ay=="function"?Ay:()=>null;let PD=0;function ug(e=null){const t=TD(),n=Pt(e||t||null);return n.current===null&&(n.current=""+PD++),e??n.current}function zb({children:e,className:t="",collapsedSize:n,collapsible:r,defaultSize:o,forwardedRef:i,id:s,maxSize:a,minSize:l,onCollapse:c,onExpand:d,onResize:u,order:f,style:p,tagName:y="div",...v}){const _=Db(Cd);if(_===null)throw Error("Panel components must be rendered within a PanelGroup container");const{collapsePanel:m,expandPanel:g,getPanelSize:w,getPanelStyle:S,groupId:C,isPanelCollapsed:N,reevaluatePanelConstraints:E,registerPanel:P,resizePanel:O,unregisterPanel:j}=_,$=ug(s),A=Pt({callbacks:{onCollapse:c,onExpand:d,onResize:u},constraints:{collapsedSize:n,collapsible:r,defaultSize:o,maxSize:a,minSize:l},id:$,idIsFromProps:s!==void 0,order:f});Pt({didLogMissingDefaultSizeWarning:!1}),Ro(()=>{const{callbacks:b,constraints:M}=A.current,T={...M};A.current.id=$,A.current.idIsFromProps=s!==void 0,A.current.order=f,b.onCollapse=c,b.onExpand=d,b.onResize=u,M.collapsedSize=n,M.collapsible=r,M.defaultSize=o,M.maxSize=a,M.minSize=l,(T.collapsedSize!==M.collapsedSize||T.collapsible!==M.collapsible||T.maxSize!==M.maxSize||T.minSize!==M.minSize)&&E(A.current,T)}),Ro(()=>{const b=A.current;return P(b),()=>{j(b)}},[f,$,P,j]),Lb(i,()=>({collapse:()=>{m(A.current)},expand:b=>{g(A.current,b)},getId(){return $},getSize(){return w(A.current)},isCollapsed(){return N(A.current)},isExpanded(){return!N(A.current)},resize:b=>{O(A.current,b)}}),[m,g,w,N,$,O]);const L=S(A.current,o);return as(y,{...v,children:e,className:t,id:s,style:{...L,...p},"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-group-id":C,"data-panel-id":$,"data-panel-size":parseFloat(""+L.flexGrow).toFixed(1)})}const $b=Ob((e,t)=>as(zb,{...e,forwardedRef:t}));zb.displayName="Panel";$b.displayName="forwardRef(Panel)";let gh=null,Co=null;function ID(e,t){if(t){const n=(t&Ub)!==0,r=(t&Wb)!==0,o=(t&Zb)!==0,i=(t&Gb)!==0;if(n)return o?"se-resize":i?"ne-resize":"e-resize";if(r)return o?"sw-resize":i?"nw-resize":"w-resize";if(o)return"s-resize";if(i)return"n-resize"}switch(e){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function RD(){Co!==null&&(document.head.removeChild(Co),gh=null,Co=null)}function jf(e,t){const n=ID(e,t);gh!==n&&(gh=n,Co===null&&(Co=document.createElement("style"),document.head.appendChild(Co)),Co.innerHTML=`*{cursor: ${n}!important;}`)}function Fb(e){return e.type==="keydown"}function Vb(e){return e.type.startsWith("pointer")}function Hb(e){return e.type.startsWith("mouse")}function Ed(e){if(Vb(e)){if(e.isPrimary)return{x:e.clientX,y:e.clientY}}else if(Hb(e))return{x:e.clientX,y:e.clientY};return{x:1/0,y:1/0}}function AD(){if(typeof matchMedia=="function")return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function MD(e,t,n){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function jD(e,t){if(e===t)throw new Error("Cannot compare node with itself");const n={a:Oy(e),b:Oy(t)};let r;for(;n.a.at(-1)===n.b.at(-1);)e=n.a.pop(),t=n.b.pop(),r=e;be(r,"Stacking order can only be calculated for elements with a common ancestor");const o={a:jy(My(n.a)),b:jy(My(n.b))};if(o.a===o.b){const i=r.childNodes,s={a:n.a.at(-1),b:n.b.at(-1)};let a=i.length;for(;a--;){const l=i[a];if(l===s.a)return 1;if(l===s.b)return-1}}return Math.sign(o.a-o.b)}const OD=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function DD(e){var t;const n=getComputedStyle((t=Bb(e))!==null&&t!==void 0?t:e).display;return n==="flex"||n==="inline-flex"}function LD(e){const t=getComputedStyle(e);return!!(t.position==="fixed"||t.zIndex!=="auto"&&(t.position!=="static"||DD(e))||+t.opacity<1||"transform"in t&&t.transform!=="none"||"webkitTransform"in t&&t.webkitTransform!=="none"||"mixBlendMode"in t&&t.mixBlendMode!=="normal"||"filter"in t&&t.filter!=="none"||"webkitFilter"in t&&t.webkitFilter!=="none"||"isolation"in t&&t.isolation==="isolate"||OD.test(t.willChange)||t.webkitOverflowScrolling==="touch")}function My(e){let t=e.length;for(;t--;){const n=e[t];if(be(n,"Missing node"),LD(n))return n}return null}function jy(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Oy(e){const t=[];for(;e;)t.push(e),e=Bb(e);return t}function Bb(e){const{parentNode:t}=e;return t&&t instanceof ShadowRoot?t.host:t}const Ub=1,Wb=2,Zb=4,Gb=8,zD=AD()==="coarse";let Sn=[],zi=!1,Hr=new Map,kd=new Map;const Ka=new Set;function $D(e,t,n,r,o){var i;const{ownerDocument:s}=t,a={direction:n,element:t,hitAreaMargins:r,setResizeHandlerState:o},l=(i=Hr.get(s))!==null&&i!==void 0?i:0;return Hr.set(s,l+1),Ka.add(a),_u(),function(){var d;kd.delete(e),Ka.delete(a);const u=(d=Hr.get(s))!==null&&d!==void 0?d:1;if(Hr.set(s,u-1),_u(),u===1&&Hr.delete(s),Sn.includes(a)){const f=Sn.indexOf(a);f>=0&&Sn.splice(f,1),fg(),o("up",!0,null)}}}function Dy(e){const{target:t}=e,{x:n,y:r}=Ed(e);zi=!0,dg({target:t,x:n,y:r}),_u(),Sn.length>0&&(Su("down",e),e.preventDefault(),e.stopPropagation())}function Ms(e){const{x:t,y:n}=Ed(e);if(zi&&e.buttons===0&&(zi=!1,Su("up",e)),!zi){const{target:r}=e;dg({target:r,x:t,y:n})}Su("move",e),fg(),Sn.length>0&&e.preventDefault()}function oi(e){const{target:t}=e,{x:n,y:r}=Ed(e);kd.clear(),zi=!1,Sn.length>0&&e.preventDefault(),Su("up",e),dg({target:t,x:n,y:r}),fg(),_u()}function dg({target:e,x:t,y:n}){Sn.splice(0);let r=null;e instanceof HTMLElement&&(r=e),Ka.forEach(o=>{const{element:i,hitAreaMargins:s}=o,a=i.getBoundingClientRect(),{bottom:l,left:c,right:d,top:u}=a,f=zD?s.coarse:s.fine;if(t>=c-f&&t<=d+f&&n>=u-f&&n<=l+f){if(r!==null&&document.contains(r)&&i!==r&&!i.contains(r)&&!r.contains(i)&&jD(r,i)>0){let y=r,v=!1;for(;y&&!y.contains(i);){if(MD(y.getBoundingClientRect(),a)){v=!0;break}y=y.parentElement}if(v)return}Sn.push(o)}})}function Of(e,t){kd.set(e,t)}function fg(){let e=!1,t=!1;Sn.forEach(r=>{const{direction:o}=r;o==="horizontal"?e=!0:t=!0});let n=0;kd.forEach(r=>{n|=r}),e&&t?jf("intersection",n):e?jf("horizontal",n):t?jf("vertical",n):RD()}function _u(){Hr.forEach((e,t)=>{const{body:n}=t;n.removeEventListener("contextmenu",oi),n.removeEventListener("pointerdown",Dy),n.removeEventListener("pointerleave",Ms),n.removeEventListener("pointermove",Ms)}),window.removeEventListener("pointerup",oi),window.removeEventListener("pointercancel",oi),Ka.size>0&&(zi?(Sn.length>0&&Hr.forEach((e,t)=>{const{body:n}=t;e>0&&(n.addEventListener("contextmenu",oi),n.addEventListener("pointerleave",Ms),n.addEventListener("pointermove",Ms))}),window.addEventListener("pointerup",oi),window.addEventListener("pointercancel",oi)):Hr.forEach((e,t)=>{const{body:n}=t;e>0&&(n.addEventListener("pointerdown",Dy,{capture:!0}),n.addEventListener("pointermove",Ms))}))}function Su(e,t){Ka.forEach(n=>{const{setResizeHandlerState:r}=n,o=Sn.includes(n);r(e,o,t)})}function FD(){const[e,t]=Li(0);return kt(()=>t(n=>n+1),[])}function be(e,t){if(!e)throw console.error(t),Error(t)}const pg=10;function Bo(e,t,n=pg){return e.toFixed(n)===t.toFixed(n)?0:e>t?1:-1}function nr(e,t,n=pg){return Bo(e,t,n)===0}function Ft(e,t,n){return Bo(e,t,n)===0}function VD(e,t,n){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++){const o=e[r],i=t[r];if(!Ft(o,i,n))return!1}return!0}function Ci({panelConstraints:e,panelIndex:t,size:n}){const r=e[t];be(r!=null,`Panel constraints not found for index ${t}`);let{collapsedSize:o=0,collapsible:i,maxSize:s=100,minSize:a=0}=r;if(Bo(n,a)<0)if(i){const l=(o+a)/2;Bo(n,l)<0?n=o:n=a}else n=a;return n=Math.min(s,n),n=parseFloat(n.toFixed(pg)),n}function Bs({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:o,trigger:i}){if(Ft(e,0))return t;const s=[...t],[a,l]=r;be(a!=null,"Invalid first pivot index"),be(l!=null,"Invalid second pivot index");let c=0;if(i==="keyboard"){{const u=e<0?l:a,f=n[u];be(f,`Panel constraints not found for index ${u}`);const{collapsedSize:p=0,collapsible:y,minSize:v=0}=f;if(y){const _=t[u];if(be(_!=null,`Previous layout not found for panel index ${u}`),Ft(_,p)){const m=v-_;Bo(m,Math.abs(e))>0&&(e=e<0?0-m:m)}}}{const u=e<0?a:l,f=n[u];be(f,`No panel constraints found for index ${u}`);const{collapsedSize:p=0,collapsible:y,minSize:v=0}=f;if(y){const _=t[u];if(be(_!=null,`Previous layout not found for panel index ${u}`),Ft(_,v)){const m=_-p;Bo(m,Math.abs(e))>0&&(e=e<0?0-m:m)}}}}{const u=e<0?1:-1;let f=e<0?l:a,p=0;for(;;){const v=t[f];be(v!=null,`Previous layout not found for panel index ${f}`);const m=Ci({panelConstraints:n,panelIndex:f,size:100})-v;if(p+=m,f+=u,f<0||f>=n.length)break}const y=Math.min(Math.abs(e),Math.abs(p));e=e<0?0-y:y}{let f=e<0?a:l;for(;f>=0&&f<n.length;){const p=Math.abs(e)-Math.abs(c),y=t[f];be(y!=null,`Previous layout not found for panel index ${f}`);const v=y-p,_=Ci({panelConstraints:n,panelIndex:f,size:v});if(!Ft(y,_)&&(c+=y-_,s[f]=_,c.toPrecision(3).localeCompare(Math.abs(e).toPrecision(3),void 0,{numeric:!0})>=0))break;e<0?f--:f++}}if(VD(o,s))return o;{const u=e<0?l:a,f=t[u];be(f!=null,`Previous layout not found for panel index ${u}`);const p=f+c,y=Ci({panelConstraints:n,panelIndex:u,size:p});if(s[u]=y,!Ft(y,p)){let v=p-y,m=e<0?l:a;for(;m>=0&&m<n.length;){const g=s[m];be(g!=null,`Previous layout not found for panel index ${m}`);const w=g+v,S=Ci({panelConstraints:n,panelIndex:m,size:w});if(Ft(g,S)||(v-=S-g,s[m]=S),Ft(v,0))break;e>0?m--:m++}}}const d=s.reduce((u,f)=>f+u,0);return Ft(d,100)?s:o}function HD({layout:e,panelsArray:t,pivotIndices:n}){let r=0,o=100,i=0,s=0;const a=n[0];be(a!=null,"No pivot index found"),t.forEach((u,f)=>{const{constraints:p}=u,{maxSize:y=100,minSize:v=0}=p;f===a?(r=v,o=y):(i+=v,s+=y)});const l=Math.min(o,100-i),c=Math.max(r,100-s),d=e[a];return{valueMax:l,valueMin:c,valueNow:d}}function Xa(e,t=document){return Array.from(t.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function Yb(e,t,n=document){const o=Xa(e,n).findIndex(i=>i.getAttribute("data-panel-resize-handle-id")===t);return o??null}function Kb(e,t,n){const r=Yb(e,t,n);return r!=null?[r,r+1]:[-1,-1]}function Xb(e,t=document){var n;if(t instanceof HTMLElement&&(t==null||(n=t.dataset)===null||n===void 0?void 0:n.panelGroupId)==e)return t;const r=t.querySelector(`[data-panel-group][data-panel-group-id="${e}"]`);return r||null}function Nd(e,t=document){const n=t.querySelector(`[data-panel-resize-handle-id="${e}"]`);return n||null}function BD(e,t,n,r=document){var o,i,s,a;const l=Nd(t,r),c=Xa(e,r),d=l?c.indexOf(l):-1,u=(o=(i=n[d])===null||i===void 0?void 0:i.id)!==null&&o!==void 0?o:null,f=(s=(a=n[d+1])===null||a===void 0?void 0:a.id)!==null&&s!==void 0?s:null;return[u,f]}function UD({committedValuesRef:e,eagerValuesRef:t,groupId:n,layout:r,panelDataArray:o,panelGroupElement:i,setLayout:s}){Pt({didWarnAboutMissingResizeHandle:!1}),Ro(()=>{if(!i)return;const a=Xa(n,i);for(let l=0;l<o.length-1;l++){const{valueMax:c,valueMin:d,valueNow:u}=HD({layout:r,panelsArray:o,pivotIndices:[l,l+1]}),f=a[l];if(f!=null){const p=o[l];be(p,`No panel data found for index "${l}"`),f.setAttribute("aria-controls",p.id),f.setAttribute("aria-valuemax",""+Math.round(c)),f.setAttribute("aria-valuemin",""+Math.round(d)),f.setAttribute("aria-valuenow",u!=null?""+Math.round(u):"")}}return()=>{a.forEach((l,c)=>{l.removeAttribute("aria-controls"),l.removeAttribute("aria-valuemax"),l.removeAttribute("aria-valuemin"),l.removeAttribute("aria-valuenow")})}},[n,r,o,i]),Io(()=>{if(!i)return;const a=t.current;be(a,"Eager values not found");const{panelDataArray:l}=a,c=Xb(n,i);be(c!=null,`No group found for id "${n}"`);const d=Xa(n,i);be(d,`No resize handles found for group id "${n}"`);const u=d.map(f=>{const p=f.getAttribute("data-panel-resize-handle-id");be(p,"Resize handle element has no handle id attribute");const[y,v]=BD(n,p,l,i);if(y==null||v==null)return()=>{};const _=m=>{if(!m.defaultPrevented)switch(m.key){case"Enter":{m.preventDefault();const g=l.findIndex(w=>w.id===y);if(g>=0){const w=l[g];be(w,`No panel data found for index ${g}`);const S=r[g],{collapsedSize:C=0,collapsible:N,minSize:E=0}=w.constraints;if(S!=null&&N){const P=Bs({delta:Ft(S,C)?E-C:C-S,initialLayout:r,panelConstraints:l.map(O=>O.constraints),pivotIndices:Kb(n,p,i),prevLayout:r,trigger:"keyboard"});r!==P&&s(P)}}break}}};return f.addEventListener("keydown",_),()=>{f.removeEventListener("keydown",_)}});return()=>{u.forEach(f=>f())}},[i,e,t,n,r,o,s])}function Ly(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function qb(e,t){const n=e==="horizontal",{x:r,y:o}=Ed(t);return n?r:o}function WD(e,t,n,r,o){const i=n==="horizontal",s=Nd(t,o);be(s,`No resize handle element found for id "${t}"`);const a=s.getAttribute("data-panel-group-id");be(a,"Resize handle element has no group id attribute");let{initialCursorPosition:l}=r;const c=qb(n,e),d=Xb(a,o);be(d,`No group element found for id "${a}"`);const u=d.getBoundingClientRect(),f=i?u.width:u.height;return(c-l)/f*100}function ZD(e,t,n,r,o,i){if(Fb(e)){const s=n==="horizontal";let a=0;e.shiftKey?a=100:o!=null?a=o:a=10;let l=0;switch(e.key){case"ArrowDown":l=s?0:a;break;case"ArrowLeft":l=s?-a:0;break;case"ArrowRight":l=s?a:0;break;case"ArrowUp":l=s?0:-a;break;case"End":l=100;break;case"Home":l=-100;break}return l}else return r==null?0:WD(e,t,n,r,i)}function GD({panelDataArray:e}){const t=Array(e.length),n=e.map(i=>i.constraints);let r=0,o=100;for(let i=0;i<e.length;i++){const s=n[i];be(s,`Panel constraints not found for index ${i}`);const{defaultSize:a}=s;a!=null&&(r++,t[i]=a,o-=a)}for(let i=0;i<e.length;i++){const s=n[i];be(s,`Panel constraints not found for index ${i}`);const{defaultSize:a}=s;if(a!=null)continue;const l=e.length-r,c=o/l;r++,t[i]=c,o-=c}return t}function ii(e,t,n){t.forEach((r,o)=>{const i=e[o];be(i,`Panel data not found for index ${o}`);const{callbacks:s,constraints:a,id:l}=i,{collapsedSize:c=0,collapsible:d}=a,u=n[l];if(u==null||r!==u){n[l]=r;const{onCollapse:f,onExpand:p,onResize:y}=s;y&&y(r,u),d&&(f||p)&&(p&&(u==null||nr(u,c))&&!nr(r,c)&&p(),f&&(u==null||!nr(u,c))&&nr(r,c)&&f())}})}function Xl(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function YD({defaultSize:e,dragState:t,layout:n,panelData:r,panelIndex:o,precision:i=3}){const s=n[o];let a;return s==null?a=e!=null?e.toPrecision(i):"1":r.length===1?a="1":a=s.toPrecision(i),{flexBasis:0,flexGrow:a,flexShrink:1,overflow:"hidden",pointerEvents:t!==null?"none":void 0}}function KD(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function zy(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}function Qb(e){return`react-resizable-panels:${e}`}function Jb(e){return e.map(t=>{const{constraints:n,id:r,idIsFromProps:o,order:i}=t;return o?r:i?`${i}:${JSON.stringify(n)}`:JSON.stringify(n)}).sort((t,n)=>t.localeCompare(n)).join(",")}function eC(e,t){try{const n=Qb(e),r=t.getItem(n);if(r){const o=JSON.parse(r);if(typeof o=="object"&&o!=null)return o}}catch{}return null}function XD(e,t,n){var r,o;const i=(r=eC(e,n))!==null&&r!==void 0?r:{},s=Jb(t);return(o=i[s])!==null&&o!==void 0?o:null}function qD(e,t,n,r,o){var i;const s=Qb(e),a=Jb(t),l=(i=eC(e,o))!==null&&i!==void 0?i:{};l[a]={expandToSizes:Object.fromEntries(n.entries()),layout:r};try{o.setItem(s,JSON.stringify(l))}catch(c){console.error(c)}}function $y({layout:e,panelConstraints:t}){const n=[...e],r=n.reduce((i,s)=>i+s,0);if(n.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${n.map(i=>`${i}%`).join(", ")}`);if(!Ft(r,100)&&n.length>0)for(let i=0;i<t.length;i++){const s=n[i];be(s!=null,`No layout data found for index ${i}`);const a=100/r*s;n[i]=a}let o=0;for(let i=0;i<t.length;i++){const s=n[i];be(s!=null,`No layout data found for index ${i}`);const a=Ci({panelConstraints:t,panelIndex:i,size:s});s!=a&&(o+=s-a,n[i]=a)}if(!Ft(o,0))for(let i=0;i<t.length;i++){const s=n[i];be(s!=null,`No layout data found for index ${i}`);const a=s+o,l=Ci({panelConstraints:t,panelIndex:i,size:a});if(s!==l&&(o-=l-s,n[i]=l,Ft(o,0)))break}return n}const QD=100,Us={getItem:e=>(zy(Us),Us.getItem(e)),setItem:(e,t)=>{zy(Us),Us.setItem(e,t)}},Fy={};function tC({autoSaveId:e=null,children:t,className:n="",direction:r,forwardedRef:o,id:i=null,onLayout:s=null,keyboardResizeBy:a=null,storage:l=Us,style:c,tagName:d="div",...u}){const f=ug(i),p=Pt(null),[y,v]=Li(null),[_,m]=Li([]),g=FD(),w=Pt({}),S=Pt(new Map),C=Pt(0),N=Pt({autoSaveId:e,direction:r,dragState:y,id:f,keyboardResizeBy:a,onLayout:s,storage:l}),E=Pt({layout:_,panelDataArray:[],panelDataArrayChanged:!1});Pt({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),Lb(o,()=>({getId:()=>N.current.id,getLayout:()=>{const{layout:H}=E.current;return H},setLayout:H=>{const{onLayout:Z}=N.current,{layout:K,panelDataArray:G}=E.current,V=$y({layout:H,panelConstraints:G.map(B=>B.constraints)});Ly(K,V)||(m(V),E.current.layout=V,Z&&Z(V),ii(G,V,w.current))}}),[]),Ro(()=>{N.current.autoSaveId=e,N.current.direction=r,N.current.dragState=y,N.current.id=f,N.current.onLayout=s,N.current.storage=l}),UD({committedValuesRef:N,eagerValuesRef:E,groupId:f,layout:_,panelDataArray:E.current.panelDataArray,setLayout:m,panelGroupElement:p.current}),Io(()=>{const{panelDataArray:H}=E.current;if(e){if(_.length===0||_.length!==H.length)return;let Z=Fy[e];Z==null&&(Z=KD(qD,QD),Fy[e]=Z);const K=[...H],G=new Map(S.current);Z(e,K,G,_,l)}},[e,_,l]),Io(()=>{});const P=kt(H=>{const{onLayout:Z}=N.current,{layout:K,panelDataArray:G}=E.current;if(H.constraints.collapsible){const V=G.map(oe=>oe.constraints),{collapsedSize:B=0,panelSize:ee,pivotIndices:ne}=mo(G,H,K);if(be(ee!=null,`Panel size not found for panel "${H.id}"`),!nr(ee,B)){S.current.set(H.id,ee);const X=li(G,H)===G.length-1?ee-B:B-ee,ae=Bs({delta:X,initialLayout:K,panelConstraints:V,pivotIndices:ne,prevLayout:K,trigger:"imperative-api"});Xl(K,ae)||(m(ae),E.current.layout=ae,Z&&Z(ae),ii(G,ae,w.current))}}},[]),O=kt((H,Z)=>{const{onLayout:K}=N.current,{layout:G,panelDataArray:V}=E.current;if(H.constraints.collapsible){const B=V.map(me=>me.constraints),{collapsedSize:ee=0,panelSize:ne=0,minSize:oe=0,pivotIndices:X}=mo(V,H,G),ae=Z??oe;if(nr(ne,ee)){const me=S.current.get(H.id),Le=me!=null&&me>=ae?me:ae,Et=li(V,H)===V.length-1?ne-Le:Le-ne,R=Bs({delta:Et,initialLayout:G,panelConstraints:B,pivotIndices:X,prevLayout:G,trigger:"imperative-api"});Xl(G,R)||(m(R),E.current.layout=R,K&&K(R),ii(V,R,w.current))}}},[]),j=kt(H=>{const{layout:Z,panelDataArray:K}=E.current,{panelSize:G}=mo(K,H,Z);return be(G!=null,`Panel size not found for panel "${H.id}"`),G},[]),$=kt((H,Z)=>{const{panelDataArray:K}=E.current,G=li(K,H);return YD({defaultSize:Z,dragState:y,layout:_,panelData:K,panelIndex:G})},[y,_]),A=kt(H=>{const{layout:Z,panelDataArray:K}=E.current,{collapsedSize:G=0,collapsible:V,panelSize:B}=mo(K,H,Z);return be(B!=null,`Panel size not found for panel "${H.id}"`),V===!0&&nr(B,G)},[]),L=kt(H=>{const{layout:Z,panelDataArray:K}=E.current,{collapsedSize:G=0,collapsible:V,panelSize:B}=mo(K,H,Z);return be(B!=null,`Panel size not found for panel "${H.id}"`),!V||Bo(B,G)>0},[]),b=kt(H=>{const{panelDataArray:Z}=E.current;Z.push(H),Z.sort((K,G)=>{const V=K.order,B=G.order;return V==null&&B==null?0:V==null?-1:B==null?1:V-B}),E.current.panelDataArrayChanged=!0,g()},[g]);Ro(()=>{if(E.current.panelDataArrayChanged){E.current.panelDataArrayChanged=!1;const{autoSaveId:H,onLayout:Z,storage:K}=N.current,{layout:G,panelDataArray:V}=E.current;let B=null;if(H){const ne=XD(H,V,K);ne&&(S.current=new Map(Object.entries(ne.expandToSizes)),B=ne.layout)}B==null&&(B=GD({panelDataArray:V}));const ee=$y({layout:B,panelConstraints:V.map(ne=>ne.constraints)});Ly(G,ee)||(m(ee),E.current.layout=ee,Z&&Z(ee),ii(V,ee,w.current))}}),Ro(()=>{const H=E.current;return()=>{H.layout=[]}},[]);const M=kt(H=>{let Z=!1;const K=p.current;return K&&window.getComputedStyle(K,null).getPropertyValue("direction")==="rtl"&&(Z=!0),function(V){V.preventDefault();const B=p.current;if(!B)return()=>null;const{direction:ee,dragState:ne,id:oe,keyboardResizeBy:X,onLayout:ae}=N.current,{layout:me,panelDataArray:Le}=E.current,{initialLayout:qe}=ne??{},Et=Kb(oe,H,B);let R=ZD(V,H,ee,ne,X,B);const F=ee==="horizontal";F&&Z&&(R=-R);const W=Le.map(q=>q.constraints),ie=Bs({delta:R,initialLayout:qe??me,panelConstraints:W,pivotIndices:Et,prevLayout:me,trigger:Fb(V)?"keyboard":"mouse-or-touch"}),te=!Xl(me,ie);(Vb(V)||Hb(V))&&C.current!=R&&(C.current=R,!te&&R!==0?F?Of(H,R<0?Ub:Wb):Of(H,R<0?Zb:Gb):Of(H,0)),te&&(m(ie),E.current.layout=ie,ae&&ae(ie),ii(Le,ie,w.current))}},[]),T=kt((H,Z)=>{const{onLayout:K}=N.current,{layout:G,panelDataArray:V}=E.current,B=V.map(me=>me.constraints),{panelSize:ee,pivotIndices:ne}=mo(V,H,G);be(ee!=null,`Panel size not found for panel "${H.id}"`);const X=li(V,H)===V.length-1?ee-Z:Z-ee,ae=Bs({delta:X,initialLayout:G,panelConstraints:B,pivotIndices:ne,prevLayout:G,trigger:"imperative-api"});Xl(G,ae)||(m(ae),E.current.layout=ae,K&&K(ae),ii(V,ae,w.current))},[]),D=kt((H,Z)=>{const{layout:K,panelDataArray:G}=E.current,{collapsedSize:V=0,collapsible:B}=Z,{collapsedSize:ee=0,collapsible:ne,maxSize:oe=100,minSize:X=0}=H.constraints,{panelSize:ae}=mo(G,H,K);ae!=null&&(B&&ne&&nr(ae,V)?nr(V,ee)||T(H,ee):ae<X?T(H,X):ae>oe&&T(H,oe))},[T]),k=kt((H,Z)=>{const{direction:K}=N.current,{layout:G}=E.current;if(!p.current)return;const V=Nd(H,p.current);be(V,`Drag handle element not found for id "${H}"`);const B=qb(K,Z);v({dragHandleId:H,dragHandleRect:V.getBoundingClientRect(),initialCursorPosition:B,initialLayout:G})},[]),I=kt(()=>{v(null)},[]),z=kt(H=>{const{panelDataArray:Z}=E.current,K=li(Z,H);K>=0&&(Z.splice(K,1),delete w.current[H.id],E.current.panelDataArrayChanged=!0,g())},[g]),U=kD(()=>({collapsePanel:P,direction:r,dragState:y,expandPanel:O,getPanelSize:j,getPanelStyle:$,groupId:f,isPanelCollapsed:A,isPanelExpanded:L,reevaluatePanelConstraints:D,registerPanel:b,registerResizeHandle:M,resizePanel:T,startDragging:k,stopDragging:I,unregisterPanel:z,panelGroupElement:p.current}),[P,y,r,O,j,$,f,A,L,D,b,M,T,k,I,z]),Y={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return as(Cd.Provider,{value:U},as(d,{...u,children:t,className:n,id:i,ref:p,style:{...Y,...c},"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":f}))}const nC=Ob((e,t)=>as(tC,{...e,forwardedRef:t}));tC.displayName="PanelGroup";nC.displayName="forwardRef(PanelGroup)";function li(e,t){return e.findIndex(n=>n===t||n.id===t.id)}function mo(e,t,n){const r=li(e,t),i=r===e.length-1?[r-1,r]:[r,r+1],s=n[r];return{...t.constraints,panelSize:s,pivotIndices:i}}function JD({disabled:e,handleId:t,resizeHandler:n,panelGroupElement:r}){Io(()=>{if(e||n==null||r==null)return;const o=Nd(t,r);if(o==null)return;const i=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const a=o.getAttribute("data-panel-group-id");be(a,`No group element found for id "${a}"`);const l=Xa(a,r),c=Yb(a,t,r);be(c!==null,`No resize element found for id "${t}"`);const d=s.shiftKey?c>0?c-1:l.length-1:c+1<l.length?c+1:0;l[d].focus();break}}};return o.addEventListener("keydown",i),()=>{o.removeEventListener("keydown",i)}},[r,e,t,n])}function rC({children:e=null,className:t="",disabled:n=!1,hitAreaMargins:r,id:o,onBlur:i,onDragging:s,onFocus:a,style:l={},tabIndex:c=0,tagName:d="div",...u}){var f,p;const y=Pt(null),v=Pt({onDragging:s});Io(()=>{v.current.onDragging=s});const _=Db(Cd);if(_===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{direction:m,groupId:g,registerResizeHandle:w,startDragging:S,stopDragging:C,panelGroupElement:N}=_,E=ug(o),[P,O]=Li("inactive"),[j,$]=Li(!1),[A,L]=Li(null),b=Pt({state:P});Ro(()=>{b.current.state=P}),Io(()=>{if(n)L(null);else{const k=w(E);L(()=>k)}},[n,E,w]);const M=(f=r==null?void 0:r.coarse)!==null&&f!==void 0?f:15,T=(p=r==null?void 0:r.fine)!==null&&p!==void 0?p:5;return Io(()=>{if(n||A==null)return;const k=y.current;return be(k,"Element ref not attached"),$D(E,k,m,{coarse:M,fine:T},(z,U,Y)=>{if(U)switch(z){case"down":{O("drag"),be(Y,'Expected event to be defined for "down" action'),S(E,Y);const{onDragging:H}=v.current;H&&H(!0);break}case"move":{const{state:H}=b.current;H!=="drag"&&O("hover"),be(Y,'Expected event to be defined for "move" action'),A(Y);break}case"up":{O("hover"),C();const{onDragging:H}=v.current;H&&H(!1);break}}else O("inactive")})},[M,m,n,T,w,E,A,S,C]),JD({disabled:n,handleId:E,resizeHandler:A,panelGroupElement:N}),as(d,{...u,children:e,className:t,id:o,onBlur:()=>{$(!1),i==null||i()},onFocus:()=>{$(!0),a==null||a()},ref:y,role:"separator",style:{...{touchAction:"none",userSelect:"none"},...l},tabIndex:c,"data-panel-group-direction":m,"data-panel-group-id":g,"data-resize-handle":"","data-resize-handle-active":P==="drag"?"pointer":j?"keyboard":void 0,"data-resize-handle-state":P,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":E})}rC.displayName="PanelResizeHandle";const Df=({className:e,...t})=>h.jsx(nC,{className:we("flex h-full w-full data-[panel-group-direction=vertical]:flex-col",e),...t}),si=$b,Lf=({withHandle:e,className:t,...n})=>h.jsx(rC,{className:we("relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",t),...n,children:e&&h.jsx("div",{className:"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border",children:h.jsx(v6,{className:"h-2.5 w-2.5"})})}),eL=td("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function oC({className:e,variant:t,...n}){return h.jsx("div",{className:we(eL({variant:t}),e),...n})}function tL(e,t=[]){let n=[];function r(i,s){const a=x.createContext(s),l=n.length;n=[...n,s];function c(u){const{scope:f,children:p,...y}=u,v=(f==null?void 0:f[e][l])||a,_=x.useMemo(()=>y,Object.values(y));return h.jsx(v.Provider,{value:_,children:p})}function d(u,f){const p=(f==null?void 0:f[e][l])||a,y=x.useContext(p);if(y)return y;if(s!==void 0)return s;throw new Error(`\`${u}\` must be used within \`${i}\``)}return c.displayName=i+"Provider",[c,d]}const o=()=>{const i=n.map(s=>x.createContext(s));return function(a){const l=(a==null?void 0:a[e])||i;return x.useMemo(()=>({[`__scope${e}`]:{...a,[e]:l}}),[a,l])}};return o.scopeName=e,[r,nL(o,...t)]}function nL(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:l,scopeName:c})=>{const u=l(i)[`__scope${c}`];return{...a,...u}},{});return x.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}var zf="rovingFocusGroup.onEntryFocus",rL={bubbles:!1,cancelable:!0},Td="RovingFocusGroup",[vh,iC,oL]=nd(Td),[iL,sC]=tL(Td,[oL]),[sL,aL]=iL(Td),aC=x.forwardRef((e,t)=>h.jsx(vh.Provider,{scope:e.__scopeRovingFocusGroup,children:h.jsx(vh.Slot,{scope:e.__scopeRovingFocusGroup,children:h.jsx(lL,{...e,ref:t})})}));aC.displayName=Td;var lL=x.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:o=!1,dir:i,currentTabStopId:s,defaultCurrentTabStopId:a,onCurrentTabStopIdChange:l,onEntryFocus:c,preventScrollOnEntryFocus:d=!1,...u}=e,f=x.useRef(null),p=Ae(t,f),y=rd(i),[v=null,_]=Hn({prop:s,defaultProp:a,onChange:l}),[m,g]=x.useState(!1),w=Dt(c),S=iC(n),C=x.useRef(!1),[N,E]=x.useState(0);return x.useEffect(()=>{const P=f.current;if(P)return P.addEventListener(zf,w),()=>P.removeEventListener(zf,w)},[w]),h.jsx(sL,{scope:n,orientation:r,dir:y,loop:o,currentTabStopId:v,onItemFocus:x.useCallback(P=>_(P),[_]),onItemShiftTab:x.useCallback(()=>g(!0),[]),onFocusableItemAdd:x.useCallback(()=>E(P=>P+1),[]),onFocusableItemRemove:x.useCallback(()=>E(P=>P-1),[]),children:h.jsx(xe.div,{tabIndex:m||N===0?-1:0,"data-orientation":r,...u,ref:p,style:{outline:"none",...e.style},onMouseDown:he(e.onMouseDown,()=>{C.current=!0}),onFocus:he(e.onFocus,P=>{const O=!C.current;if(P.target===P.currentTarget&&O&&!m){const j=new CustomEvent(zf,rL);if(P.currentTarget.dispatchEvent(j),!j.defaultPrevented){const $=S().filter(T=>T.focusable),A=$.find(T=>T.active),L=$.find(T=>T.id===v),M=[A,L,...$].filter(Boolean).map(T=>T.ref.current);uC(M,d)}}C.current=!1}),onBlur:he(e.onBlur,()=>g(!1))})})}),lC="RovingFocusGroupItem",cC=x.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:o=!1,tabStopId:i,...s}=e,a=xn(),l=i||a,c=aL(lC,n),d=c.currentTabStopId===l,u=iC(n),{onFocusableItemAdd:f,onFocusableItemRemove:p}=c;return x.useEffect(()=>{if(r)return f(),()=>p()},[r,f,p]),h.jsx(vh.ItemSlot,{scope:n,id:l,focusable:r,active:o,children:h.jsx(xe.span,{tabIndex:d?0:-1,"data-orientation":c.orientation,...s,ref:t,onMouseDown:he(e.onMouseDown,y=>{r?c.onItemFocus(l):y.preventDefault()}),onFocus:he(e.onFocus,()=>c.onItemFocus(l)),onKeyDown:he(e.onKeyDown,y=>{if(y.key==="Tab"&&y.shiftKey){c.onItemShiftTab();return}if(y.target!==y.currentTarget)return;const v=dL(y,c.orientation,c.dir);if(v!==void 0){if(y.metaKey||y.ctrlKey||y.altKey||y.shiftKey)return;y.preventDefault();let m=u().filter(g=>g.focusable).map(g=>g.ref.current);if(v==="last")m.reverse();else if(v==="prev"||v==="next"){v==="prev"&&m.reverse();const g=m.indexOf(y.currentTarget);m=c.loop?fL(m,g+1):m.slice(g+1)}setTimeout(()=>uC(m))}})})})});cC.displayName=lC;var cL={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function uL(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function dL(e,t,n){const r=uL(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return cL[r]}function uC(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function fL(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var pL=aC,hL=cC,hg="Tabs",[mL,vz]=Xo(hg,[sC]),dC=sC(),[gL,mg]=mL(hg),fC=x.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:o,defaultValue:i,orientation:s="horizontal",dir:a,activationMode:l="automatic",...c}=e,d=rd(a),[u,f]=Hn({prop:r,onChange:o,defaultProp:i});return h.jsx(gL,{scope:n,baseId:xn(),value:u,onValueChange:f,orientation:s,dir:d,activationMode:l,children:h.jsx(xe.div,{dir:d,"data-orientation":s,...c,ref:t})})});fC.displayName=hg;var pC="TabsList",hC=x.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...o}=e,i=mg(pC,n),s=dC(n);return h.jsx(pL,{asChild:!0,...s,orientation:i.orientation,dir:i.dir,loop:r,children:h.jsx(xe.div,{role:"tablist","aria-orientation":i.orientation,...o,ref:t})})});hC.displayName=pC;var mC="TabsTrigger",gC=x.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:o=!1,...i}=e,s=mg(mC,n),a=dC(n),l=xC(s.baseId,r),c=wC(s.baseId,r),d=r===s.value;return h.jsx(hL,{asChild:!0,...a,focusable:!o,active:d,children:h.jsx(xe.button,{type:"button",role:"tab","aria-selected":d,"aria-controls":c,"data-state":d?"active":"inactive","data-disabled":o?"":void 0,disabled:o,id:l,...i,ref:t,onMouseDown:he(e.onMouseDown,u=>{!o&&u.button===0&&u.ctrlKey===!1?s.onValueChange(r):u.preventDefault()}),onKeyDown:he(e.onKeyDown,u=>{[" ","Enter"].includes(u.key)&&s.onValueChange(r)}),onFocus:he(e.onFocus,()=>{const u=s.activationMode!=="manual";!d&&!o&&u&&s.onValueChange(r)})})})});gC.displayName=mC;var vC="TabsContent",yC=x.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:o,children:i,...s}=e,a=mg(vC,n),l=xC(a.baseId,r),c=wC(a.baseId,r),d=r===a.value,u=x.useRef(d);return x.useEffect(()=>{const f=requestAnimationFrame(()=>u.current=!1);return()=>cancelAnimationFrame(f)},[]),h.jsx(kr,{present:o||d,children:({present:f})=>h.jsx(xe.div,{"data-state":d?"active":"inactive","data-orientation":a.orientation,role:"tabpanel","aria-labelledby":l,hidden:!f,id:c,tabIndex:0,...s,ref:t,style:{...e.style,animationDuration:u.current?"0s":void 0},children:f&&i})})});yC.displayName=vC;function xC(e,t){return`${e}-trigger-${t}`}function wC(e,t){return`${e}-content-${t}`}var vL=fC,_C=hC,SC=gC,bC=yC;const CC=vL,gg=x.forwardRef(({className:e,...t},n)=>h.jsx(_C,{ref:n,className:we("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",e),...t}));gg.displayName=_C.displayName;const $i=x.forwardRef(({className:e,...t},n)=>h.jsx(SC,{ref:n,className:we("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",e),...t}));$i.displayName=SC.displayName;const Fi=x.forwardRef(({className:e,...t},n)=>h.jsx(bC,{ref:n,className:we("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Fi.displayName=bC.displayName;const EC=x.forwardRef(({className:e,...t},n)=>h.jsx("div",{className:"relative w-full overflow-auto",children:h.jsx("table",{ref:n,className:we("w-full caption-top text-sm",e),...t})}));EC.displayName="Table";const kC=x.forwardRef(({className:e,...t},n)=>h.jsx("thead",{ref:n,className:we("[&_tr]:border-b",e),...t}));kC.displayName="TableHeader";const NC=x.forwardRef(({className:e,...t},n)=>h.jsx("tbody",{ref:n,className:we("[&_tr:last-child]:border-0",e),...t}));NC.displayName="TableBody";const yL=x.forwardRef(({className:e,...t},n)=>h.jsx("tfoot",{ref:n,className:we("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));yL.displayName="TableFooter";const yh=x.forwardRef(({className:e,...t},n)=>h.jsx("tr",{ref:n,className:we("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",e),...t}));yh.displayName="TableRow";const wc=x.forwardRef(({className:e,...t},n)=>h.jsx("th",{ref:n,className:we("h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));wc.displayName="TableHead";const _c=x.forwardRef(({className:e,...t},n)=>h.jsx("td",{ref:n,className:we("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));_c.displayName="TableCell";const TC=x.forwardRef(({className:e,...t},n)=>h.jsx("caption",{ref:n,className:we("mt-4 text-sm text-muted-foreground",e),...t}));TC.displayName="TableCaption";function xL(e){const t=new Map(e.map(n=>[n.id,n]));return e.filter(n=>n.type==="gateway-https").map(n=>{if(console.log(n.data),!n.data||!n.data.network||!n.data.subdomain||!n.data.https||!n.data.https.serviceId||!n.data.https.portId)return null;console.log("1231");const r=t.get(n.data.https.serviceId),o=r.data.ports.find(i=>i.id===n.data.https.portId);return console.log({svc:r,port:o}),{id:`${n.id} - ${o.id}`,service:r,port:o,endpoint:`https://${n.data.subdomain}.${n.data.network}`}}).filter(n=>n!=null)}function wL(){const e=Ko(),t=x.useMemo(()=>xL(e),[e]);return h.jsx(h.Fragment,{children:h.jsxs(EC,{children:[h.jsx(TC,{children:"HTTPS Gateways"}),h.jsx(kC,{children:h.jsxs(yh,{children:[h.jsx(wc,{children:"Service"}),h.jsx(wc,{children:"Port"}),h.jsx(wc,{children:"Endpoint"})]})}),h.jsx(NC,{children:t.map(n=>h.jsxs(yh,{children:[h.jsx(_c,{children:Lt(n.service)}),h.jsx(_c,{children:n.port.name}),h.jsx(_c,{children:h.jsx("a",{href:n.endpoint,target:"_blank",children:n.endpoint})})]}))})]})})}function _L(){const e=zt(),t=Ko(),[n,r]=x.useState();x.useEffect(()=>{r(new Map(t.map(d=>[d.id,d])))},[t,r]);const o=x.useCallback(d=>()=>{d&&d(e)},[e]),i=cd(),[s,a]=x.useState(new Map);x.useEffect(()=>{const d=new Map;i.forEach(u=>{const f=u.nodeId||"global",p=d.get(f)||[];p.push(u),d.set(f,p)}),a(d)},[i,a]);const[l,c]=x.useState([...s.keys()]);return x.useEffect(()=>{c([...s.keys()])},[s,c]),h.jsx(Fm,{type:"multiple",value:l,onValueChange:d=>c(d),children:[...s.entries()].map(([d,u])=>h.jsxs(x_,{value:d,children:[h.jsxs(ad,{className:"flex flex-row-reverse !space-x-4 !justify-end",children:[h.jsx(oC,{children:u.length}),h.jsx("div",{children:d==="global"?"Global":Lt(n==null?void 0:n.get(d))})]}),h.jsx(Vm,{children:h.jsx("div",{className:"flex flex-col space-y-1",children:u.map(f=>h.jsx(Ln,{variant:"ghost",style:{justifyContent:"flex-start"},onMouseOver:o(f.onHighlight),onMouseLeave:o(f.onLooseHighlight),onClick:o(f.onClick),children:f.message},f.id))})})]},d))})}function SL(){const e=cd(),t=ll();return h.jsxs(CC,{defaultValue:"messages",className:"w-[400px] px-5 w-full h-full",children:[h.jsxs(gg,{children:[h.jsxs($i,{value:"messages",className:"space-x-2",children:[h.jsx("div",{children:"Messages"}),h.jsx(oC,{children:e.length})]}),h.jsx($i,{value:"deployment",children:"Deployment"}),h.jsx($i,{value:"deployKeys",children:"Deploy keys"})]}),h.jsx(Fi,{value:"messages",children:h.jsx(_L,{})}),h.jsx(Fi,{value:"deployment",children:h.jsx(wL,{})}),h.jsx(Fi,{value:"deployKeys",children:t&&h.jsx(h.Fragment,{children:t.deployKey})})]})}function bL(){return h.jsxs(Df,{direction:"horizontal",style:{width:"100vw",height:"calc(100vh - 100px)"},children:[h.jsx(si,{defaultSize:80,children:h.jsxs(Df,{direction:"vertical",children:[h.jsx(si,{defaultSize:80,children:h.jsxs(Df,{direction:"horizontal",children:[h.jsx(si,{defaultSize:15,children:h.jsx(tj,{})}),h.jsx(Lf,{withHandle:!0}),h.jsx(si,{defaultSize:85,children:h.jsx(wD,{})})]})}),h.jsx(Lf,{withHandle:!0}),h.jsx(si,{defaultSize:20,children:h.jsx(SL,{})})]})}),h.jsx(Lf,{withHandle:!0}),h.jsx(si,{defaultSize:20,children:h.jsx(bD,{})})]})}function CL(){const e=ll(),[t,n]=x.useState([]),r=Ko();x.useEffect(()=>{console.log(r),r&&r.length>0&&n(r)},[r,n]);const o=x.useMemo(()=>w_(t,e),[t,e]),i=x.useMemo(()=>JSON.stringify(o,void 0,4),[o]);return h.jsx("div",{className:"px-5",children:h.jsx("pre",{children:i})})}var vg="ToastProvider",[yg,EL,kL]=nd("Toast"),[PC,yz]=Xo("Toast",[kL]),[NL,Pd]=PC(vg),IC=e=>{const{__scopeToast:t,label:n="Notification",duration:r=5e3,swipeDirection:o="right",swipeThreshold:i=50,children:s}=e,[a,l]=x.useState(null),[c,d]=x.useState(0),u=x.useRef(!1),f=x.useRef(!1);return n.trim()||console.error(`Invalid prop \`label\` supplied to \`${vg}\`. Expected non-empty \`string\`.`),h.jsx(yg.Provider,{scope:t,children:h.jsx(NL,{scope:t,label:n,duration:r,swipeDirection:o,swipeThreshold:i,toastCount:c,viewport:a,onViewportChange:l,onToastAdd:x.useCallback(()=>d(p=>p+1),[]),onToastRemove:x.useCallback(()=>d(p=>p-1),[]),isFocusedToastEscapeKeyDownRef:u,isClosePausedRef:f,children:s})})};IC.displayName=vg;var RC="ToastViewport",TL=["F8"],xh="toast.viewportPause",wh="toast.viewportResume",AC=x.forwardRef((e,t)=>{const{__scopeToast:n,hotkey:r=TL,label:o="Notifications ({hotkey})",...i}=e,s=Pd(RC,n),a=EL(n),l=x.useRef(null),c=x.useRef(null),d=x.useRef(null),u=x.useRef(null),f=Ae(t,u,s.onViewportChange),p=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),y=s.toastCount>0;x.useEffect(()=>{const _=m=>{var w;r.length!==0&&r.every(S=>m[S]||m.code===S)&&((w=u.current)==null||w.focus())};return document.addEventListener("keydown",_),()=>document.removeEventListener("keydown",_)},[r]),x.useEffect(()=>{const _=l.current,m=u.current;if(y&&_&&m){const g=()=>{if(!s.isClosePausedRef.current){const N=new CustomEvent(xh);m.dispatchEvent(N),s.isClosePausedRef.current=!0}},w=()=>{if(s.isClosePausedRef.current){const N=new CustomEvent(wh);m.dispatchEvent(N),s.isClosePausedRef.current=!1}},S=N=>{!_.contains(N.relatedTarget)&&w()},C=()=>{_.contains(document.activeElement)||w()};return _.addEventListener("focusin",g),_.addEventListener("focusout",S),_.addEventListener("pointermove",g),_.addEventListener("pointerleave",C),window.addEventListener("blur",g),window.addEventListener("focus",w),()=>{_.removeEventListener("focusin",g),_.removeEventListener("focusout",S),_.removeEventListener("pointermove",g),_.removeEventListener("pointerleave",C),window.removeEventListener("blur",g),window.removeEventListener("focus",w)}}},[y,s.isClosePausedRef]);const v=x.useCallback(({tabbingDirection:_})=>{const g=a().map(w=>{const S=w.ref.current,C=[S,...VL(S)];return _==="forwards"?C:C.reverse()});return(_==="forwards"?g.reverse():g).flat()},[a]);return x.useEffect(()=>{const _=u.current;if(_){const m=g=>{var C,N,E;const w=g.altKey||g.ctrlKey||g.metaKey;if(g.key==="Tab"&&!w){const P=document.activeElement,O=g.shiftKey;if(g.target===_&&O){(C=c.current)==null||C.focus();return}const A=v({tabbingDirection:O?"backwards":"forwards"}),L=A.findIndex(b=>b===P);$f(A.slice(L+1))?g.preventDefault():O?(N=c.current)==null||N.focus():(E=d.current)==null||E.focus()}};return _.addEventListener("keydown",m),()=>_.removeEventListener("keydown",m)}},[a,v]),h.jsxs(zj,{ref:l,role:"region","aria-label":o.replace("{hotkey}",p),tabIndex:-1,style:{pointerEvents:y?void 0:"none"},children:[y&&h.jsx(_h,{ref:c,onFocusFromOutsideViewport:()=>{const _=v({tabbingDirection:"forwards"});$f(_)}}),h.jsx(yg.Slot,{scope:n,children:h.jsx(xe.ol,{tabIndex:-1,...i,ref:f})}),y&&h.jsx(_h,{ref:d,onFocusFromOutsideViewport:()=>{const _=v({tabbingDirection:"backwards"});$f(_)}})]})});AC.displayName=RC;var MC="ToastFocusProxy",_h=x.forwardRef((e,t)=>{const{__scopeToast:n,onFocusFromOutsideViewport:r,...o}=e,i=Pd(MC,n);return h.jsx(pl,{"aria-hidden":!0,tabIndex:0,...o,ref:t,style:{position:"fixed"},onFocus:s=>{var c;const a=s.relatedTarget;!((c=i.viewport)!=null&&c.contains(a))&&r()}})});_h.displayName=MC;var Id="Toast",PL="toast.swipeStart",IL="toast.swipeMove",RL="toast.swipeCancel",AL="toast.swipeEnd",jC=x.forwardRef((e,t)=>{const{forceMount:n,open:r,defaultOpen:o,onOpenChange:i,...s}=e,[a=!0,l]=Hn({prop:r,defaultProp:o,onChange:i});return h.jsx(kr,{present:n||a,children:h.jsx(OL,{open:a,...s,ref:t,onClose:()=>l(!1),onPause:Dt(e.onPause),onResume:Dt(e.onResume),onSwipeStart:he(e.onSwipeStart,c=>{c.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:he(e.onSwipeMove,c=>{const{x:d,y:u}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","move"),c.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${d}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${u}px`)}),onSwipeCancel:he(e.onSwipeCancel,c=>{c.currentTarget.setAttribute("data-swipe","cancel"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:he(e.onSwipeEnd,c=>{const{x:d,y:u}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","end"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${d}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${u}px`),l(!1)})})})});jC.displayName=Id;var[ML,jL]=PC(Id,{onClose(){}}),OL=x.forwardRef((e,t)=>{const{__scopeToast:n,type:r="foreground",duration:o,open:i,onClose:s,onEscapeKeyDown:a,onPause:l,onResume:c,onSwipeStart:d,onSwipeMove:u,onSwipeCancel:f,onSwipeEnd:p,...y}=e,v=Pd(Id,n),[_,m]=x.useState(null),g=Ae(t,b=>m(b)),w=x.useRef(null),S=x.useRef(null),C=o||v.duration,N=x.useRef(0),E=x.useRef(C),P=x.useRef(0),{onToastAdd:O,onToastRemove:j}=v,$=Dt(()=>{var M;(_==null?void 0:_.contains(document.activeElement))&&((M=v.viewport)==null||M.focus()),s()}),A=x.useCallback(b=>{!b||b===1/0||(window.clearTimeout(P.current),N.current=new Date().getTime(),P.current=window.setTimeout($,b))},[$]);x.useEffect(()=>{const b=v.viewport;if(b){const M=()=>{A(E.current),c==null||c()},T=()=>{const D=new Date().getTime()-N.current;E.current=E.current-D,window.clearTimeout(P.current),l==null||l()};return b.addEventListener(xh,T),b.addEventListener(wh,M),()=>{b.removeEventListener(xh,T),b.removeEventListener(wh,M)}}},[v.viewport,C,l,c,A]),x.useEffect(()=>{i&&!v.isClosePausedRef.current&&A(C)},[i,C,v.isClosePausedRef,A]),x.useEffect(()=>(O(),()=>j()),[O,j]);const L=x.useMemo(()=>_?VC(_):null,[_]);return v.viewport?h.jsxs(h.Fragment,{children:[L&&h.jsx(DL,{__scopeToast:n,role:"status","aria-live":r==="foreground"?"assertive":"polite","aria-atomic":!0,children:L}),h.jsx(ML,{scope:n,onClose:$,children:Go.createPortal(h.jsx(yg.ItemSlot,{scope:n,children:h.jsx(Lj,{asChild:!0,onEscapeKeyDown:he(a,()=>{v.isFocusedToastEscapeKeyDownRef.current||$(),v.isFocusedToastEscapeKeyDownRef.current=!1}),children:h.jsx(xe.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":i?"open":"closed","data-swipe-direction":v.swipeDirection,...y,ref:g,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:he(e.onKeyDown,b=>{b.key==="Escape"&&(a==null||a(b.nativeEvent),b.nativeEvent.defaultPrevented||(v.isFocusedToastEscapeKeyDownRef.current=!0,$()))}),onPointerDown:he(e.onPointerDown,b=>{b.button===0&&(w.current={x:b.clientX,y:b.clientY})}),onPointerMove:he(e.onPointerMove,b=>{if(!w.current)return;const M=b.clientX-w.current.x,T=b.clientY-w.current.y,D=!!S.current,k=["left","right"].includes(v.swipeDirection),I=["left","up"].includes(v.swipeDirection)?Math.min:Math.max,z=k?I(0,M):0,U=k?0:I(0,T),Y=b.pointerType==="touch"?10:2,H={x:z,y:U},Z={originalEvent:b,delta:H};D?(S.current=H,ql(IL,u,Z,{discrete:!1})):Vy(H,v.swipeDirection,Y)?(S.current=H,ql(PL,d,Z,{discrete:!1}),b.target.setPointerCapture(b.pointerId)):(Math.abs(M)>Y||Math.abs(T)>Y)&&(w.current=null)}),onPointerUp:he(e.onPointerUp,b=>{const M=S.current,T=b.target;if(T.hasPointerCapture(b.pointerId)&&T.releasePointerCapture(b.pointerId),S.current=null,w.current=null,M){const D=b.currentTarget,k={originalEvent:b,delta:M};Vy(M,v.swipeDirection,v.swipeThreshold)?ql(AL,p,k,{discrete:!0}):ql(RL,f,k,{discrete:!0}),D.addEventListener("click",I=>I.preventDefault(),{once:!0})}})})})}),v.viewport)})]}):null}),DL=e=>{const{__scopeToast:t,children:n,...r}=e,o=Pd(Id,t),[i,s]=x.useState(!1),[a,l]=x.useState(!1);return $L(()=>s(!0)),x.useEffect(()=>{const c=window.setTimeout(()=>l(!0),1e3);return()=>window.clearTimeout(c)},[]),a?null:h.jsx(fl,{asChild:!0,children:h.jsx(pl,{...r,children:i&&h.jsxs(h.Fragment,{children:[o.label," ",n]})})})},LL="ToastTitle",OC=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e;return h.jsx(xe.div,{...r,ref:t})});OC.displayName=LL;var zL="ToastDescription",DC=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e;return h.jsx(xe.div,{...r,ref:t})});DC.displayName=zL;var LC="ToastAction",zC=x.forwardRef((e,t)=>{const{altText:n,...r}=e;return n.trim()?h.jsx(FC,{altText:n,asChild:!0,children:h.jsx(xg,{...r,ref:t})}):(console.error(`Invalid prop \`altText\` supplied to \`${LC}\`. Expected non-empty \`string\`.`),null)});zC.displayName=LC;var $C="ToastClose",xg=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e,o=jL($C,n);return h.jsx(FC,{asChild:!0,children:h.jsx(xe.button,{type:"button",...r,ref:t,onClick:he(e.onClick,o.onClose)})})});xg.displayName=$C;var FC=x.forwardRef((e,t)=>{const{__scopeToast:n,altText:r,...o}=e;return h.jsx(xe.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":r||void 0,...o,ref:t})});function VC(e){const t=[];return Array.from(e.childNodes).forEach(r=>{if(r.nodeType===r.TEXT_NODE&&r.textContent&&t.push(r.textContent),FL(r)){const o=r.ariaHidden||r.hidden||r.style.display==="none",i=r.dataset.radixToastAnnounceExclude==="";if(!o)if(i){const s=r.dataset.radixToastAnnounceAlt;s&&t.push(s)}else t.push(...VC(r))}}),t}function ql(e,t,n,{discrete:r}){const o=n.originalEvent.currentTarget,i=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?e_(o,i):o.dispatchEvent(i)}var Vy=(e,t,n=0)=>{const r=Math.abs(e.x),o=Math.abs(e.y),i=r>o;return t==="left"||t==="right"?i&&r>n:!i&&o>n};function $L(e=()=>{}){const t=Dt(e);pt(()=>{let n=0,r=0;return n=window.requestAnimationFrame(()=>r=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(n),window.cancelAnimationFrame(r)}},[t])}function FL(e){return e.nodeType===e.ELEMENT_NODE}function VL(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function $f(e){const t=document.activeElement;return e.some(n=>n===t?!0:(n.focus(),document.activeElement!==t))}var HL=IC,HC=AC,BC=jC,UC=OC,WC=DC,ZC=zC,GC=xg;const BL=HL,YC=x.forwardRef(({className:e,...t},n)=>h.jsx(HC,{ref:n,className:we("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",e),...t}));YC.displayName=HC.displayName;const UL=td("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),KC=x.forwardRef(({className:e,variant:t,...n},r)=>h.jsx(BC,{ref:r,className:we(UL({variant:t}),e),...n}));KC.displayName=BC.displayName;const WL=x.forwardRef(({className:e,...t},n)=>h.jsx(ZC,{ref:n,className:we("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",e),...t}));WL.displayName=ZC.displayName;const XC=x.forwardRef(({className:e,...t},n)=>h.jsx(GC,{ref:n,className:we("absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...t,children:h.jsx(y_,{className:"h-4 w-4"})}));XC.displayName=GC.displayName;const qC=x.forwardRef(({className:e,...t},n)=>h.jsx(UC,{ref:n,className:we("text-sm font-semibold [&+div]:text-xs",e),...t}));qC.displayName=UC.displayName;const QC=x.forwardRef(({className:e,...t},n)=>h.jsx(WC,{ref:n,className:we("text-sm opacity-90",e),...t}));QC.displayName=WC.displayName;function ZL(){const{toasts:e}=cg();return h.jsxs(BL,{children:[e.map(function({id:t,title:n,description:r,action:o,...i}){return h.jsxs(KC,{...i,children:[h.jsxs("div",{className:"grid gap-1",children:[n&&h.jsx(qC,{children:n}),r&&h.jsx(QC,{children:r})]}),o,h.jsx(XC,{})]},t)}),h.jsx(YC,{})]})}var wg="Dialog",[JC,xz]=Xo(wg),[GL,Tn]=JC(wg),eE=e=>{const{__scopeDialog:t,children:n,open:r,defaultOpen:o,onOpenChange:i,modal:s=!0}=e,a=x.useRef(null),l=x.useRef(null),[c=!1,d]=Hn({prop:r,defaultProp:o,onChange:i});return h.jsx(GL,{scope:t,triggerRef:a,contentRef:l,contentId:xn(),titleId:xn(),descriptionId:xn(),open:c,onOpenChange:d,onOpenToggle:x.useCallback(()=>d(u=>!u),[d]),modal:s,children:n})};eE.displayName=wg;var tE="DialogTrigger",nE=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=Tn(tE,n),i=Ae(t,o.triggerRef);return h.jsx(xe.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":bg(o.open),...r,ref:i,onClick:he(e.onClick,o.onOpenToggle)})});nE.displayName=tE;var _g="DialogPortal",[YL,rE]=JC(_g,{forceMount:void 0}),oE=e=>{const{__scopeDialog:t,forceMount:n,children:r,container:o}=e,i=Tn(_g,t);return h.jsx(YL,{scope:t,forceMount:n,children:x.Children.map(r,s=>h.jsx(kr,{present:n||i.open,children:h.jsx(fl,{asChild:!0,container:o,children:s})}))})};oE.displayName=_g;var bu="DialogOverlay",iE=x.forwardRef((e,t)=>{const n=rE(bu,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=Tn(bu,e.__scopeDialog);return i.modal?h.jsx(kr,{present:r||i.open,children:h.jsx(KL,{...o,ref:t})}):null});iE.displayName=bu;var KL=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=Tn(bu,n);return h.jsx(ig,{as:to,allowPinchZoom:!0,shards:[o.contentRef],children:h.jsx(xe.div,{"data-state":bg(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),Uo="DialogContent",sE=x.forwardRef((e,t)=>{const n=rE(Uo,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=Tn(Uo,e.__scopeDialog);return h.jsx(kr,{present:r||i.open,children:i.modal?h.jsx(XL,{...o,ref:t}):h.jsx(qL,{...o,ref:t})})});sE.displayName=Uo;var XL=x.forwardRef((e,t)=>{const n=Tn(Uo,e.__scopeDialog),r=x.useRef(null),o=Ae(t,n.contentRef,r);return x.useEffect(()=>{const i=r.current;if(i)return AS(i)},[]),h.jsx(aE,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:he(e.onCloseAutoFocus,i=>{var s;i.preventDefault(),(s=n.triggerRef.current)==null||s.focus()}),onPointerDownOutside:he(e.onPointerDownOutside,i=>{const s=i.detail.originalEvent,a=s.button===0&&s.ctrlKey===!0;(s.button===2||a)&&i.preventDefault()}),onFocusOutside:he(e.onFocusOutside,i=>i.preventDefault())})}),qL=x.forwardRef((e,t)=>{const n=Tn(Uo,e.__scopeDialog),r=x.useRef(!1),o=x.useRef(!1);return h.jsx(aE,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var s,a;(s=e.onCloseAutoFocus)==null||s.call(e,i),i.defaultPrevented||(r.current||(a=n.triggerRef.current)==null||a.focus(),i.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:i=>{var l,c;(l=e.onInteractOutside)==null||l.call(e,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const s=i.target;((c=n.triggerRef.current)==null?void 0:c.contains(s))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&o.current&&i.preventDefault()}})}),aE=x.forwardRef((e,t)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:i,...s}=e,a=Tn(Uo,n),l=x.useRef(null),c=Ae(t,l);return sS(),h.jsxs(h.Fragment,{children:[h.jsx(Km,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:i,children:h.jsx(ul,{role:"dialog",id:a.contentId,"aria-describedby":a.descriptionId,"aria-labelledby":a.titleId,"data-state":bg(a.open),...s,ref:c,onDismiss:()=>a.onOpenChange(!1)})}),h.jsxs(h.Fragment,{children:[h.jsx(QL,{titleId:a.titleId}),h.jsx(ez,{contentRef:l,descriptionId:a.descriptionId})]})]})}),Sg="DialogTitle",lE=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=Tn(Sg,n);return h.jsx(xe.h2,{id:o.titleId,...r,ref:t})});lE.displayName=Sg;var cE="DialogDescription",uE=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=Tn(cE,n);return h.jsx(xe.p,{id:o.descriptionId,...r,ref:t})});uE.displayName=cE;var dE="DialogClose",fE=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=Tn(dE,n);return h.jsx(xe.button,{type:"button",...r,ref:t,onClick:he(e.onClick,()=>o.onOpenChange(!1))})});fE.displayName=dE;function bg(e){return e?"open":"closed"}var pE="DialogTitleWarning",[wz,hE]=AA(pE,{contentName:Uo,titleName:Sg,docsSlug:"dialog"}),QL=({titleId:e})=>{const t=hE(pE),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
+
+If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
+
+For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return x.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},JL="DialogDescriptionWarning",ez=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${hE(JL).contentName}}.`;return x.useEffect(()=>{var i;const o=(i=e.current)==null?void 0:i.getAttribute("aria-describedby");t&&o&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},tz=eE,nz=nE,rz=oE,mE=iE,gE=sE,vE=lE,yE=uE,oz=fE;const iz=tz,sz=nz,az=rz,xE=x.forwardRef(({className:e,...t},n)=>h.jsx(mE,{ref:n,className:we("fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));xE.displayName=mE.displayName;const wE=x.forwardRef(({className:e,children:t,...n},r)=>h.jsxs(az,{children:[h.jsx(xE,{}),h.jsxs(gE,{ref:r,className:we("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...n,children:[t,h.jsxs(oz,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[h.jsx(y_,{className:"h-4 w-4"}),h.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));wE.displayName=gE.displayName;const lz=x.forwardRef(({className:e,...t},n)=>h.jsx(vE,{ref:n,className:we("text-lg font-semibold leading-none tracking-tight",e),...t}));lz.displayName=vE.displayName;const cz=x.forwardRef(({className:e,...t},n)=>h.jsx(yE,{ref:n,className:we("text-sm text-muted-foreground",e),...t}));cz.displayName=yE.displayName;function uz(){const{toast:e}=cg(),t=zt(),[n,r]=x.useState([]);x.useEffect(()=>{t.setProjects(n)},[n]);const o=x.useCallback(async()=>{try{const v=await fetch("/api/project");r(await v.json())}catch(v){console.log(v)}},[r]);x.useEffect(()=>{o()},[o]);const i=A_(),[s,a]=x.useState(!1),l=x.useCallback(v=>{v==="create-new"?a(!0):t.setProject(v)},[t]),c=Yo(),d=x.useCallback(async v=>{const m=await(await fetch(`/api/project/${v}/saved`,{method:"GET"})).json(),{x:g=0,y:w=0,zoom:S=1}=m.viewport;c.setNodes(m.nodes||[]),c.setEdges(m.edges||[]),c.setViewport({x:g,y:w,zoom:S})},[c]);x.useEffect(()=>{i!=null&&d(i)},[i,d]);const[u,f]=x.useState(void 0),p=x.useCallback(v=>{f(v.target.value)},[f]),y=x.useCallback(()=>{console.log(u),u&&fetch("/api/project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:u})}).then(async v=>{if(!v.ok)return;const{id:_}=await v.json();await o(),t.setProject(_),a(!1),e({title:`Created project: ${u}`})}).catch(v=>{console.log(v),e({variant:"destructive",title:`Failed to create project: ${u}`})})},[u,a,e]);return h.jsx("div",{className:"flex flex-row h-9",children:h.jsxs(ur,{onValueChange:l,value:i,children:[h.jsx(Fn,{children:h.jsx(dr,{placeholder:"Choose Project",defaultValue:i})}),h.jsxs(Vn,{children:[n.map(v=>h.jsx(_n,{value:v.id,children:v.name})),h.jsx(_n,{value:"create-new",children:h.jsxs(iz,{open:s,onOpenChange:a,children:[h.jsx(sz,{children:"Create New"}),h.jsxs(wE,{children:[h.jsx(nn,{type:"text",placeholder:"Name",onChange:p}),h.jsx(Ln,{onClick:y,children:"Create New"})]})]})})]})]})})}function dz(){return h.jsxs(V2,{children:[h.jsx(uz,{}),h.jsx(fz,{}),h.jsx(ZL,{})]})}function fz(){const e=zt();return x.useEffect(()=>{setTimeout(async()=>await e.refreshEnv(),1)},[e]),h.jsxs(CC,{defaultValue:"canvas",children:[h.jsxs(gg,{children:[h.jsx($i,{value:"canvas",children:"Canvas"}),h.jsx($i,{value:"config",children:"Config"})]}),h.jsx(Fi,{value:"canvas",children:h.jsx(bL,{})}),h.jsx(Fi,{value:"config",children:h.jsx(CL,{})})]})}ew(document.getElementById("root")).render(h.jsx(x.StrictMode,{children:h.jsx(dz,{})}));
diff --git a/apps/canvas/server/front/index.html b/apps/canvas/server/front/index.html
new file mode 100644
index 0000000..4e6cd67
--- /dev/null
+++ b/apps/canvas/server/front/index.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>dodo: Canvas</title>
+    <script type="module" crossorigin src="/assets/index-DRnLehre.js"></script>
+    <link rel="stylesheet" crossorigin href="/assets/index-DITJ3yy7.css">
+  </head>
+  <body>
+    <div id="root"></div>
+  </body>
+</html>
diff --git a/apps/canvas/server/main.go b/apps/canvas/server/main.go
index 7608049..82db481 100644
--- a/apps/canvas/server/main.go
+++ b/apps/canvas/server/main.go
@@ -108,11 +108,19 @@
 	json.NewEncoder(w).Encode(resp)
 }
 
+func getPort() string {
+	if p, ok := os.LookupEnv("DODO_PORT_WEB"); ok {
+		return p
+	}
+	panic("port missing")
+}
+
 func main() {
+	port := getPort()
 	http.HandleFunc("GET /saved", handleSavedGet)
 	http.HandleFunc("POST /saved", handleSave)
 	http.HandleFunc("GET /env", handleEnv)
 	http.HandleFunc("POST /deploy", handleDeploy)
-	http.Handle("/", http.FileServer(http.Dir("/home/gio/code/dist")))
-	log.Fatal(http.ListenAndServe(":3000", nil))
+	http.Handle("/", http.FileServer(http.Dir("./front")))
+	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
 }
