diff --git a/apps/canvas/server/.gitignore b/apps/canvas/back/.gitignore
similarity index 100%
rename from apps/canvas/server/.gitignore
rename to apps/canvas/back/.gitignore
diff --git a/apps/canvas/back/deno.lock b/apps/canvas/back/deno.lock
new file mode 100644
index 0000000..acd84cc
--- /dev/null
+++ b/apps/canvas/back/deno.lock
@@ -0,0 +1,800 @@
+{
+  "version": "5",
+  "specifiers": {
+    "npm:@prisma/client@^5.22.0": "5.22.0_prisma@5.22.0",
+    "npm:@types/express@5": "5.0.1",
+    "npm:@types/node@^22.9.1": "22.14.1",
+    "npm:@types/sqlite3@^3.1.11": "3.1.11",
+    "npm:express@^4.21.1": "4.21.2",
+    "npm:prisma@^5.22.0": "5.22.0",
+    "npm:sqlite3@^5.1.7": "5.1.7",
+    "npm:typescript@^5.6.3": "5.8.3"
+  },
+  "npm": {
+    "@prisma/client@5.22.0_prisma@5.22.0": {
+      "integrity": "sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==",
+      "dependencies": [
+        "prisma"
+      ],
+      "optionalPeers": [
+        "prisma"
+      ],
+      "hasScripts": true
+    },
+    "@prisma/debug@5.22.0": {
+      "integrity": "sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ=="
+    },
+    "@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2": {
+      "integrity": "sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ=="
+    },
+    "@prisma/engines@5.22.0": {
+      "integrity": "sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==",
+      "dependencies": [
+        "@prisma/debug",
+        "@prisma/engines-version",
+        "@prisma/fetch-engine",
+        "@prisma/get-platform"
+      ],
+      "hasScripts": true
+    },
+    "@prisma/fetch-engine@5.22.0": {
+      "integrity": "sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==",
+      "dependencies": [
+        "@prisma/debug",
+        "@prisma/engines-version",
+        "@prisma/get-platform"
+      ]
+    },
+    "@prisma/get-platform@5.22.0": {
+      "integrity": "sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==",
+      "dependencies": [
+        "@prisma/debug"
+      ]
+    },
+    "@types/body-parser@1.19.5": {
+      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+      "dependencies": [
+        "@types/connect",
+        "@types/node@22.12.0"
+      ]
+    },
+    "@types/connect@3.4.38": {
+      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+      "dependencies": [
+        "@types/node@22.12.0"
+      ]
+    },
+    "@types/express-serve-static-core@5.0.6": {
+      "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
+      "dependencies": [
+        "@types/node@22.12.0",
+        "@types/qs",
+        "@types/range-parser",
+        "@types/send"
+      ]
+    },
+    "@types/express@5.0.1": {
+      "integrity": "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==",
+      "dependencies": [
+        "@types/body-parser",
+        "@types/express-serve-static-core",
+        "@types/serve-static"
+      ]
+    },
+    "@types/http-errors@2.0.4": {
+      "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="
+    },
+    "@types/mime@1.3.5": {
+      "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
+    },
+    "@types/node@22.12.0": {
+      "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==",
+      "dependencies": [
+        "undici-types@6.20.0"
+      ]
+    },
+    "@types/node@22.14.1": {
+      "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
+      "dependencies": [
+        "undici-types@6.21.0"
+      ]
+    },
+    "@types/qs@6.9.18": {
+      "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA=="
+    },
+    "@types/range-parser@1.2.7": {
+      "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="
+    },
+    "@types/send@0.17.4": {
+      "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+      "dependencies": [
+        "@types/mime",
+        "@types/node@22.12.0"
+      ]
+    },
+    "@types/serve-static@1.15.7": {
+      "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+      "dependencies": [
+        "@types/http-errors",
+        "@types/node@22.12.0",
+        "@types/send"
+      ]
+    },
+    "@types/sqlite3@3.1.11": {
+      "integrity": "sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w==",
+      "dependencies": [
+        "@types/node@22.12.0"
+      ]
+    },
+    "accepts@1.3.8": {
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dependencies": [
+        "mime-types",
+        "negotiator"
+      ]
+    },
+    "array-flatten@1.1.1": {
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+    },
+    "base64-js@1.5.1": {
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+    },
+    "bindings@1.5.0": {
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dependencies": [
+        "file-uri-to-path"
+      ]
+    },
+    "bl@4.1.0": {
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "dependencies": [
+        "buffer",
+        "inherits",
+        "readable-stream"
+      ]
+    },
+    "body-parser@1.20.3": {
+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+      "dependencies": [
+        "bytes",
+        "content-type",
+        "debug",
+        "depd",
+        "destroy",
+        "http-errors",
+        "iconv-lite",
+        "on-finished",
+        "qs",
+        "raw-body",
+        "type-is",
+        "unpipe"
+      ]
+    },
+    "buffer@5.7.1": {
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "dependencies": [
+        "base64-js",
+        "ieee754"
+      ]
+    },
+    "bytes@3.1.2": {
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
+    },
+    "call-bind-apply-helpers@1.0.2": {
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "dependencies": [
+        "es-errors",
+        "function-bind"
+      ]
+    },
+    "call-bound@1.0.4": {
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+      "dependencies": [
+        "call-bind-apply-helpers",
+        "get-intrinsic"
+      ]
+    },
+    "chownr@1.1.4": {
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+    },
+    "chownr@2.0.0": {
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+    },
+    "content-disposition@0.5.4": {
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dependencies": [
+        "safe-buffer"
+      ]
+    },
+    "content-type@1.0.5": {
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
+    },
+    "cookie-signature@1.0.6": {
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+    },
+    "cookie@0.7.1": {
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="
+    },
+    "debug@2.6.9": {
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dependencies": [
+        "ms@2.0.0"
+      ]
+    },
+    "decompress-response@6.0.0": {
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "dependencies": [
+        "mimic-response"
+      ]
+    },
+    "deep-extend@0.6.0": {
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+    },
+    "depd@2.0.0": {
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+    },
+    "destroy@1.2.0": {
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
+    },
+    "detect-libc@2.0.4": {
+      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="
+    },
+    "dunder-proto@1.0.1": {
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dependencies": [
+        "call-bind-apply-helpers",
+        "es-errors",
+        "gopd"
+      ]
+    },
+    "ee-first@1.1.1": {
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+    },
+    "encodeurl@1.0.2": {
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+    },
+    "encodeurl@2.0.0": {
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
+    },
+    "end-of-stream@1.4.4": {
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "dependencies": [
+        "once"
+      ]
+    },
+    "es-define-property@1.0.1": {
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
+    },
+    "es-errors@1.3.0": {
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+    },
+    "es-object-atoms@1.1.1": {
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "dependencies": [
+        "es-errors"
+      ]
+    },
+    "escape-html@1.0.3": {
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+    },
+    "etag@1.8.1": {
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
+    },
+    "expand-template@2.0.3": {
+      "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
+    },
+    "express@4.21.2": {
+      "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+      "dependencies": [
+        "accepts",
+        "array-flatten",
+        "body-parser",
+        "content-disposition",
+        "content-type",
+        "cookie",
+        "cookie-signature",
+        "debug",
+        "depd",
+        "encodeurl@2.0.0",
+        "escape-html",
+        "etag",
+        "finalhandler",
+        "fresh",
+        "http-errors",
+        "merge-descriptors",
+        "methods",
+        "on-finished",
+        "parseurl",
+        "path-to-regexp",
+        "proxy-addr",
+        "qs",
+        "range-parser",
+        "safe-buffer",
+        "send",
+        "serve-static",
+        "setprototypeof",
+        "statuses",
+        "type-is",
+        "utils-merge",
+        "vary"
+      ]
+    },
+    "file-uri-to-path@1.0.0": {
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+    },
+    "finalhandler@1.3.1": {
+      "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+      "dependencies": [
+        "debug",
+        "encodeurl@2.0.0",
+        "escape-html",
+        "on-finished",
+        "parseurl",
+        "statuses",
+        "unpipe"
+      ]
+    },
+    "forwarded@0.2.0": {
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
+    },
+    "fresh@0.5.2": {
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
+    },
+    "fs-constants@1.0.0": {
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+    },
+    "fs-minipass@2.1.0": {
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dependencies": [
+        "minipass@3.3.6"
+      ]
+    },
+    "fsevents@2.3.3": {
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "os": [
+        "darwin"
+      ],
+      "hasScripts": true
+    },
+    "function-bind@1.1.2": {
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+    },
+    "get-intrinsic@1.3.0": {
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "dependencies": [
+        "call-bind-apply-helpers",
+        "es-define-property",
+        "es-errors",
+        "es-object-atoms",
+        "function-bind",
+        "get-proto",
+        "gopd",
+        "has-symbols",
+        "hasown",
+        "math-intrinsics"
+      ]
+    },
+    "get-proto@1.0.1": {
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "dependencies": [
+        "dunder-proto",
+        "es-object-atoms"
+      ]
+    },
+    "github-from-package@0.0.0": {
+      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
+    },
+    "gopd@1.2.0": {
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
+    },
+    "has-symbols@1.1.0": {
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+    },
+    "hasown@2.0.2": {
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "dependencies": [
+        "function-bind"
+      ]
+    },
+    "http-errors@2.0.0": {
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dependencies": [
+        "depd",
+        "inherits",
+        "setprototypeof",
+        "statuses",
+        "toidentifier"
+      ]
+    },
+    "iconv-lite@0.4.24": {
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dependencies": [
+        "safer-buffer"
+      ]
+    },
+    "ieee754@1.2.1": {
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
+    "inherits@2.0.4": {
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "ini@1.3.8": {
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+    },
+    "ipaddr.js@1.9.1": {
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+    },
+    "math-intrinsics@1.1.0": {
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
+    },
+    "media-typer@0.3.0": {
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
+    },
+    "merge-descriptors@1.0.3": {
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
+    },
+    "methods@1.1.2": {
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
+    },
+    "mime-db@1.52.0": {
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+    },
+    "mime-types@2.1.35": {
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": [
+        "mime-db"
+      ]
+    },
+    "mime@1.6.0": {
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "hasBin": true
+    },
+    "mimic-response@3.1.0": {
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
+    },
+    "minimist@1.2.8": {
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+    },
+    "minipass@3.3.6": {
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dependencies": [
+        "yallist"
+      ]
+    },
+    "minipass@5.0.0": {
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="
+    },
+    "minizlib@2.1.2": {
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dependencies": [
+        "minipass@3.3.6",
+        "yallist"
+      ]
+    },
+    "mkdirp-classic@0.5.3": {
+      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+    },
+    "mkdirp@1.0.4": {
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "hasBin": true
+    },
+    "ms@2.0.0": {
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+    },
+    "ms@2.1.3": {
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+    },
+    "napi-build-utils@2.0.0": {
+      "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="
+    },
+    "negotiator@0.6.3": {
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
+    },
+    "node-abi@3.74.0": {
+      "integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
+      "dependencies": [
+        "semver"
+      ]
+    },
+    "node-addon-api@7.1.1": {
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="
+    },
+    "object-inspect@1.13.4": {
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="
+    },
+    "on-finished@2.4.1": {
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dependencies": [
+        "ee-first"
+      ]
+    },
+    "once@1.4.0": {
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dependencies": [
+        "wrappy"
+      ]
+    },
+    "parseurl@1.3.3": {
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+    },
+    "path-to-regexp@0.1.12": {
+      "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
+    },
+    "prebuild-install@7.1.3": {
+      "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
+      "dependencies": [
+        "detect-libc",
+        "expand-template",
+        "github-from-package",
+        "minimist",
+        "mkdirp-classic",
+        "napi-build-utils",
+        "node-abi",
+        "pump",
+        "rc",
+        "simple-get",
+        "tar-fs",
+        "tunnel-agent"
+      ],
+      "hasBin": true
+    },
+    "prisma@5.22.0": {
+      "integrity": "sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==",
+      "dependencies": [
+        "@prisma/engines"
+      ],
+      "optionalDependencies": [
+        "fsevents"
+      ],
+      "hasScripts": true,
+      "hasBin": true
+    },
+    "proxy-addr@2.0.7": {
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dependencies": [
+        "forwarded",
+        "ipaddr.js"
+      ]
+    },
+    "pump@3.0.2": {
+      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+      "dependencies": [
+        "end-of-stream",
+        "once"
+      ]
+    },
+    "qs@6.13.0": {
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+      "dependencies": [
+        "side-channel"
+      ]
+    },
+    "range-parser@1.2.1": {
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+    },
+    "raw-body@2.5.2": {
+      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+      "dependencies": [
+        "bytes",
+        "http-errors",
+        "iconv-lite",
+        "unpipe"
+      ]
+    },
+    "rc@1.2.8": {
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dependencies": [
+        "deep-extend",
+        "ini",
+        "minimist",
+        "strip-json-comments"
+      ],
+      "hasBin": true
+    },
+    "readable-stream@3.6.2": {
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dependencies": [
+        "inherits",
+        "string_decoder",
+        "util-deprecate"
+      ]
+    },
+    "safe-buffer@5.2.1": {
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "safer-buffer@2.1.2": {
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "semver@7.7.1": {
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "hasBin": true
+    },
+    "send@0.19.0": {
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+      "dependencies": [
+        "debug",
+        "depd",
+        "destroy",
+        "encodeurl@1.0.2",
+        "escape-html",
+        "etag",
+        "fresh",
+        "http-errors",
+        "mime",
+        "ms@2.1.3",
+        "on-finished",
+        "range-parser",
+        "statuses"
+      ]
+    },
+    "serve-static@1.16.2": {
+      "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+      "dependencies": [
+        "encodeurl@2.0.0",
+        "escape-html",
+        "parseurl",
+        "send"
+      ]
+    },
+    "setprototypeof@1.2.0": {
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+    },
+    "side-channel-list@1.0.0": {
+      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+      "dependencies": [
+        "es-errors",
+        "object-inspect"
+      ]
+    },
+    "side-channel-map@1.0.1": {
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "dependencies": [
+        "call-bound",
+        "es-errors",
+        "get-intrinsic",
+        "object-inspect"
+      ]
+    },
+    "side-channel-weakmap@1.0.2": {
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "dependencies": [
+        "call-bound",
+        "es-errors",
+        "get-intrinsic",
+        "object-inspect",
+        "side-channel-map"
+      ]
+    },
+    "side-channel@1.1.0": {
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+      "dependencies": [
+        "es-errors",
+        "object-inspect",
+        "side-channel-list",
+        "side-channel-map",
+        "side-channel-weakmap"
+      ]
+    },
+    "simple-concat@1.0.1": {
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+    },
+    "simple-get@4.0.1": {
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "dependencies": [
+        "decompress-response",
+        "once",
+        "simple-concat"
+      ]
+    },
+    "sqlite3@5.1.7": {
+      "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==",
+      "dependencies": [
+        "bindings",
+        "node-addon-api",
+        "prebuild-install",
+        "tar"
+      ],
+      "hasScripts": true
+    },
+    "statuses@2.0.1": {
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
+    },
+    "string_decoder@1.3.0": {
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dependencies": [
+        "safe-buffer"
+      ]
+    },
+    "strip-json-comments@2.0.1": {
+      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+    },
+    "tar-fs@2.1.2": {
+      "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==",
+      "dependencies": [
+        "chownr@1.1.4",
+        "mkdirp-classic",
+        "pump",
+        "tar-stream"
+      ]
+    },
+    "tar-stream@2.2.0": {
+      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+      "dependencies": [
+        "bl",
+        "end-of-stream",
+        "fs-constants",
+        "inherits",
+        "readable-stream"
+      ]
+    },
+    "tar@6.2.1": {
+      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+      "dependencies": [
+        "chownr@2.0.0",
+        "fs-minipass",
+        "minipass@5.0.0",
+        "minizlib",
+        "mkdirp",
+        "yallist"
+      ]
+    },
+    "toidentifier@1.0.1": {
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
+    },
+    "tunnel-agent@0.6.0": {
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+      "dependencies": [
+        "safe-buffer"
+      ]
+    },
+    "type-is@1.6.18": {
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dependencies": [
+        "media-typer",
+        "mime-types"
+      ]
+    },
+    "typescript@5.8.3": {
+      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+      "hasBin": true
+    },
+    "undici-types@6.20.0": {
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="
+    },
+    "undici-types@6.21.0": {
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+    },
+    "unpipe@1.0.0": {
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
+    },
+    "util-deprecate@1.0.2": {
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "utils-merge@1.0.1": {
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
+    },
+    "vary@1.1.2": {
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
+    },
+    "wrappy@1.0.2": {
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "yallist@4.0.0": {
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    }
+  },
+  "workspace": {
+    "packageJson": {
+      "dependencies": [
+        "npm:@prisma/client@^5.22.0",
+        "npm:@types/express@5",
+        "npm:@types/node@^22.9.1",
+        "npm:@types/sqlite3@^3.1.11",
+        "npm:express@^4.21.1",
+        "npm:prisma@^5.22.0",
+        "npm:sqlite3@^5.1.7",
+        "npm:typescript@^5.6.3"
+      ]
+    }
+  }
+}
diff --git a/apps/canvas/server/index.js b/apps/canvas/back/index.js
similarity index 67%
rename from apps/canvas/server/index.js
rename to apps/canvas/back/index.js
index 0cbf5e0..c5ffd89 100644
--- a/apps/canvas/server/index.js
+++ b/apps/canvas/back/index.js
@@ -13,21 +13,15 @@
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 const client_1 = require("@prisma/client");
-const node_http_1 = require("node:http");
 const express_1 = __importDefault(require("express"));
-const privateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQAAAKA42oIlONqC
-JQAAAAtzc2gtZWQyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQ
-AAAEC2CdpXtaFfqA8/mqjf9uITU1mrPOI4CeWgiQFEefFW1/K58vMu0MwIzdZT+mqpIBkh
-l48p9+/YwDCZv7MgTesFAAAAGXJvb3RAY2FudmFzYnVpbGRlci1tYXN0ZXIBAgME
------END OPENSSH PRIVATE KEY-----`;
+const node_process_1 = require("node:process");
+const axios_1 = __importDefault(require("axios"));
 const db = new client_1.PrismaClient();
 const handleProjectCreate = (req, resp) => __awaiter(void 0, void 0, void 0, function* () {
     try {
         const { id } = yield db.project.create({
             data: {
-                userId: req.get("x-forwarded-userid"),
+                userId: "gio", // req.get("x-forwarded-userid")!,
                 name: req.body.name,
             },
         });
@@ -49,7 +43,7 @@
     try {
         const r = yield db.project.findMany({
             where: {
-                userId: req.get("x-forwarded-userid"),
+                userId: "gio", // req.get("x-forwarded-userid")!,
             },
         });
         resp.status(200);
@@ -94,6 +88,7 @@
                 id: Number(req.params["projectId"]),
             },
             select: {
+                state: true,
                 draft: true,
             }
         });
@@ -103,15 +98,21 @@
         else {
             resp.status(200);
             resp.header("content-type", "application/json");
+            console.log(r);
             if (r.draft == null) {
-                resp.send({
-                    nodes: [],
-                    edges: [],
-                    viewport: { x: 0, y: 0, zoom: 1 },
-                });
+                if (r.state == null) {
+                    resp.send({
+                        nodes: [],
+                        edges: [],
+                        viewport: { x: 0, y: 0, zoom: 1 },
+                    });
+                }
+                else {
+                    resp.send(JSON.parse(r.state.toString()));
+                }
             }
             else {
-                resp.send(JSON.parse(r.draft.toString()));
+                resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
             }
         }
     }
@@ -135,42 +136,18 @@
                 draft: state,
             },
         });
-        const result = yield new Promise((resolve) => {
-            const r = (0, node_http_1.request)("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", {
-                method: "POST",
-                headers: {
-                    "content-type": "application/json",
-                },
-            }, (res) => {
-                res.on("end", () => {
-                    resolve(res.statusCode);
-                });
-                res.on("close", () => {
-                    resolve(res.statusCode);
-                });
-                res.on("error", () => {
-                    resolve(res.statusCode);
-                });
-                res.on("data", (data) => console.log(data));
-                res.on("pause", () => console.log("pause"));
-                res.on("readable", () => console.log("readable"));
-                res.on("resume", () => console.log("resume"));
-            });
-            r.write(JSON.stringify({
-                id: req.params["projectId"],
-                sshPrivateKey: privateKey,
-                config: req.body.config,
-            }));
-            r.end();
-        });
-        resp.status(result);
-        if (result === 200) {
+        const r = yield axios_1.default.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
+        if (r.status === 200) {
+            const d = r.data;
             yield db.project.update({
                 where: {
                     id: Number(req.params["projectId"]),
                 },
                 data: {
                     state,
+                    draft: null,
+                    instanceId: d.id,
+                    deployKey: d.deployKey,
                 },
             });
         }
@@ -193,9 +170,8 @@
         app.post("/api/project/:projectId/deploy", handleDeploy);
         app.get("/api/project", handleProjectAll);
         app.post("/api/project", handleProjectCreate);
-        app.use("/assets", express_1.default.static("../dist/assets"));
-        app.use("/", express_1.default.static("../dist"));
-        app.listen(3000, () => {
+        app.use("/", express_1.default.static("../front/dist"));
+        app.listen(node_process_1.env.DODO_PORT_WEB, () => {
             console.log("started");
         });
     });
diff --git a/apps/canvas/back/index.ts b/apps/canvas/back/index.ts
new file mode 100644
index 0000000..b103756
--- /dev/null
+++ b/apps/canvas/back/index.ts
@@ -0,0 +1,158 @@
+import { PrismaClient } from "@prisma/client";
+import express, { response } from "express";
+import { env } from "node:process";
+import axios from "axios";
+
+const db = new PrismaClient();
+
+const handleProjectCreate: express.Handler = async (req, resp) => {
+    try {
+        const { id } = await db.project.create({
+            data: {
+                userId: "gio", // req.get("x-forwarded-userid")!,
+                name: req.body.name,
+            },
+        });
+        resp.status(200);
+        resp.header("Content-Type", "application/json");
+        resp.write(JSON.stringify({
+            id,
+        }))
+    } catch (e) {
+        console.log(e);
+        resp.status(500);
+    } finally {
+        resp.end();
+    }
+};
+
+const handleProjectAll: express.Handler = async (req, resp) => {
+    try {
+        const r = await db.project.findMany({
+            where: {
+                userId: "gio", // req.get("x-forwarded-userid")!,
+            },
+        });
+        resp.status(200);
+        resp.header("Content-Type", "application/json");
+        resp.write(JSON.stringify(r.map((p) => ({
+            id: p.id.toString(),
+            name: p.name,
+        }))))
+    } catch (e) {
+        console.log(e);
+        resp.status(500);
+    } finally {
+        resp.end();
+    }
+};
+
+const handleSave: express.Handler = async (req, resp) => {
+    try {
+        await db.project.update({
+            where: {
+                id: Number(req.params["projectId"]),
+            },
+            data: {
+                draft: Buffer.from(JSON.stringify(req.body)),
+            },
+        });
+        resp.status(200);
+    } catch (e) {
+        console.log(e);
+        resp.status(500)
+    } finally {
+        resp.end();
+    }
+};
+
+const handleSavedGet: express.Handler = async (req, resp) => {
+    try {
+        const r = await db.project.findUnique({
+            where: {
+                id: Number(req.params["projectId"]),
+            },
+            select: {
+                state: true,
+                draft: true,
+            }
+        });
+        if (r == null) {
+            resp.status(404);
+        } else {
+            resp.status(200);
+            resp.header("content-type", "application/json");
+            console.log(r);
+            if (r.draft == null) {
+                if (r.state == null) {
+                    resp.send({
+                        nodes: [], 
+                        edges: [],
+                        viewport: { x: 0, y: 0, zoom: 1},
+                    });    
+                } else {
+                    resp.send(JSON.parse(r.state.toString()));
+                }
+            } else {
+                resp.send(JSON.parse(Buffer.from(r.state!).toString("utf8")));
+            }
+        }
+    } catch (e) {
+        console.log(e);
+        resp.status(500);
+    } finally {
+        resp.end();
+    }
+};
+
+const handleDeploy: express.Handler = async (req, resp) => {
+    try {
+        console.log(req.params);
+        const state = Buffer.from(JSON.stringify(req.body.state));
+        await db.project.update({
+            where: {
+                id: Number(req.params["projectId"]),
+            },
+            data: {
+                draft: state,
+            },
+        });
+        const r = await axios.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
+        if (r.status === 200) {
+            const d = r.data as { id: string, deployKey: string };
+            await db.project.update({
+                where: {
+                    id: Number(req.params["projectId"]),
+                },
+                data: {
+                    state,
+                    draft: null,
+                    instanceId: d.id,
+                    deployKey: d.deployKey,
+                },
+            });
+        }
+    } catch (e) {
+        console.log(e);
+        resp.status(500);
+    } finally {
+        resp.end();
+    }
+};
+
+async function start() {
+    await db.$connect();
+    const app = express();
+    app.use(express.json());
+    app.post("/api/project/:projectId/saved", handleSave);
+    app.get("/api/project/:projectId/saved", handleSavedGet);
+    app.post("/api/project/:projectId/deploy", handleDeploy);
+    app.get("/api/project", handleProjectAll);
+    app.post("/api/project", handleProjectCreate);
+    app.use("/", express.static("../front/dist"));
+    app.listen(env.DODO_PORT_WEB, () => {
+        console.log("started");
+    });
+}
+
+start();
\ No newline at end of file
diff --git a/apps/canvas/server/package-lock.json b/apps/canvas/back/package-lock.json
similarity index 77%
rename from apps/canvas/server/package-lock.json
rename to apps/canvas/back/package-lock.json
index c781336..cf48f57 100644
--- a/apps/canvas/server/package-lock.json
+++ b/apps/canvas/back/package-lock.json
@@ -9,7 +9,8 @@
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
-        "@prisma/client": "^5.22.0",
+        "@prisma/client": "^6.6.0",
+        "axios": "^1.8.4",
         "express": "^4.21.1",
         "sqlite3": "^5.1.7"
       },
@@ -17,10 +18,410 @@
         "@types/express": "^5.0.0",
         "@types/node": "^22.9.1",
         "@types/sqlite3": "^3.1.11",
-        "prisma": "^5.22.0",
+        "prisma": "^6.6.0",
         "typescript": "^5.6.3"
       }
     },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
+      "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz",
+      "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz",
+      "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz",
+      "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz",
+      "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz",
+      "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz",
+      "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz",
+      "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz",
+      "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz",
+      "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz",
+      "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz",
+      "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz",
+      "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz",
+      "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz",
+      "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz",
+      "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz",
+      "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz",
+      "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz",
+      "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz",
+      "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz",
+      "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz",
+      "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz",
+      "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz",
+      "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz",
+      "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@gar/promisify": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
@@ -52,65 +453,79 @@
       }
     },
     "node_modules/@prisma/client": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.22.0.tgz",
-      "integrity": "sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.6.0.tgz",
+      "integrity": "sha512-vfp73YT/BHsWWOAuthKQ/1lBgESSqYqAWZEYyTdGXyFAHpmewwWL2Iz6ErIzkj4aHbuc6/cGSsE6ZY+pBO04Cg==",
       "hasInstallScript": true,
       "engines": {
-        "node": ">=16.13"
+        "node": ">=18.18"
       },
       "peerDependencies": {
-        "prisma": "*"
+        "prisma": "*",
+        "typescript": ">=5.1.0"
       },
       "peerDependenciesMeta": {
         "prisma": {
           "optional": true
+        },
+        "typescript": {
+          "optional": true
         }
       }
     },
+    "node_modules/@prisma/config": {
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.6.0.tgz",
+      "integrity": "sha512-d8FlXRHsx72RbN8nA2QCRORNv5AcUnPXgtPvwhXmYkQSMF/j9cKaJg+9VcUzBRXGy9QBckNzEQDEJZdEOZ+ubA==",
+      "devOptional": true,
+      "dependencies": {
+        "esbuild": ">=0.12 <1",
+        "esbuild-register": "3.6.0"
+      }
+    },
     "node_modules/@prisma/debug": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.22.0.tgz",
-      "integrity": "sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.6.0.tgz",
+      "integrity": "sha512-DL6n4IKlW5k2LEXzpN60SQ1kP/F6fqaCgU/McgaYsxSf43GZ8lwtmXLke9efS+L1uGmrhtBUP4npV/QKF8s2ZQ==",
       "devOptional": true
     },
     "node_modules/@prisma/engines": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.22.0.tgz",
-      "integrity": "sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.6.0.tgz",
+      "integrity": "sha512-nC0IV4NHh7500cozD1fBoTwTD1ydJERndreIjpZr/S3mno3P6tm8qnXmIND5SwUkibNeSJMpgl4gAnlqJ/gVlg==",
       "devOptional": true,
       "hasInstallScript": true,
       "dependencies": {
-        "@prisma/debug": "5.22.0",
-        "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2",
-        "@prisma/fetch-engine": "5.22.0",
-        "@prisma/get-platform": "5.22.0"
+        "@prisma/debug": "6.6.0",
+        "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a",
+        "@prisma/fetch-engine": "6.6.0",
+        "@prisma/get-platform": "6.6.0"
       }
     },
     "node_modules/@prisma/engines-version": {
-      "version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2",
-      "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz",
-      "integrity": "sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==",
+      "version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a",
+      "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a.tgz",
+      "integrity": "sha512-JzRaQ5Em1fuEcbR3nUsMNYaIYrOT1iMheenjCvzZblJcjv/3JIuxXN7RCNT5i6lRkLodW5ojCGhR7n5yvnNKrw==",
       "devOptional": true
     },
     "node_modules/@prisma/fetch-engine": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz",
-      "integrity": "sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.6.0.tgz",
+      "integrity": "sha512-Ohfo8gKp05LFLZaBlPUApM0M7k43a0jmo86YY35u1/4t+vuQH9mRGU7jGwVzGFY3v+9edeb/cowb1oG4buM1yw==",
       "devOptional": true,
       "dependencies": {
-        "@prisma/debug": "5.22.0",
-        "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2",
-        "@prisma/get-platform": "5.22.0"
+        "@prisma/debug": "6.6.0",
+        "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a",
+        "@prisma/get-platform": "6.6.0"
       }
     },
     "node_modules/@prisma/get-platform": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.22.0.tgz",
-      "integrity": "sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.6.0.tgz",
+      "integrity": "sha512-3qCwmnT4Jh5WCGUrkWcc6VZaw0JY7eWN175/pcb5Z6FiLZZ3ygY93UX0WuV41bG51a6JN/oBH0uywJ90Y+V5eA==",
       "devOptional": true,
       "dependencies": {
-        "@prisma/debug": "5.22.0"
+        "@prisma/debug": "6.6.0"
       }
     },
     "node_modules/@tootallnate/once": {
@@ -340,6 +755,21 @@
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
       "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
     },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
+    "node_modules/axios": {
+      "version": "1.8.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
+      "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
+      "dependencies": {
+        "follow-redirects": "^1.15.6",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -494,6 +924,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/chownr": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@@ -520,6 +962,17 @@
         "color-support": "bin.js"
       }
     },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -610,6 +1063,14 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/delegates": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@@ -641,6 +1102,19 @@
         "node": ">=8"
       }
     },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -705,12 +1179,9 @@
       "optional": true
     },
     "node_modules/es-define-property": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
-      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
-      "dependencies": {
-        "get-intrinsic": "^1.2.4"
-      },
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
       "engines": {
         "node": ">= 0.4"
       }
@@ -723,6 +1194,106 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz",
+      "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
+      "devOptional": true,
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.2",
+        "@esbuild/android-arm": "0.25.2",
+        "@esbuild/android-arm64": "0.25.2",
+        "@esbuild/android-x64": "0.25.2",
+        "@esbuild/darwin-arm64": "0.25.2",
+        "@esbuild/darwin-x64": "0.25.2",
+        "@esbuild/freebsd-arm64": "0.25.2",
+        "@esbuild/freebsd-x64": "0.25.2",
+        "@esbuild/linux-arm": "0.25.2",
+        "@esbuild/linux-arm64": "0.25.2",
+        "@esbuild/linux-ia32": "0.25.2",
+        "@esbuild/linux-loong64": "0.25.2",
+        "@esbuild/linux-mips64el": "0.25.2",
+        "@esbuild/linux-ppc64": "0.25.2",
+        "@esbuild/linux-riscv64": "0.25.2",
+        "@esbuild/linux-s390x": "0.25.2",
+        "@esbuild/linux-x64": "0.25.2",
+        "@esbuild/netbsd-arm64": "0.25.2",
+        "@esbuild/netbsd-x64": "0.25.2",
+        "@esbuild/openbsd-arm64": "0.25.2",
+        "@esbuild/openbsd-x64": "0.25.2",
+        "@esbuild/sunos-x64": "0.25.2",
+        "@esbuild/win32-arm64": "0.25.2",
+        "@esbuild/win32-ia32": "0.25.2",
+        "@esbuild/win32-x64": "0.25.2"
+      }
+    },
+    "node_modules/esbuild-register": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz",
+      "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
+      "devOptional": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.12 <1"
+      }
+    },
+    "node_modules/esbuild-register/node_modules/debug": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+      "devOptional": true,
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/esbuild-register/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "devOptional": true
+    },
     "node_modules/escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -807,6 +1378,39 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/follow-redirects": {
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -888,15 +1492,20 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
-      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
       "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
         "function-bind": "^1.1.2",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0"
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -905,6 +1514,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/github-from-package": {
       "version": "0.0.0",
       "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -932,11 +1553,11 @@
       }
     },
     "node_modules/gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-      "dependencies": {
-        "get-intrinsic": "^1.1.3"
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -959,10 +1580,10 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-proto": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
-      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
       "engines": {
         "node": ">= 0.4"
       },
@@ -970,10 +1591,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -1263,6 +1887,14 @@
         "node": ">= 10"
       }
     },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -1634,22 +2266,31 @@
       }
     },
     "node_modules/prisma": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.22.0.tgz",
-      "integrity": "sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==",
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.6.0.tgz",
+      "integrity": "sha512-SYCUykz+1cnl6Ugd8VUvtTQq5+j1Q7C0CtzKPjQ8JyA2ALh0EEJkMCS+KgdnvKW1lrxjtjCyJSHOOT236mENYg==",
       "devOptional": true,
       "hasInstallScript": true,
       "dependencies": {
-        "@prisma/engines": "5.22.0"
+        "@prisma/config": "6.6.0",
+        "@prisma/engines": "6.6.0"
       },
       "bin": {
         "prisma": "build/index.js"
       },
       "engines": {
-        "node": ">=16.13"
+        "node": ">=18.18"
       },
       "optionalDependencies": {
         "fsevents": "2.3.3"
+      },
+      "peerDependencies": {
+        "typescript": ">=5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
     "node_modules/promise-inflight": {
@@ -1683,6 +2324,11 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "node_modules/pump": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
@@ -2200,7 +2846,7 @@
       "version": "5.6.3",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
       "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
-      "dev": true,
+      "devOptional": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
diff --git a/apps/canvas/server/package.json b/apps/canvas/back/package.json
similarity index 83%
rename from apps/canvas/server/package.json
rename to apps/canvas/back/package.json
index dc0496f..566a723 100644
--- a/apps/canvas/server/package.json
+++ b/apps/canvas/back/package.json
@@ -10,7 +10,8 @@
   "author": "",
   "license": "ISC",
   "dependencies": {
-    "@prisma/client": "^5.22.0",
+    "@prisma/client": "^6.6.0",
+    "axios": "^1.8.4",
     "express": "^4.21.1",
     "sqlite3": "^5.1.7"
   },
@@ -18,7 +19,7 @@
     "@types/express": "^5.0.0",
     "@types/node": "^22.9.1",
     "@types/sqlite3": "^3.1.11",
-    "prisma": "^5.22.0",
+    "prisma": "^6.6.0",
     "typescript": "^5.6.3"
   }
 }
diff --git a/apps/canvas/back/prisma/dodo.db b/apps/canvas/back/prisma/dodo.db
new file mode 100644
index 0000000..452bd48
--- /dev/null
+++ b/apps/canvas/back/prisma/dodo.db
Binary files differ
diff --git a/apps/canvas/server/prisma/migrations/20241122134801_init/migration.sql b/apps/canvas/back/prisma/migrations/20241122134801_init/migration.sql
similarity index 100%
rename from apps/canvas/server/prisma/migrations/20241122134801_init/migration.sql
rename to apps/canvas/back/prisma/migrations/20241122134801_init/migration.sql
diff --git a/apps/canvas/back/prisma/migrations/20250422140311_deploykeys/migration.sql b/apps/canvas/back/prisma/migrations/20250422140311_deploykeys/migration.sql
new file mode 100644
index 0000000..fc1946d
--- /dev/null
+++ b/apps/canvas/back/prisma/migrations/20250422140311_deploykeys/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Project" ADD COLUMN "deployKey" TEXT;
diff --git a/apps/canvas/back/prisma/migrations/20250422140427_instance_id/migration.sql b/apps/canvas/back/prisma/migrations/20250422140427_instance_id/migration.sql
new file mode 100644
index 0000000..f040507
--- /dev/null
+++ b/apps/canvas/back/prisma/migrations/20250422140427_instance_id/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Project" ADD COLUMN "instanceId" TEXT;
diff --git a/apps/canvas/back/prisma/migrations/migration_lock.toml b/apps/canvas/back/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000..2a5a444
--- /dev/null
+++ b/apps/canvas/back/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (e.g., Git)
+provider = "sqlite"
diff --git a/apps/canvas/server/prisma/schema.prisma b/apps/canvas/back/prisma/schema.prisma
similarity index 92%
rename from apps/canvas/server/prisma/schema.prisma
rename to apps/canvas/back/prisma/schema.prisma
index 39ea028..2fc0118 100644
--- a/apps/canvas/server/prisma/schema.prisma
+++ b/apps/canvas/back/prisma/schema.prisma
@@ -19,4 +19,6 @@
   name String
   state Bytes?
   draft Bytes?
+  instanceId String?
+  deployKey String?
 }
\ No newline at end of file
diff --git a/apps/canvas/server/tsconfig.json b/apps/canvas/back/tsconfig.json
similarity index 100%
rename from apps/canvas/server/tsconfig.json
rename to apps/canvas/back/tsconfig.json
diff --git a/apps/canvas/.gitignore b/apps/canvas/front/.gitignore
similarity index 100%
rename from apps/canvas/.gitignore
rename to apps/canvas/front/.gitignore
diff --git a/apps/canvas/README.md b/apps/canvas/front/README.md
similarity index 100%
rename from apps/canvas/README.md
rename to apps/canvas/front/README.md
diff --git a/apps/canvas/app.json b/apps/canvas/front/app.json
similarity index 100%
rename from apps/canvas/app.json
rename to apps/canvas/front/app.json
diff --git a/apps/canvas/components.json b/apps/canvas/front/components.json
similarity index 100%
rename from apps/canvas/components.json
rename to apps/canvas/front/components.json
diff --git a/apps/canvas/eslint.config.js b/apps/canvas/front/eslint.config.js
similarity index 100%
rename from apps/canvas/eslint.config.js
rename to apps/canvas/front/eslint.config.js
diff --git a/apps/canvas/index.html b/apps/canvas/front/index.html
similarity index 100%
rename from apps/canvas/index.html
rename to apps/canvas/front/index.html
diff --git a/apps/canvas/package-lock.json b/apps/canvas/front/package-lock.json
similarity index 100%
rename from apps/canvas/package-lock.json
rename to apps/canvas/front/package-lock.json
diff --git a/apps/canvas/package.json b/apps/canvas/front/package.json
similarity index 100%
rename from apps/canvas/package.json
rename to apps/canvas/front/package.json
diff --git a/apps/canvas/postcss.config.js b/apps/canvas/front/postcss.config.js
similarity index 100%
rename from apps/canvas/postcss.config.js
rename to apps/canvas/front/postcss.config.js
diff --git a/apps/canvas/src/App.css b/apps/canvas/front/src/App.css
similarity index 100%
rename from apps/canvas/src/App.css
rename to apps/canvas/front/src/App.css
diff --git a/apps/canvas/src/App.tsx b/apps/canvas/front/src/App.tsx
similarity index 100%
rename from apps/canvas/src/App.tsx
rename to apps/canvas/front/src/App.tsx
diff --git a/apps/canvas/src/Canvas.tsx b/apps/canvas/front/src/Canvas.tsx
similarity index 100%
rename from apps/canvas/src/Canvas.tsx
rename to apps/canvas/front/src/Canvas.tsx
diff --git a/apps/canvas/src/Config.tsx b/apps/canvas/front/src/Config.tsx
similarity index 100%
rename from apps/canvas/src/Config.tsx
rename to apps/canvas/front/src/Config.tsx
diff --git a/apps/canvas/src/Deployment.tsx b/apps/canvas/front/src/Deployment.tsx
similarity index 100%
rename from apps/canvas/src/Deployment.tsx
rename to apps/canvas/front/src/Deployment.tsx
diff --git a/apps/canvas/src/Header.tsx b/apps/canvas/front/src/Header.tsx
similarity index 100%
rename from apps/canvas/src/Header.tsx
rename to apps/canvas/front/src/Header.tsx
diff --git a/apps/canvas/src/Messages.tsx b/apps/canvas/front/src/Messages.tsx
similarity index 100%
rename from apps/canvas/src/Messages.tsx
rename to apps/canvas/front/src/Messages.tsx
diff --git a/apps/canvas/src/Tootls.tsx b/apps/canvas/front/src/Tootls.tsx
similarity index 100%
rename from apps/canvas/src/Tootls.tsx
rename to apps/canvas/front/src/Tootls.tsx
diff --git a/apps/canvas/src/assets/react.svg b/apps/canvas/front/src/assets/react.svg
similarity index 100%
rename from apps/canvas/src/assets/react.svg
rename to apps/canvas/front/src/assets/react.svg
diff --git a/apps/canvas/src/components/actions.tsx b/apps/canvas/front/src/components/actions.tsx
similarity index 100%
rename from apps/canvas/src/components/actions.tsx
rename to apps/canvas/front/src/components/actions.tsx
diff --git a/apps/canvas/src/components/canvas.tsx b/apps/canvas/front/src/components/canvas.tsx
similarity index 100%
rename from apps/canvas/src/components/canvas.tsx
rename to apps/canvas/front/src/components/canvas.tsx
diff --git a/apps/canvas/src/components/details.tsx b/apps/canvas/front/src/components/details.tsx
similarity index 100%
rename from apps/canvas/src/components/details.tsx
rename to apps/canvas/front/src/components/details.tsx
diff --git a/apps/canvas/src/components/handle-port-out.tsx b/apps/canvas/front/src/components/handle-port-out.tsx
similarity index 100%
rename from apps/canvas/src/components/handle-port-out.tsx
rename to apps/canvas/front/src/components/handle-port-out.tsx
diff --git a/apps/canvas/src/components/icon.tsx b/apps/canvas/front/src/components/icon.tsx
similarity index 100%
rename from apps/canvas/src/components/icon.tsx
rename to apps/canvas/front/src/components/icon.tsx
diff --git a/apps/canvas/src/components/node-app.tsx b/apps/canvas/front/src/components/node-app.tsx
similarity index 100%
rename from apps/canvas/src/components/node-app.tsx
rename to apps/canvas/front/src/components/node-app.tsx
diff --git a/apps/canvas/src/components/node-details.tsx b/apps/canvas/front/src/components/node-details.tsx
similarity index 100%
rename from apps/canvas/src/components/node-details.tsx
rename to apps/canvas/front/src/components/node-details.tsx
diff --git a/apps/canvas/src/components/node-gateway-https.tsx b/apps/canvas/front/src/components/node-gateway-https.tsx
similarity index 100%
rename from apps/canvas/src/components/node-gateway-https.tsx
rename to apps/canvas/front/src/components/node-gateway-https.tsx
diff --git a/apps/canvas/src/components/node-gateway-tcp.tsx b/apps/canvas/front/src/components/node-gateway-tcp.tsx
similarity index 100%
rename from apps/canvas/src/components/node-gateway-tcp.tsx
rename to apps/canvas/front/src/components/node-gateway-tcp.tsx
diff --git a/apps/canvas/src/components/node-github.tsx b/apps/canvas/front/src/components/node-github.tsx
similarity index 100%
rename from apps/canvas/src/components/node-github.tsx
rename to apps/canvas/front/src/components/node-github.tsx
diff --git a/apps/canvas/src/components/node-mongodb.tsx b/apps/canvas/front/src/components/node-mongodb.tsx
similarity index 100%
rename from apps/canvas/src/components/node-mongodb.tsx
rename to apps/canvas/front/src/components/node-mongodb.tsx
diff --git a/apps/canvas/src/components/node-postgresql.tsx b/apps/canvas/front/src/components/node-postgresql.tsx
similarity index 100%
rename from apps/canvas/src/components/node-postgresql.tsx
rename to apps/canvas/front/src/components/node-postgresql.tsx
diff --git a/apps/canvas/src/components/node-rect.tsx b/apps/canvas/front/src/components/node-rect.tsx
similarity index 100%
rename from apps/canvas/src/components/node-rect.tsx
rename to apps/canvas/front/src/components/node-rect.tsx
diff --git a/apps/canvas/src/components/node-volume.tsx b/apps/canvas/front/src/components/node-volume.tsx
similarity index 100%
rename from apps/canvas/src/components/node-volume.tsx
rename to apps/canvas/front/src/components/node-volume.tsx
diff --git a/apps/canvas/src/components/resources.tsx b/apps/canvas/front/src/components/resources.tsx
similarity index 100%
rename from apps/canvas/src/components/resources.tsx
rename to apps/canvas/front/src/components/resources.tsx
diff --git a/apps/canvas/src/components/ui/accordion.tsx b/apps/canvas/front/src/components/ui/accordion.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/accordion.tsx
rename to apps/canvas/front/src/components/ui/accordion.tsx
diff --git a/apps/canvas/src/components/ui/badge.tsx b/apps/canvas/front/src/components/ui/badge.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/badge.tsx
rename to apps/canvas/front/src/components/ui/badge.tsx
diff --git a/apps/canvas/src/components/ui/button.tsx b/apps/canvas/front/src/components/ui/button.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/button.tsx
rename to apps/canvas/front/src/components/ui/button.tsx
diff --git a/apps/canvas/src/components/ui/collapsible.tsx b/apps/canvas/front/src/components/ui/collapsible.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/collapsible.tsx
rename to apps/canvas/front/src/components/ui/collapsible.tsx
diff --git a/apps/canvas/src/components/ui/dialog.tsx b/apps/canvas/front/src/components/ui/dialog.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/dialog.tsx
rename to apps/canvas/front/src/components/ui/dialog.tsx
diff --git a/apps/canvas/src/components/ui/form.tsx b/apps/canvas/front/src/components/ui/form.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/form.tsx
rename to apps/canvas/front/src/components/ui/form.tsx
diff --git a/apps/canvas/src/components/ui/input.tsx b/apps/canvas/front/src/components/ui/input.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/input.tsx
rename to apps/canvas/front/src/components/ui/input.tsx
diff --git a/apps/canvas/src/components/ui/label.tsx b/apps/canvas/front/src/components/ui/label.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/label.tsx
rename to apps/canvas/front/src/components/ui/label.tsx
diff --git a/apps/canvas/src/components/ui/popover.tsx b/apps/canvas/front/src/components/ui/popover.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/popover.tsx
rename to apps/canvas/front/src/components/ui/popover.tsx
diff --git a/apps/canvas/src/components/ui/resizable.tsx b/apps/canvas/front/src/components/ui/resizable.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/resizable.tsx
rename to apps/canvas/front/src/components/ui/resizable.tsx
diff --git a/apps/canvas/src/components/ui/scroll-area.tsx b/apps/canvas/front/src/components/ui/scroll-area.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/scroll-area.tsx
rename to apps/canvas/front/src/components/ui/scroll-area.tsx
diff --git a/apps/canvas/src/components/ui/select.tsx b/apps/canvas/front/src/components/ui/select.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/select.tsx
rename to apps/canvas/front/src/components/ui/select.tsx
diff --git a/apps/canvas/src/components/ui/separator.tsx b/apps/canvas/front/src/components/ui/separator.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/separator.tsx
rename to apps/canvas/front/src/components/ui/separator.tsx
diff --git a/apps/canvas/src/components/ui/sheet.tsx b/apps/canvas/front/src/components/ui/sheet.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/sheet.tsx
rename to apps/canvas/front/src/components/ui/sheet.tsx
diff --git a/apps/canvas/src/components/ui/sidebar.tsx b/apps/canvas/front/src/components/ui/sidebar.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/sidebar.tsx
rename to apps/canvas/front/src/components/ui/sidebar.tsx
diff --git a/apps/canvas/src/components/ui/skeleton.tsx b/apps/canvas/front/src/components/ui/skeleton.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/skeleton.tsx
rename to apps/canvas/front/src/components/ui/skeleton.tsx
diff --git a/apps/canvas/src/components/ui/table.tsx b/apps/canvas/front/src/components/ui/table.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/table.tsx
rename to apps/canvas/front/src/components/ui/table.tsx
diff --git a/apps/canvas/src/components/ui/tabs.tsx b/apps/canvas/front/src/components/ui/tabs.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/tabs.tsx
rename to apps/canvas/front/src/components/ui/tabs.tsx
diff --git a/apps/canvas/src/components/ui/toast.tsx b/apps/canvas/front/src/components/ui/toast.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/toast.tsx
rename to apps/canvas/front/src/components/ui/toast.tsx
diff --git a/apps/canvas/src/components/ui/toaster.tsx b/apps/canvas/front/src/components/ui/toaster.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/toaster.tsx
rename to apps/canvas/front/src/components/ui/toaster.tsx
diff --git a/apps/canvas/src/components/ui/tooltip.tsx b/apps/canvas/front/src/components/ui/tooltip.tsx
similarity index 100%
rename from apps/canvas/src/components/ui/tooltip.tsx
rename to apps/canvas/front/src/components/ui/tooltip.tsx
diff --git a/apps/canvas/src/hooks/use-mobile.tsx b/apps/canvas/front/src/hooks/use-mobile.tsx
similarity index 100%
rename from apps/canvas/src/hooks/use-mobile.tsx
rename to apps/canvas/front/src/hooks/use-mobile.tsx
diff --git a/apps/canvas/src/hooks/use-toast.ts b/apps/canvas/front/src/hooks/use-toast.ts
similarity index 100%
rename from apps/canvas/src/hooks/use-toast.ts
rename to apps/canvas/front/src/hooks/use-toast.ts
diff --git a/apps/canvas/src/index.css b/apps/canvas/front/src/index.css
similarity index 100%
rename from apps/canvas/src/index.css
rename to apps/canvas/front/src/index.css
diff --git a/apps/canvas/src/lib/categories.ts b/apps/canvas/front/src/lib/categories.ts
similarity index 100%
rename from apps/canvas/src/lib/categories.ts
rename to apps/canvas/front/src/lib/categories.ts
diff --git a/apps/canvas/src/lib/config.ts b/apps/canvas/front/src/lib/config.ts
similarity index 94%
rename from apps/canvas/src/lib/config.ts
rename to apps/canvas/front/src/lib/config.ts
index f2a0784..fcea7c3 100644
--- a/apps/canvas/src/lib/config.ts
+++ b/apps/canvas/front/src/lib/config.ts
@@ -51,7 +51,7 @@
         name: string;
         alias?: string;
     }[]
-    ingress?: Ingress;
+    ingress?: Ingress[];
     expose?: PortDomain[];
     volume?: string[];
 };
@@ -114,19 +114,14 @@
                         name: e.name,
                         alias: "alias" in e ? e.alias : undefined,
                     })),
-                    ingress: ((i: GatewayHttpsNode | undefined) => {
-                        if (i === undefined) {
-                            return undefined;
-                        }
-                        return {
-                            network: networkMap.get(i.data.network!)!,
-                            subdomain: i.data.subdomain!,
-                            port: {
-                                name: n.data.ports.find((p) => p.id === i.data.https!.portId)!.name,
-                            },
-                            auth: { enabled: false },
-                        };
-                    })(ingressNodes.find((i) => i.data.https!.serviceId === n.id)),
+                    ingress: ingressNodes.filter((i) => i.data.https!.serviceId === n.id).map((i: GatewayHttpsNode): Ingress => ({
+                        network: networkMap.get(i.data.network!)!,
+                        subdomain: i.data.subdomain!,
+                        port: {
+                            name: n.data.ports.find((p) => p.id === i.data.https!.portId)!.name,
+                        },
+                        auth: { enabled: false },
+                    })),
                     expose: findExpose(n),
                 };
             }),
diff --git a/apps/canvas/src/lib/state.ts b/apps/canvas/front/src/lib/state.ts
similarity index 100%
rename from apps/canvas/src/lib/state.ts
rename to apps/canvas/front/src/lib/state.ts
diff --git a/apps/canvas/src/lib/utils.ts b/apps/canvas/front/src/lib/utils.ts
similarity index 100%
rename from apps/canvas/src/lib/utils.ts
rename to apps/canvas/front/src/lib/utils.ts
diff --git a/apps/canvas/src/main.tsx b/apps/canvas/front/src/main.tsx
similarity index 100%
rename from apps/canvas/src/main.tsx
rename to apps/canvas/front/src/main.tsx
diff --git a/apps/canvas/src/vite-env.d.ts b/apps/canvas/front/src/vite-env.d.ts
similarity index 100%
rename from apps/canvas/src/vite-env.d.ts
rename to apps/canvas/front/src/vite-env.d.ts
diff --git a/apps/canvas/tailwind.config.js b/apps/canvas/front/tailwind.config.js
similarity index 100%
rename from apps/canvas/tailwind.config.js
rename to apps/canvas/front/tailwind.config.js
diff --git a/apps/canvas/tsconfig.app.json b/apps/canvas/front/tsconfig.app.json
similarity index 100%
rename from apps/canvas/tsconfig.app.json
rename to apps/canvas/front/tsconfig.app.json
diff --git a/apps/canvas/tsconfig.json b/apps/canvas/front/tsconfig.json
similarity index 100%
rename from apps/canvas/tsconfig.json
rename to apps/canvas/front/tsconfig.json
diff --git a/apps/canvas/tsconfig.node.json b/apps/canvas/front/tsconfig.node.json
similarity index 100%
rename from apps/canvas/tsconfig.node.json
rename to apps/canvas/front/tsconfig.node.json
diff --git a/apps/canvas/vite.config.ts b/apps/canvas/front/vite.config.ts
similarity index 100%
rename from apps/canvas/vite.config.ts
rename to apps/canvas/front/vite.config.ts
diff --git a/apps/canvas/server/front/assets/index-DITJ3yy7.css b/apps/canvas/server/front/assets/index-DITJ3yy7.css
deleted file mode 100644
index 400cea4..0000000
--- a/apps/canvas/server/front/assets/index-DITJ3yy7.css
+++ /dev/null
@@ -1 +0,0 @@
-*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}: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
deleted file mode 100644
index 606d3cd..0000000
--- a/apps/canvas/server/front/assets/index-DRnLehre.js
+++ /dev/null
@@ -1,126 +0,0 @@
-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
deleted file mode 100644
index 4e6cd67..0000000
--- a/apps/canvas/server/front/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!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/go.mod b/apps/canvas/server/go.mod
deleted file mode 100644
index 1e52628..0000000
--- a/apps/canvas/server/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module dodo.canvas
-
-go 1.23.3
diff --git a/apps/canvas/server/go.sum b/apps/canvas/server/go.sum
deleted file mode 100644
index e69de29..0000000
--- a/apps/canvas/server/go.sum
+++ /dev/null
diff --git a/apps/canvas/server/index.ts b/apps/canvas/server/index.ts
deleted file mode 100644
index aa1c782..0000000
--- a/apps/canvas/server/index.ts
+++ /dev/null
@@ -1,187 +0,0 @@
-import { PrismaClient } from "@prisma/client"
-import { request } from "node:http";
-import express, { response } from "express";
-import { Database, Statement } from "sqlite3";
-import fs from "node:fs/promises"
-import { Http2ServerRequest } from "node:http2";
-
-const privateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQAAAKA42oIlONqC
-JQAAAAtzc2gtZWQyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQ
-AAAEC2CdpXtaFfqA8/mqjf9uITU1mrPOI4CeWgiQFEefFW1/K58vMu0MwIzdZT+mqpIBkh
-l48p9+/YwDCZv7MgTesFAAAAGXJvb3RAY2FudmFzYnVpbGRlci1tYXN0ZXIBAgME
------END OPENSSH PRIVATE KEY-----`;
-
-const db = new PrismaClient();
-
-const handleProjectCreate: express.Handler = async (req, resp) => {
-    try {
-        const { id } = await db.project.create({
-            data: {
-                userId: req.get("x-forwarded-userid")!,
-                name: req.body.name,
-            },
-        });
-        resp.status(200);
-        resp.header("Content-Type", "application/json");
-        resp.write(JSON.stringify({
-            id,
-        }))
-    } catch (e) {
-        console.log(e);
-        resp.status(500);
-    } finally {
-        resp.end();
-    }
-};
-
-const handleProjectAll: express.Handler = async (req, resp) => {
-    try {
-        const r = await db.project.findMany({
-            where: {
-                userId: req.get("x-forwarded-userid")!,
-            },
-        });
-        resp.status(200);
-        resp.header("Content-Type", "application/json");
-        resp.write(JSON.stringify(r.map((p) => ({
-            id: p.id.toString(),
-            name: p.name,
-        }))))
-    } catch (e) {
-        console.log(e);
-        resp.status(500);
-    } finally {
-        resp.end();
-    }
-};
-
-const handleSave: express.Handler = async (req, resp) => {
-    try {
-        await db.project.update({
-            where: {
-                id: Number(req.params["projectId"]),
-            },
-            data: {
-                draft: Buffer.from(JSON.stringify(req.body)),
-            },
-        });
-        resp.status(200);
-    } catch (e) {
-        console.log(e);
-        resp.status(500)
-    } finally {
-        resp.end();
-    }
-};
-
-const handleSavedGet: express.Handler = async (req, resp) => {
-    try {
-        const r = await db.project.findUnique({
-            where: {
-                id: Number(req.params["projectId"]),
-            },
-            select: {
-                draft: true,
-            }
-        });
-        if (r == null) {
-            resp.status(404);
-        } else {
-            resp.status(200);
-            resp.header("content-type", "application/json");
-            if (r.draft == null) {
-                resp.send({
-                    nodes: [], 
-                    edges: [],
-                    viewport: { x: 0, y: 0, zoom: 1},
-                });    
-            } else {
-                resp.send(JSON.parse(r.draft!.toString()));
-            }
-        }
-    } catch (e) {
-        console.log(e);
-        resp.status(500);
-    } finally {
-        resp.end();
-    }
-};
-
-const handleDeploy: express.Handler = async (req, resp) => {
-    try {
-        console.log(req.params);
-        const state = Buffer.from(JSON.stringify(req.body.state));
-        await db.project.update({
-            where: {
-                id: Number(req.params["projectId"]),
-            },
-            data: {
-                draft: state,
-            },
-        });
-        const result = await new Promise<number>((resolve) => {
-            const r = request("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", {
-                method: "POST",
-                headers: {
-                    "content-type": "application/json",
-                },
-            }, (res) => {
-                res.on("end", () => {
-                    resolve(res.statusCode!);
-                });
-                res.on("close", () => {
-                    resolve(res.statusCode!);
-                });
-                res.on("error", () => {
-                    resolve(res.statusCode!);
-                });
-                res.on("data", (data) => console.log(data));
-                res.on("pause", () => console.log("pause"));
-                res.on("readable", () => console.log("readable"));
-                res.on("resume", () => console.log("resume"));
-            });
-            r.write(JSON.stringify({
-                id: req.params["projectId"],
-                sshPrivateKey: privateKey,
-                config: req.body.config,
-            }));
-            r.end();
-        });
-        resp.status(result);
-        if (result === 200) {
-            await db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
-                data: {
-                    state,
-                },
-            });
-        }
-    } catch (e) {
-        console.log(e);
-        resp.status(500);
-    } finally {
-        resp.end();
-    }
-};
-
-async function start() {
-    await db.$connect();
-    const app = express();
-    app.use(express.json());
-    app.post("/api/project/:projectId/saved", handleSave);
-    app.get("/api/project/:projectId/saved", handleSavedGet);
-    app.post("/api/project/:projectId/deploy", handleDeploy);
-    app.get("/api/project", handleProjectAll);
-    app.post("/api/project", handleProjectCreate);
-    app.use("/assets", express.static("../dist/assets"));
-    app.use("/", express.static("../dist"));
-    app.listen(3000, () => {
-        console.log("started");
-    });
-}
-
-start();
\ No newline at end of file
diff --git a/apps/canvas/server/main.go b/apps/canvas/server/main.go
deleted file mode 100644
index 82db481..0000000
--- a/apps/canvas/server/main.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-	"os"
-)
-
-type deployReq struct {
-	State  any            `json:"state"`
-	Config map[string]any `json:"config"`
-}
-
-type req struct {
-	Id            string         `json:"id"`
-	SSHPrivateKey string         `json:"sshPrivateKey"`
-	Config        map[string]any `json:"config"`
-}
-
-const publicKey = `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPK58vMu0MwIzdZT+mqpIBkhl48p9+/YwDCZv7MgTesF`
-const privateKey = `-----BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
-QyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQAAAKA42oIlONqC
-JQAAAAtzc2gtZWQyNTUxOQAAACDyufLzLtDMCM3WU/pqqSAZIZePKffv2MAwmb+zIE3rBQ
-AAAEC2CdpXtaFfqA8/mqjf9uITU1mrPOI4CeWgiQFEefFW1/K58vMu0MwIzdZT+mqpIBkh
-l48p9+/YwDCZv7MgTesFAAAAGXJvb3RAY2FudmFzYnVpbGRlci1tYXN0ZXIBAgME
------END OPENSSH PRIVATE KEY-----`
-
-func handleSave(w http.ResponseWriter, r *http.Request) {
-	var state map[string]any
-	if err := json.NewDecoder(r.Body).Decode(&state); err != nil {
-		panic(err)
-	}
-	out, err := os.Create("/tmp/state.json")
-	if err != nil {
-		panic(err)
-	}
-	defer out.Close()
-	if err := json.NewEncoder(out).Encode(state); err != nil {
-		panic(err)
-	}
-}
-
-func handleSavedGet(w http.ResponseWriter, r *http.Request) {
-	inp, err := os.Open("/tmp/state.json")
-	if err != nil {
-		panic(err)
-	}
-	defer inp.Close()
-	io.Copy(w, inp)
-}
-
-func handleDeploy(w http.ResponseWriter, r *http.Request) {
-	var dr deployReq
-	if err := json.NewDecoder(r.Body).Decode(&dr); err != nil {
-		http.Error(w, err.Error(), http.StatusBadRequest)
-		return
-	}
-	req := req{
-		Id:            "test",
-		SSHPrivateKey: privateKey,
-		Config:        dr.Config,
-	}
-	var buf bytes.Buffer
-	if err := json.NewEncoder(&buf).Encode(req); err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	resp, err := http.Post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", "application/json", &buf)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	var b bytes.Buffer
-	io.Copy(&b, resp.Body)
-	if resp.StatusCode != http.StatusOK {
-		http.Error(w, b.String(), http.StatusInternalServerError)
-		return
-	}
-}
-
-type Network struct {
-	Name   string `json:"name"`
-	Domain string `json:"domain"`
-}
-
-type envResp struct {
-	DeployKey string    `json:"deployKey"`
-	Networks  []Network `json:"networks"`
-}
-
-func handleEnv(w http.ResponseWriter, r *http.Request) {
-	resp := envResp{
-		DeployKey: publicKey,
-		Networks: []Network{{
-			Name:   "Public",
-			Domain: "v1.dodo.cloud",
-		}, {
-			Name:   "Private",
-			Domain: "p.v1.dodo.cloud",
-		}},
-	}
-	fmt.Println(resp)
-	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("./front")))
-	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
-}
diff --git a/apps/canvas/server/prisma/migrations/migration_lock.toml b/apps/canvas/server/prisma/migrations/migration_lock.toml
deleted file mode 100644
index e5e5c47..0000000
--- a/apps/canvas/server/prisma/migrations/migration_lock.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-# Please do not edit this file manually
-# It should be added in your version-control system (i.e. Git)
-provider = "sqlite"
\ No newline at end of file
