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,{})}));
