diff --git a/apps/app-runner/Dockerfile.golang.1.24.0 b/apps/app-runner/Dockerfile.golang.1.24.0
new file mode 100644
index 0000000..692818b
--- /dev/null
+++ b/apps/app-runner/Dockerfile.golang.1.24.0
@@ -0,0 +1,5 @@
+FROM golang:1.24.0-alpine3.21
+
+ARG TARGETARCH
+
+COPY app-runner_${TARGETARCH} /usr/bin/app-runner
diff --git a/apps/app-runner/Makefile b/apps/app-runner/Makefile
index 9c76326..8f11f8b 100644
--- a/apps/app-runner/Makefile
+++ b/apps/app-runner/Makefile
@@ -1,6 +1,7 @@
 repo_name ?= giolekva
 podman ?= docker
 ifeq ($(podman), podman)
+manifest_dest_golang_1_24_0=docker://docker.io/$(repo_name)/app-runner:golang-1.24.0
 manifest_dest_golang_1_22_0=docker://docker.io/$(repo_name)/app-runner:golang-1.22.0
 manifest_dest_golang_1_20_0=docker://docker.io/$(repo_name)/app-runner:golang-1.20.0
 manifest_dest_hugo_latest=docker://docker.io/$(repo_name)/app-runner:hugo-latest
@@ -26,6 +27,21 @@
 build_amd64:
 	/usr/local/go/bin/go build -o app-runner_amd64 *.go
 
+# Golang 1.24.0
+
+push_golang_1_24_0_arm64: clean build_arm64
+	$(podman) build --platform linux/arm64 --tag=$(repo_name)/app-runner:golang-1.24.0-arm64 -f Dockerfile.golang.1.24.0 .
+	$(podman) push $(repo_name)/app-runner:golang-1.24.0-arm64
+
+push_golang_1_24_0_amd64: clean build_amd64
+	$(podman) build --platform linux/amd64 --tag=$(repo_name)/app-runner:golang-1.24.0-amd64 -f Dockerfile.golang.1.24.0 .
+	$(podman) push $(repo_name)/app-runner:golang-1.24.0-amd64
+
+push_golang_1_24_0: push_golang_1_24_0_arm64 push_golang_1_24_0_amd64
+	$(podman) manifest create $(repo_name)/app-runner:golang-1.24.0 $(repo_name)/app-runner:golang-1.24.0-arm64 $(repo_name)/app-runner:golang-1.24.0-amd64
+	$(podman) manifest push $(repo_name)/app-runner:golang-1.24.0 $(manifest_dest_golang_1_24_0)
+	$(podman) manifest rm $(repo_name)/app-runner:golang-1.24.0
+
 # Golang 1.22.0
 
 push_golang_1_22_0_arm64: clean build_arm64
diff --git a/apps/app-runner/main.go b/apps/app-runner/main.go
index 9296749..2f4f5a8 100644
--- a/apps/app-runner/main.go
+++ b/apps/app-runner/main.go
@@ -21,6 +21,7 @@
 var appId = flag.String("app-id", "", "Application ID")
 var repoAddr = flag.String("repo-addr", "", "Git repository address")
 var branch = flag.String("branch", "", "Name of the branch to process")
+var rootDir = flag.String("root-dir", "/", "Path to the app code")
 var sshKey = flag.String("ssh-key", "", "Private SSH key to access Git repository")
 var appDir = flag.String("app-dir", "", "Path to store application repository locally")
 var runCfg = flag.String("run-cfg", "", "Run configuration")
@@ -32,11 +33,19 @@
 	Env  []string `json:"env"`
 }
 
-func CloneRepositoryBranch(addr, branch string, signer ssh.Signer, path string) error {
+func CloneRepositoryBranch(addr, branch, rootDir string, signer ssh.Signer, path string) error {
 	ref := fmt.Sprintf("refs/heads/%s", branch)
-	c, err := git.Clone(memory.NewStorage(), osfs.New(path, osfs.WithBoundOS()), &git.CloneOptions{
-		URL: addr,
-		Auth: &gitssh.PublicKeys{
+	opts := &git.CloneOptions{
+		URL:             addr,
+		RemoteName:      "origin",
+		ReferenceName:   plumbing.ReferenceName(ref),
+		SingleBranch:    true,
+		Depth:           1,
+		InsecureSkipTLS: true,
+		Progress:        os.Stdout,
+	}
+	if signer != nil {
+		opts.Auth = &gitssh.PublicKeys{
 			User:   "git",
 			Signer: signer,
 			HostKeyCallbackHelper: gitssh.HostKeyCallbackHelper{
@@ -46,14 +55,9 @@
 					return nil
 				},
 			},
-		},
-		RemoteName:      "origin",
-		ReferenceName:   plumbing.ReferenceName(ref),
-		SingleBranch:    true,
-		Depth:           1,
-		InsecureSkipTLS: true,
-		Progress:        os.Stdout,
-	})
+		}
+	}
+	c, err := git.Clone(memory.NewStorage(), osfs.New(path, osfs.WithBoundOS()), opts)
 	if err != nil {
 		return err
 	}
@@ -61,18 +65,22 @@
 	if err != nil {
 		return err
 	}
-	sb, err := wt.Submodules()
-	if err != nil {
-		return err
+	if wt == nil {
+		panic(wt)
 	}
-	if err := sb.Init(); err != nil {
-		return err
-	}
-	if err := sb.Update(&git.SubmoduleUpdateOptions{
-		Depth: 1,
-	}); err != nil {
-		return err
-	}
+	// TODO(gio): This should probably be removed.
+	// sb, err := wt.Submodules()
+	// if err != nil {
+	// 	return err
+	// }
+	// if err := sb.Init(); err != nil {
+	// 	return err
+	// }
+	// if err := sb.Update(&git.SubmoduleUpdateOptions{
+	// 	Depth: 1,
+	// }); err != nil {
+	// 	return err
+	// }
 	return err
 }
 
@@ -82,15 +90,18 @@
 	if !ok {
 		panic("no SELF_IP")
 	}
-	key, err := os.ReadFile(*sshKey)
-	if err != nil {
-		panic(err)
+	var signer ssh.Signer
+	if *sshKey != "" {
+		key, err := os.ReadFile(*sshKey)
+		if err != nil {
+			panic(err)
+		}
+		signer, err = ssh.ParsePrivateKey(key)
+		if err != nil {
+			panic(err)
+		}
 	}
-	signer, err := ssh.ParsePrivateKey(key)
-	if err != nil {
-		panic(err)
-	}
-	if err := CloneRepositoryBranch(*repoAddr, *branch, signer, *appDir); err != nil {
+	if err := CloneRepositoryBranch(*repoAddr, *branch, *rootDir, signer, *appDir); err != nil {
 		panic(err)
 	}
 	r, err := os.Open(*runCfg)
@@ -102,7 +113,7 @@
 	if err := json.NewDecoder(r).Decode(&cmds); err != nil {
 		panic(err)
 	}
-	s := NewServer(*port, *appId, *repoAddr, *branch, signer, *appDir, cmds, self, *managerAddr)
+	s := NewServer(*port, *appId, *repoAddr, *branch, *rootDir, signer, *appDir, cmds, self, *managerAddr)
 	if err := s.Start(); err != nil {
 		log.Fatal(err)
 	}
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 1779a76..ad8c7bc 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -8,6 +8,7 @@
 	"net/http"
 	"os"
 	"os/exec"
+	"path/filepath"
 	"sync"
 	"syscall"
 	"time"
@@ -23,6 +24,7 @@
 	cmd         *exec.Cmd
 	repoAddr    string
 	branch      string
+	rootDir     string
 	signer      ssh.Signer
 	appDir      string
 	runCommands []Command
@@ -32,7 +34,7 @@
 	currDir     string
 }
 
-func NewServer(port int, appId string, repoAddr, branch string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
+func NewServer(port int, appId string, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
 	return &Server{
 		l:           &sync.Mutex{},
 		port:        port,
@@ -40,6 +42,7 @@
 		appId:       appId,
 		repoAddr:    repoAddr,
 		branch:      branch,
+		rootDir:     rootDir,
 		signer:      signer,
 		appDir:      appDir,
 		runCommands: runCommands,
@@ -94,7 +97,7 @@
 	if err != nil {
 		return err
 	}
-	if err := CloneRepositoryBranch(s.repoAddr, s.branch, s.signer, newDir); err != nil {
+	if err := CloneRepositoryBranch(s.repoAddr, s.branch, s.rootDir, s.signer, newDir); err != nil {
 		return err
 	}
 	logM := io.MultiWriter(os.Stdout, s.logs)
@@ -102,7 +105,7 @@
 		args := []string{c.Bin}
 		args = append(args, c.Args...)
 		cmd := &exec.Cmd{
-			Dir:    newDir,
+			Dir:    filepath.Join(newDir, s.rootDir),
 			Path:   c.Bin,
 			Args:   args,
 			Env:    append(os.Environ(), c.Env...),
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))
 }
