From 89bb4d8b3ea4f379587e9888d19048f29c0f2b95 Mon Sep 17 00:00:00 2001 From: Allan Nielsen <2005474+Allann@users.noreply.github.com> Date: Tue, 19 May 2026 17:19:36 +1000 Subject: [PATCH 1/5] feat: overhaul kanban board UX inspired by as-notes design - Priority chips with semantic colour coding (critical/high/normal/low) - Column accent top-border colours per column - Drag-over highlight with focus border colour - Card drag opacity/scale feedback - Assignee initials avatar circle - Tag pills with overflow count instead of comma list - + Add task button on every column (not just backlog) - Done column day-window filter (7/14/30/all) with hidden count footer - Edit modal replaced with centred overlay with backdrop dismiss - Priority field changed to select dropdown - Empty column drop-zone placeholder - Auto-focus new task input; Escape to cancel Co-Authored-By: Claude Sonnet 4.6 --- ai-dev-vscode/dist/webviews/kanban/main.js | 459 +++++++--- .../dist/webviews/kanban/main.js.map | 6 +- ai-dev-vscode/src/webviews/kanban/main.tsx | 833 +++++++++++++----- 3 files changed, 966 insertions(+), 332 deletions(-) diff --git a/ai-dev-vscode/dist/webviews/kanban/main.js b/ai-dev-vscode/dist/webviews/kanban/main.js index f654e98..ae621f2 100644 --- a/ai-dev-vscode/dist/webviews/kanban/main.js +++ b/ai-dev-vscode/dist/webviews/kanban/main.js @@ -1,214 +1,477 @@ -"use strict";(()=>{var jv=Object.create;var Gf=Object.defineProperty;var Zv=Object.getOwnPropertyDescriptor;var Vv=Object.getOwnPropertyNames;var Lv=Object.getPrototypeOf,Kv=Object.prototype.hasOwnProperty;var Pl=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports);var Jv=(l,t,a,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of Vv(t))!Kv.call(l,e)&&e!==a&&Gf(l,e,{get:()=>t[e],enumerable:!(u=Zv(t,e))||u.enumerable});return l};var Se=(l,t,a)=>(a=l!=null?jv(Lv(l)):{},Jv(t||!l||!l.__esModule?Gf(a,"default",{value:l,enumerable:!0}):a,l));var Wf=Pl(_=>{"use strict";var Pn=Symbol.for("react.transitional.element"),wv=Symbol.for("react.portal"),kv=Symbol.for("react.fragment"),Wv=Symbol.for("react.strict_mode"),$v=Symbol.for("react.profiler"),Fv=Symbol.for("react.consumer"),Iv=Symbol.for("react.context"),Pv=Symbol.for("react.forward_ref"),ly=Symbol.for("react.suspense"),ty=Symbol.for("react.memo"),Vf=Symbol.for("react.lazy"),ay=Symbol.for("react.activity"),Xf=Symbol.iterator;function uy(l){return l===null||typeof l!="object"?null:(l=Xf&&l[Xf]||l["@@iterator"],typeof l=="function"?l:null)}var Lf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Kf=Object.assign,Jf={};function Aa(l,t,a){this.props=l,this.context=t,this.refs=Jf,this.updater=a||Lf}Aa.prototype.isReactComponent={};Aa.prototype.setState=function(l,t){if(typeof l!="object"&&typeof l!="function"&&l!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,l,t,"setState")};Aa.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,"forceUpdate")};function wf(){}wf.prototype=Aa.prototype;function li(l,t,a){this.props=l,this.context=t,this.refs=Jf,this.updater=a||Lf}var ti=li.prototype=new wf;ti.constructor=li;Kf(ti,Aa.prototype);ti.isPureReactComponent=!0;var Qf=Array.isArray;function In(){}var J={H:null,A:null,T:null,S:null},kf=Object.prototype.hasOwnProperty;function ai(l,t,a){var u=a.ref;return{$$typeof:Pn,type:l,key:t,ref:u!==void 0?u:null,props:a}}function ey(l,t){return ai(l.type,t,l.props)}function ui(l){return typeof l=="object"&&l!==null&&l.$$typeof===Pn}function ny(l){var t={"=":"=0",":":"=2"};return"$"+l.replace(/[=:]/g,function(a){return t[a]})}var jf=/\/+/g;function Fn(l,t){return typeof l=="object"&&l!==null&&l.key!=null?ny(""+l.key):t.toString(36)}function iy(l){switch(l.status){case"fulfilled":return l.value;case"rejected":throw l.reason;default:switch(typeof l.status=="string"?l.then(In,In):(l.status="pending",l.then(function(t){l.status==="pending"&&(l.status="fulfilled",l.value=t)},function(t){l.status==="pending"&&(l.status="rejected",l.reason=t)})),l.status){case"fulfilled":return l.value;case"rejected":throw l.reason}}throw l}function pa(l,t,a,u,e){var n=typeof l;(n==="undefined"||n==="boolean")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case"bigint":case"string":case"number":i=!0;break;case"object":switch(l.$$typeof){case Pn:case wv:i=!0;break;case Vf:return i=l._init,pa(i(l._payload),t,a,u,e)}}if(i)return e=e(l),i=u===""?"."+Fn(l,0):u,Qf(e)?(a="",i!=null&&(a=i.replace(jf,"$&/")+"/"),pa(e,t,a,"",function(v){return v})):e!=null&&(ui(e)&&(e=ey(e,a+(e.key==null||l&&l.key===e.key?"":(""+e.key).replace(jf,"$&/")+"/")+i)),t.push(e)),1;i=0;var c=u===""?".":u+":";if(Qf(l))for(var f=0;f{"use strict";$f.exports=Wf()});var i0=Pl($=>{"use strict";function ci(l,t){var a=l.length;l.push(t);l:for(;0>>1,e=l[u];if(0>>1;uTe(c,a))fTe(v,c)?(l[u]=v,l[f]=a,u=f):(l[u]=c,l[i]=a,u=i);else if(fTe(v,a))l[u]=v,l[f]=a,u=f;else break l}}return t}function Te(l,t){var a=l.sortIndex-t.sortIndex;return a!==0?a:l.id-t.id}$.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(Ff=performance,$.unstable_now=function(){return Ff.now()}):(ei=Date,If=ei.now(),$.unstable_now=function(){return ei.now()-If});var Ff,ei,If,ct=[],Dt=[],dy=1,Gl=null,Sl=3,fi=!1,hu=!1,gu=!1,di=!1,t0=typeof setTimeout=="function"?setTimeout:null,a0=typeof clearTimeout=="function"?clearTimeout:null,Pf=typeof setImmediate<"u"?setImmediate:null;function re(l){for(var t=lt(Dt);t!==null;){if(t.callback===null)Ee(Dt);else if(t.startTime<=l)Ee(Dt),t.sortIndex=t.expirationTime,ci(ct,t);else break;t=lt(Dt)}}function oi(l){if(gu=!1,re(l),!hu)if(lt(ct)!==null)hu=!0,_a||(_a=!0,Oa());else{var t=lt(Dt);t!==null&&vi(oi,t.startTime-l)}}var _a=!1,Su=-1,u0=5,e0=-1;function n0(){return di?!0:!($.unstable_now()-e0l&&n0());){var u=Gl.callback;if(typeof u=="function"){Gl.callback=null,Sl=Gl.priorityLevel;var e=u(Gl.expirationTime<=l);if(l=$.unstable_now(),typeof e=="function"){Gl.callback=e,re(l),t=!0;break t}Gl===lt(ct)&&Ee(ct),re(l)}else Ee(ct);Gl=lt(ct)}if(Gl!==null)t=!0;else{var n=lt(Dt);n!==null&&vi(oi,n.startTime-l),t=!1}}break l}finally{Gl=null,Sl=a,fi=!1}t=void 0}}finally{t?Oa():_a=!1}}}var Oa;typeof Pf=="function"?Oa=function(){Pf(ni)}:typeof MessageChannel<"u"?(ii=new MessageChannel,l0=ii.port2,ii.port1.onmessage=ni,Oa=function(){l0.postMessage(null)}):Oa=function(){t0(ni,0)};var ii,l0;function vi(l,t){Su=t0(function(){l($.unstable_now())},t)}$.unstable_IdlePriority=5;$.unstable_ImmediatePriority=1;$.unstable_LowPriority=4;$.unstable_NormalPriority=3;$.unstable_Profiling=null;$.unstable_UserBlockingPriority=2;$.unstable_cancelCallback=function(l){l.callback=null};$.unstable_forceFrameRate=function(l){0>l||125u?(l.sortIndex=a,ci(Dt,l),lt(ct)===null&&l===lt(Dt)&&(gu?(a0(Su),Su=-1):gu=!0,vi(oi,a-u))):(l.sortIndex=e,ci(ct,l),hu||fi||(hu=!0,_a||(_a=!0,Oa()))),l};$.unstable_shouldYield=n0;$.unstable_wrapCallback=function(l){var t=Sl;return function(){var a=Sl;Sl=t;try{return l.apply(this,arguments)}finally{Sl=a}}}});var f0=Pl((km,c0)=>{"use strict";c0.exports=i0()});var o0=Pl(zl=>{"use strict";var oy=ze();function d0(l){var t="https://react.dev/errors/"+l;if(1{"use strict";function v0(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(v0)}catch(l){console.error(l)}}v0(),y0.exports=o0()});var _v=Pl(Wn=>{"use strict";var cl=f0(),Xd=ze(),sy=s0();function b(l){var t="https://react.dev/errors/"+l;if(1Ba||(l.current=$i[Ba],$i[Ba]=null,Ba--)}function L(l,t){Ba++,$i[Ba]=l.current,l.current=t}var et=nt(null),Lu=nt(null),jt=nt(null),un=nt(null);function en(l,t){switch(L(jt,t),L(Lu,l),L(et,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Ed(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Ed(t),l=yv(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ol(et),L(et,l)}function Fa(){ol(et),ol(Lu),ol(jt)}function Fi(l){l.memoizedState!==null&&L(un,l);var t=et.current,a=yv(t,l.type);t!==a&&(L(Lu,l),L(et,a))}function nn(l){Lu.current===l&&(ol(et),ol(Lu)),un.current===l&&(ol(un),te._currentValue=ca)}var yi,g0;function ua(l){if(yi===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);yi=t&&t[1]||"",g0=-1{var u1=Object.create;var Ff=Object.defineProperty;var e1=Object.getOwnPropertyDescriptor;var n1=Object.getOwnPropertyNames;var i1=Object.getPrototypeOf,c1=Object.prototype.hasOwnProperty;var lt=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports);var f1=(l,t,a,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of n1(t))!c1.call(l,e)&&e!==a&&Ff(l,e,{get:()=>t[e],enumerable:!(u=e1(t,e))||u.enumerable});return l};var pe=(l,t,a)=>(a=l!=null?u1(i1(l)):{},f1(t||!l||!l.__esModule?Ff(a,"default",{value:l,enumerable:!0}):a,l));var fo=lt(D=>{"use strict";var ui=Symbol.for("react.transitional.element"),o1=Symbol.for("react.portal"),d1=Symbol.for("react.fragment"),s1=Symbol.for("react.strict_mode"),v1=Symbol.for("react.profiler"),m1=Symbol.for("react.consumer"),y1=Symbol.for("react.context"),r1=Symbol.for("react.forward_ref"),g1=Symbol.for("react.suspense"),b1=Symbol.for("react.memo"),ao=Symbol.for("react.lazy"),h1=Symbol.for("react.activity"),If=Symbol.iterator;function S1(l){return l===null||typeof l!="object"?null:(l=If&&l[If]||l["@@iterator"],typeof l=="function"?l:null)}var uo={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},eo=Object.assign,no={};function Oa(l,t,a){this.props=l,this.context=t,this.refs=no,this.updater=a||uo}Oa.prototype.isReactComponent={};Oa.prototype.setState=function(l,t){if(typeof l!="object"&&typeof l!="function"&&l!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,l,t,"setState")};Oa.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,"forceUpdate")};function io(){}io.prototype=Oa.prototype;function ei(l,t,a){this.props=l,this.context=t,this.refs=no,this.updater=a||uo}var ni=ei.prototype=new io;ni.constructor=ei;eo(ni,Oa.prototype);ni.isPureReactComponent=!0;var Pf=Array.isArray;function ai(){}var K={H:null,A:null,T:null,S:null},co=Object.prototype.hasOwnProperty;function ii(l,t,a){var u=a.ref;return{$$typeof:ui,type:l,key:t,ref:u!==void 0?u:null,props:a}}function p1(l,t){return ii(l.type,t,l.props)}function ci(l){return typeof l=="object"&&l!==null&&l.$$typeof===ui}function z1(l){var t={"=":"=0",":":"=2"};return"$"+l.replace(/[=:]/g,function(a){return t[a]})}var lo=/\/+/g;function ti(l,t){return typeof l=="object"&&l!==null&&l.key!=null?z1(""+l.key):t.toString(36)}function T1(l){switch(l.status){case"fulfilled":return l.value;case"rejected":throw l.reason;default:switch(typeof l.status=="string"?l.then(ai,ai):(l.status="pending",l.then(function(t){l.status==="pending"&&(l.status="fulfilled",l.value=t)},function(t){l.status==="pending"&&(l.status="rejected",l.reason=t)})),l.status){case"fulfilled":return l.value;case"rejected":throw l.reason}}throw l}function Aa(l,t,a,u,e){var n=typeof l;(n==="undefined"||n==="boolean")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case"bigint":case"string":case"number":i=!0;break;case"object":switch(l.$$typeof){case ui:case o1:i=!0;break;case ao:return i=l._init,Aa(i(l._payload),t,a,u,e)}}if(i)return e=e(l),i=u===""?"."+ti(l,0):u,Pf(e)?(a="",i!=null&&(a=i.replace(lo,"$&/")+"/"),Aa(e,t,a,"",function(s){return s})):e!=null&&(ci(e)&&(e=p1(e,a+(e.key==null||l&&l.key===e.key?"":(""+e.key).replace(lo,"$&/")+"/")+i)),t.push(e)),1;i=0;var c=u===""?".":u+":";if(Pf(l))for(var f=0;f{"use strict";oo.exports=fo()});var po=lt(W=>{"use strict";function si(l,t){var a=l.length;l.push(t);l:for(;0>>1,e=l[u];if(0>>1;uEe(c,a))fEe(s,c)?(l[u]=s,l[f]=a,u=f):(l[u]=c,l[i]=a,u=i);else if(fEe(s,a))l[u]=s,l[f]=a,u=f;else break l}}return t}function Ee(l,t){var a=l.sortIndex-t.sortIndex;return a!==0?a:l.id-t.id}W.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(so=performance,W.unstable_now=function(){return so.now()}):(fi=Date,vo=fi.now(),W.unstable_now=function(){return fi.now()-vo});var so,fi,vo,ft=[],Mt=[],O1=1,Xl=null,hl=3,vi=!1,bu=!1,hu=!1,mi=!1,ro=typeof setTimeout=="function"?setTimeout:null,go=typeof clearTimeout=="function"?clearTimeout:null,mo=typeof setImmediate<"u"?setImmediate:null;function Ae(l){for(var t=tt(Mt);t!==null;){if(t.callback===null)Oe(Mt);else if(t.startTime<=l)Oe(Mt),t.sortIndex=t.expirationTime,si(ft,t);else break;t=tt(Mt)}}function yi(l){if(hu=!1,Ae(l),!bu)if(tt(ft)!==null)bu=!0,Da||(Da=!0,_a());else{var t=tt(Mt);t!==null&&ri(yi,t.startTime-l)}}var Da=!1,Su=-1,bo=5,ho=-1;function So(){return mi?!0:!(W.unstable_now()-hol&&So());){var u=Xl.callback;if(typeof u=="function"){Xl.callback=null,hl=Xl.priorityLevel;var e=u(Xl.expirationTime<=l);if(l=W.unstable_now(),typeof e=="function"){Xl.callback=e,Ae(l),t=!0;break t}Xl===tt(ft)&&Oe(ft),Ae(l)}else Oe(ft);Xl=tt(ft)}if(Xl!==null)t=!0;else{var n=tt(Mt);n!==null&&ri(yi,n.startTime-l),t=!1}}break l}finally{Xl=null,hl=a,vi=!1}t=void 0}}finally{t?_a():Da=!1}}}var _a;typeof mo=="function"?_a=function(){mo(oi)}:typeof MessageChannel<"u"?(di=new MessageChannel,yo=di.port2,di.port1.onmessage=oi,_a=function(){yo.postMessage(null)}):_a=function(){ro(oi,0)};var di,yo;function ri(l,t){Su=ro(function(){l(W.unstable_now())},t)}W.unstable_IdlePriority=5;W.unstable_ImmediatePriority=1;W.unstable_LowPriority=4;W.unstable_NormalPriority=3;W.unstable_Profiling=null;W.unstable_UserBlockingPriority=2;W.unstable_cancelCallback=function(l){l.callback=null};W.unstable_forceFrameRate=function(l){0>l||125u?(l.sortIndex=a,si(Mt,l),tt(ft)===null&&l===tt(Mt)&&(hu?(go(Su),Su=-1):hu=!0,ri(yi,a-u))):(l.sortIndex=e,si(ft,l),bu||vi||(bu=!0,Da||(Da=!0,_a()))),l};W.unstable_shouldYield=So;W.unstable_wrapCallback=function(l){var t=hl;return function(){var a=hl;hl=t;try{return l.apply(this,arguments)}finally{hl=a}}}});var To=lt((yr,zo)=>{"use strict";zo.exports=po()});var Ao=lt(pl=>{"use strict";var _1=Te();function Eo(l){var t="https://react.dev/errors/"+l;if(1{"use strict";function Oo(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Oo)}catch(l){console.error(l)}}Oo(),_o.exports=Ao()});var Xv=lt(In=>{"use strict";var fl=To(),Pd=Te(),N1=Do();function h(l){var t="https://react.dev/errors/"+l;if(1Ba||(l.current=lc[Ba],lc[Ba]=null,Ba--)}function L(l,t){Ba++,lc[Ba]=l.current,l.current=t}var nt=it(null),Ju=it(null),jt=it(null),cn=it(null);function fn(l,t){switch(L(jt,t),L(Ju,l),L(nt,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?qd(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=qd(t),l=Ov(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}vl(nt),L(nt,l)}function Ia(){vl(nt),vl(Ju),vl(jt)}function tc(l){l.memoizedState!==null&&L(cn,l);var t=nt.current,a=Ov(t,l.type);t!==a&&(L(Ju,l),L(nt,a))}function on(l){Ju.current===l&&(vl(nt),vl(Ju)),cn.current===l&&(vl(cn),ue._currentValue=fa)}var gi,Uo;function ea(l){if(gi===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);gi=t&&t[1]||"",Uo=-1)":-1e||f[u]!==v[e]){var h=` -`+f[u].replace(" at new "," at ");return l.displayName&&h.includes("")&&(h=h.replace("",l.displayName)),h}while(1<=u&&0<=e);break}}}finally{si=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?ua(a):""}function by(l,t){switch(l.tag){case 26:case 27:case 5:return ua(l.type);case 16:return ua("Lazy");case 13:return l.child!==t&&t!==null?ua("Suspense Fallback"):ua("Suspense");case 19:return ua("SuspenseList");case 0:case 15:return mi(l.type,!1);case 11:return mi(l.type.render,!1);case 1:return mi(l.type,!0);case 31:return ua("Activity");default:return""}}function S0(l){try{var t="",a=null;do t+=by(l,a),a=l,l=l.return;while(l);return t}catch(u){return` +`+gi+l+Uo}var bi=!1;function hi(l,t){if(!l||bi)return"";bi=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var u={DetermineComponentFrameRoot:function(){try{if(t){var b=function(){throw Error()};if(Object.defineProperty(b.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(b,[])}catch(y){var m=y}Reflect.construct(l,[],b)}else{try{b.call()}catch(y){m=y}l.call(b.prototype)}}else{try{throw Error()}catch(y){m=y}(b=l())&&typeof b.catch=="function"&&b.catch(function(){})}}catch(y){if(y&&m&&typeof y.stack=="string")return[y.stack,m.stack]}return[null,null]}};u.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var e=Object.getOwnPropertyDescriptor(u.DetermineComponentFrameRoot,"name");e&&e.configurable&&Object.defineProperty(u.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var n=u.DetermineComponentFrameRoot(),i=n[0],c=n[1];if(i&&c){var f=i.split(` +`),s=c.split(` +`);for(e=u=0;ue||f[u]!==s[e]){var r=` +`+f[u].replace(" at new "," at ");return l.displayName&&r.includes("")&&(r=r.replace("",l.displayName)),r}while(1<=u&&0<=e);break}}}finally{bi=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?ea(a):""}function B1(l,t){switch(l.tag){case 26:case 27:case 5:return ea(l.type);case 16:return ea("Lazy");case 13:return l.child!==t&&t!==null?ea("Suspense Fallback"):ea("Suspense");case 19:return ea("SuspenseList");case 0:case 15:return hi(l.type,!1);case 11:return hi(l.type.render,!1);case 1:return hi(l.type,!0);case 31:return ea("Activity");default:return""}}function xo(l){try{var t="",a=null;do t+=B1(l,a),a=l,l=l.return;while(l);return t}catch(u){return` Error generating stack: `+u.message+` -`+u.stack}}var Ii=Object.prototype.hasOwnProperty,Zc=cl.unstable_scheduleCallback,hi=cl.unstable_cancelCallback,zy=cl.unstable_shouldYield,Ty=cl.unstable_requestPaint,Cl=cl.unstable_now,ry=cl.unstable_getCurrentPriorityLevel,Jd=cl.unstable_ImmediatePriority,wd=cl.unstable_UserBlockingPriority,cn=cl.unstable_NormalPriority,Ey=cl.unstable_LowPriority,kd=cl.unstable_IdlePriority,py=cl.log,Ay=cl.unstable_setDisableYieldValue,ne=null,Bl=null;function Yt(l){if(typeof py=="function"&&Ay(l),Bl&&typeof Bl.setStrictMode=="function")try{Bl.setStrictMode(ne,l)}catch{}}var ql=Math.clz32?Math.clz32:My,Oy=Math.log,_y=Math.LN2;function My(l){return l>>>=0,l===0?32:31-(Oy(l)/_y|0)|0}var Oe=256,_e=262144,Me=4194304;function ea(l){var t=l&42;if(t!==0)return t;switch(l&-l){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Bn(l,t,a){var u=l.pendingLanes;if(u===0)return 0;var e=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=u&134217727;return c!==0?(u=c&~n,u!==0?e=ea(u):(i&=c,i!==0?e=ea(i):a||(a=c&~l,a!==0&&(e=ea(a))))):(c=u&~n,c!==0?e=ea(c):i!==0?e=ea(i):a||(a=u&~l,a!==0&&(e=ea(a)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:e}function ie(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Dy(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Wd(){var l=Me;return Me<<=1,(Me&62914560)===0&&(Me=4194304),l}function gi(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function ce(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Uy(l,t,a,u,e,n){var i=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,v=l.hiddenUpdates;for(a=i&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var Ry=/[\n"\\]/g;function Vl(l){return l.replace(Ry,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function tc(l,t,a,u,e,n,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+Ql(t)):l.value!==""+Ql(t)&&(l.value=""+Ql(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?ac(l,i,Ql(t)):a!=null?ac(l,i,Ql(a)):u!=null&&l.removeAttribute("value"),e==null&&n!=null&&(l.defaultChecked=!!n),e!=null&&(l.checked=e&&typeof e!="function"&&typeof e!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+Ql(c):l.removeAttribute("name")}function e1(l,t,a,u,e,n,i,c){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){lc(l);return}a=a!=null?""+Ql(a):"",t=t!=null?""+Ql(t):a,c||t===l.value||(l.value=t),l.defaultValue=t}u=u??e,u=typeof u!="function"&&typeof u!="symbol"&&!!u,l.checked=c?l.checked:!!u,l.defaultChecked=!!u,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),lc(l)}function ac(l,t,a){t==="number"&&fn(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ka(l,t,a,u){if(l=l.options,t){t={};for(var e=0;e"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ec=!1;if(rt)try{Ma={},Object.defineProperty(Ma,"passive",{get:function(){ec=!0}}),window.addEventListener("test",Ma,Ma),window.removeEventListener("test",Ma,Ma)}catch{ec=!1}var Ma,xt=null,kc=null,Le=null;function d1(){if(Le)return Le;var l,t=kc,a=t.length,u,e="value"in xt?xt.value:xt.textContent,n=e.length;for(l=0;l=Hu),D0=" ",U0=!1;function v1(l,t){switch(l){case"keyup":return ds.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function y1(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ya=!1;function vs(l,t){switch(l){case"compositionend":return y1(t);case"keypress":return t.which!==32?null:(U0=!0,D0);case"textInput":return l=t.data,l===D0&&U0?null:l;default:return null}}function ys(l,t){if(Ya)return l==="compositionend"||!$c&&v1(l,t)?(l=d1(),Le=kc=xt=null,Ya=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=u}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=B0(a)}}function g1(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?g1(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function S1(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=fn(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=fn(l.document)}return t}function Fc(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var Ts=rt&&"documentMode"in document&&11>=document.documentMode,xa=null,nc=null,Bu=null,ic=!1;function R0(l,t,a){var u=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;ic||xa==null||xa!==fn(u)||(u=xa,"selectionStart"in u&&Fc(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Bu&&wu(Bu,u)||(Bu=u,u=_n(nc,"onSelect"),0>=i,e-=i,tt=1<<32-ql(t)+e|a<O?(D=T,T=null):D=T.sibling;var R=s(o,T,y[O],g);if(R===null){T===null&&(T=D);break}l&&T&&R.alternate===null&&t(o,T),d=n(R,d,O),B===null?r=R:B.sibling=R,B=R,T=D}if(O===y.length)return a(o,T),q&&st(o,O),r;if(T===null){for(;OO?(D=T,T=null):D=T.sibling;var Il=s(o,T,R.value,g);if(Il===null){T===null&&(T=D);break}l&&T&&Il.alternate===null&&t(o,T),d=n(Il,d,O),B===null?r=Il:B.sibling=Il,B=Il,T=D}if(R.done)return a(o,T),q&&st(o,O),r;if(T===null){for(;!R.done;O++,R=y.next())R=S(o,R.value,g),R!==null&&(d=n(R,d,O),B===null?r=R:B.sibling=R,B=R);return q&&st(o,O),r}for(T=u(T);!R.done;O++,R=y.next())R=m(T,o,O,R.value,g),R!==null&&(l&&R.alternate!==null&&T.delete(R.key===null?O:R.key),d=n(R,d,O),B===null?r=R:B.sibling=R,B=R);return l&&T.forEach(function(ge){return t(o,ge)}),q&&st(o,O),r}function Y(o,d,y,g){if(typeof y=="object"&&y!==null&&y.type===Ca&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Ae:l:{for(var r=y.key;d!==null;){if(d.key===r){if(r=y.type,r===Ca){if(d.tag===7){a(o,d.sibling),g=e(d,y.props.children),g.return=o,o=g;break l}}else if(d.elementType===r||typeof r=="object"&&r!==null&&r.$$typeof===Nt&&na(r)===d.type){a(o,d.sibling),g=e(d,y.props),ru(g,y),g.return=o,o=g;break l}a(o,d);break}else t(o,d);d=d.sibling}y.type===Ca?(g=fa(y.props.children,o.mode,g,y.key),g.return=o,o=g):(g=Je(y.type,y.key,y.props,null,o.mode,g),ru(g,y),g.return=o,o=g)}return i(o);case _u:l:{for(r=y.key;d!==null;){if(d.key===r)if(d.tag===4&&d.stateNode.containerInfo===y.containerInfo&&d.stateNode.implementation===y.implementation){a(o,d.sibling),g=e(d,y.children||[]),g.return=o,o=g;break l}else{a(o,d);break}else t(o,d);d=d.sibling}g=Ai(y,o.mode,g),g.return=o,o=g}return i(o);case Nt:return y=na(y),Y(o,d,y,g)}if(Mu(y))return z(o,d,y,g);if(zu(y)){if(r=zu(y),typeof r!="function")throw Error(b(150));return y=r.call(y),E(o,d,y,g)}if(typeof y.then=="function")return Y(o,d,Be(y),g);if(y.$$typeof===ht)return Y(o,d,Ce(o,y),g);qe(o,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,d!==null&&d.tag===6?(a(o,d.sibling),g=e(d,y),g.return=o,o=g):(a(o,d),g=pi(y,o.mode,g),g.return=o,o=g),i(o)):a(o,d)}return function(o,d,y,g){try{$u=0;var r=Y(o,d,y,g);return ka=null,r}catch(T){if(T===vu||T===Xn)throw T;var B=Nl(29,T,null,o.mode);return B.lanes=g,B.return=o,B}finally{}}}var ma=C1(!0),B1=C1(!1),Ht=!1;function cf(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function sc(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Vt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Lt(l,t,a){var u=l.updateQueue;if(u===null)return null;if(u=u.shared,(x&2)!==0){var e=u.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),u.pending=t,t=on(l),A1(l,null,a),t}return Gn(l,u,t,a),on(l)}function Ru(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,Fd(l,a)}}function _i(l,t){var a=l.updateQueue,u=l.alternate;if(u!==null&&(u=u.updateQueue,a===u)){var e=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var i={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?e=n=i:n=n.next=i,a=a.next}while(a!==null);n===null?e=n=t:n=n.next=t}else e=n=t;a={baseState:u.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:u.shared,callbacks:u.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var mc=!1;function Yu(){if(mc){var l=wa;if(l!==null)throw l}}function xu(l,t,a,u){mc=!1;var e=l.updateQueue;Ht=!1;var n=e.firstBaseUpdate,i=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var f=c,v=f.next;f.next=null,i===null?n=v:i.next=v,i=f;var h=l.alternate;h!==null&&(h=h.updateQueue,c=h.lastBaseUpdate,c!==i&&(c===null?h.firstBaseUpdate=v:c.next=v,h.lastBaseUpdate=f))}if(n!==null){var S=e.baseState;i=0,h=v=f=null,c=n;do{var s=c.lane&-536870913,m=s!==c.lane;if(m?(C&s)===s:(u&s)===s){s!==0&&s===lu&&(mc=!0),h!==null&&(h=h.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var z=l,E=c;s=t;var Y=a;switch(E.tag){case 1:if(z=E.payload,typeof z=="function"){S=z.call(Y,S,s);break l}S=z;break l;case 3:z.flags=z.flags&-65537|128;case 0:if(z=E.payload,s=typeof z=="function"?z.call(Y,S,s):z,s==null)break l;S=W({},S,s);break l;case 2:Ht=!0}}s=c.callback,s!==null&&(l.flags|=64,m&&(l.flags|=8192),m=e.callbacks,m===null?e.callbacks=[s]:m.push(s))}else m={lane:s,tag:c.tag,payload:c.payload,callback:c.callback,next:null},h===null?(v=h=m,f=S):h=h.next=m,i|=s;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;m=c,c=m.next,m.next=null,e.lastBaseUpdate=m,e.shared.pending=null}}while(!0);h===null&&(f=S),e.baseState=f,e.firstBaseUpdate=v,e.lastBaseUpdate=h,n===null&&(e.shared.lanes=0),Pt|=i,l.lanes=i,l.memoizedState=S}}function q1(l,t){if(typeof l!="function")throw Error(b(191,l));l.call(t)}function R1(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var i=A.T,c={};A.T=c,Tf(l,!1,t,a);try{var f=e(),v=A.S;if(v!==null&&v(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var h=Us(f,u);Gu(l,t,h,Rl(l))}else Gu(l,t,u,Rl(l))}catch(S){Gu(l,t,{then:function(){},status:"rejected",reason:S},Rl())}finally{G.p=n,i!==null&&c.types!==null&&(i.types=c.types),A.T=i}}function Rs(){}function zc(l,t,a,u){if(l.tag!==5)throw Error(b(476));var e=io(l).queue;no(l,e,t,ca,a===null?Rs:function(){return co(l),a(u)})}function io(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:ca,baseState:ca,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:pt,lastRenderedState:ca},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:pt,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function co(l){var t=io(l);t.next===null&&(t=l.alternate.memoizedState),Gu(l,t.next.queue,{},Rl())}function zf(){return hl(te)}function fo(){return tl().memoizedState}function oo(){return tl().memoizedState}function Ys(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=Rl();l=Vt(a);var u=Lt(t,l,a);u!==null&&(Ol(u,t,a),Ru(u,t,a)),t={cache:uf()},l.payload=t;return}t=t.return}}function xs(l,t,a){var u=Rl();a={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Vn(l)?yo(t,a):(a=Pc(l,t,a,u),a!==null&&(Ol(a,l,u),so(a,t,u)))}function vo(l,t,a){var u=Rl();Gu(l,t,a,u)}function Gu(l,t,a,u){var e={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Vn(l))yo(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,a);if(e.hasEagerState=!0,e.eagerState=c,Yl(c,i))return Gn(l,t,e,0),V===null&&xn(),!1}catch{}finally{}if(a=Pc(l,t,e,u),a!==null)return Ol(a,l,u),so(a,t,u),!0}return!1}function Tf(l,t,a,u){if(u={lane:2,revertLane:Uf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Vn(l)){if(t)throw Error(b(479))}else t=Pc(l,a,u,2),t!==null&&Ol(t,l,2)}function Vn(l){var t=l.alternate;return l===M||t!==null&&t===M}function yo(l,t){Wa=gn=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function so(l,t,a){if((a&4194048)!==0){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,Fd(l,a)}}var Iu={readContext:hl,use:jn,useCallback:I,useContext:I,useEffect:I,useImperativeHandle:I,useLayoutEffect:I,useInsertionEffect:I,useMemo:I,useReducer:I,useRef:I,useState:I,useDebugValue:I,useDeferredValue:I,useTransition:I,useSyncExternalStore:I,useId:I,useHostTransitionStatus:I,useFormState:I,useActionState:I,useOptimistic:I,useMemoCache:I,useCacheRefresh:I};Iu.useEffectEvent=I;var mo={readContext:hl,use:jn,useCallback:function(l,t){return Tl().memoizedState=[l,t===void 0?null:t],l},useContext:hl,useEffect:$0,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,We(4194308,4,lo.bind(null,t,l),a)},useLayoutEffect:function(l,t){return We(4194308,4,l,t)},useInsertionEffect:function(l,t){We(4,2,l,t)},useMemo:function(l,t){var a=Tl();t=t===void 0?null:t;var u=l();if(ha){Yt(!0);try{l()}finally{Yt(!1)}}return a.memoizedState=[u,t],u},useReducer:function(l,t,a){var u=Tl();if(a!==void 0){var e=a(t);if(ha){Yt(!0);try{a(t)}finally{Yt(!1)}}}else e=t;return u.memoizedState=u.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},u.queue=l,l=l.dispatch=xs.bind(null,M,l),[u.memoizedState,l]},useRef:function(l){var t=Tl();return l={current:l},t.memoizedState=l},useState:function(l){l=Sc(l);var t=l.queue,a=vo.bind(null,M,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:Sf,useDeferredValue:function(l,t){var a=Tl();return bf(a,l,t)},useTransition:function(){var l=Sc(!1);return l=no.bind(null,M,l.queue,!0,!1),Tl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var u=M,e=Tl();if(q){if(a===void 0)throw Error(b(407));a=a()}else{if(a=t(),V===null)throw Error(b(349));(C&127)!==0||Q1(u,t,a)}e.memoizedState=a;var n={value:a,getSnapshot:t};return e.queue=n,$0(Z1.bind(null,u,n,l),[l]),u.flags|=2048,au(9,{destroy:void 0},j1.bind(null,u,n,a,t),null),a},useId:function(){var l=Tl(),t=V.identifierPrefix;if(q){var a=at,u=tt;a=(u&~(1<<32-ql(u)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Sn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof u.is=="string"?i.createElement("select",{is:u.is}):i.createElement("select"),u.multiple?n.multiple=!0:u.size&&(n.size=u.size);break;default:n=typeof u.is=="string"?i.createElement(e,{is:u.is}):i.createElement(e)}}n[sl]=t,n[_l]=u;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(gl(n,e,u),e){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break l;case"img":u=!0;break l;default:u=!1}u&&dt(t)}}return w(t),qi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==u&&dt(t);else{if(typeof u!="string"&&t.stateNode===null)throw Error(b(166));if(l=jt.current,Da(t)){if(l=t.stateNode,a=t.memoizedProps,u=null,e=ml,e!==null)switch(e.tag){case 27:case 5:u=e.memoizedProps}l[sl]=t,l=!!(l.nodeValue===a||u!==null&&u.suppressHydrationWarning===!0||vv(l.nodeValue,a)),l||Ft(t,!0)}else l=Mn(l).createTextNode(u),l[sl]=t,t.stateNode=l}return w(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(u=Da(t),a!==null){if(l===null){if(!u)throw Error(b(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(b(557));l[sl]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),l=!1}else a=Oi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(Ul(t),t):(Ul(t),null);if((t.flags&128)!==0)throw Error(b(558))}return w(t),null;case 13:if(u=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=Da(t),u!==null&&u.dehydrated!==null){if(l===null){if(!e)throw Error(b(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(b(317));e[sl]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),e=!1}else e=Oi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(Ul(t),t):(Ul(t),null)}return Ul(t),(t.flags&128)!==0?(t.lanes=a,t):(a=u!==null,l=l!==null&&l.memoizedState!==null,a&&(u=t.child,e=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(e=u.alternate.memoizedState.cachePool.pool),n=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(n=u.memoizedState.cachePool.pool),n!==e&&(u.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),Re(t,t.updateQueue),w(t),null);case 4:return Fa(),l===null&&Nf(t.stateNode.containerInfo),w(t),null;case 10:return zt(t.type),w(t),null;case 19:if(ol(ll),u=t.memoizedState,u===null)return w(t),null;if(e=(t.flags&128)!==0,n=u.rendering,n===null)if(e)Eu(u,!1);else{if(P!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=hn(l),n!==null){for(t.flags|=128,Eu(u,!1),l=n.updateQueue,t.updateQueue=l,Re(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)O1(a,l),a=a.sibling;return L(ll,ll.current&1|2),q&&st(t,u.treeForkCount),t.child}l=l.sibling}u.tail!==null&&Cl()>rn&&(t.flags|=128,e=!0,Eu(u,!1),t.lanes=4194304)}else{if(!e)if(l=hn(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,Re(t,l),Eu(u,!0),u.tail===null&&u.tailMode==="hidden"&&!n.alternate&&!q)return w(t),null}else 2*Cl()-u.renderingStartTime>rn&&a!==536870912&&(t.flags|=128,e=!0,Eu(u,!1),t.lanes=4194304);u.isBackwards?(n.sibling=t.child,t.child=n):(l=u.last,l!==null?l.sibling=n:t.child=n,u.last=n)}return u.tail!==null?(l=u.tail,u.rendering=l,u.tail=l.sibling,u.renderingStartTime=Cl(),l.sibling=null,a=ll.current,L(ll,e?a&1|2:a&1),q&&st(t,u.treeForkCount),l):(w(t),null);case 22:case 23:return Ul(t),ff(),u=t.memoizedState!==null,l!==null?l.memoizedState!==null!==u&&(t.flags|=8192):u&&(t.flags|=8192),u?(a&536870912)!==0&&(t.flags&128)===0&&(w(t),t.subtreeFlags&6&&(t.flags|=8192)):w(t),a=t.updateQueue,a!==null&&Re(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),u=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(u=t.memoizedState.cachePool.pool),u!==a&&(t.flags|=2048),l!==null&&ol(da),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),zt(el),w(t),null;case 25:return null;case 30:return null}throw Error(b(156,t.tag))}function Zs(l,t){switch(af(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return zt(el),Fa(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return nn(t),null;case 31:if(t.memoizedState!==null){if(Ul(t),t.alternate===null)throw Error(b(340));ya()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Ul(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(b(340));ya()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return ol(ll),null;case 4:return Fa(),null;case 10:return zt(t.type),null;case 22:case 23:return Ul(t),ff(),l!==null&&ol(da),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return zt(el),null;case 25:return null;default:return null}}function _o(l,t){switch(af(t),t.tag){case 3:zt(el),Fa();break;case 26:case 27:case 5:nn(t);break;case 4:Fa();break;case 31:t.memoizedState!==null&&Ul(t);break;case 13:Ul(t);break;case 19:ol(ll);break;case 10:zt(t.type);break;case 22:case 23:Ul(t),ff(),l!==null&&ol(da);break;case 24:zt(el)}}function ye(l,t){try{var a=t.updateQueue,u=a!==null?a.lastEffect:null;if(u!==null){var e=u.next;a=e;do{if((a.tag&l)===l){u=void 0;var n=a.create,i=a.inst;u=n(),i.destroy=u}a=a.next}while(a!==e)}}catch(c){Q(t,t.return,c)}}function It(l,t,a){try{var u=t.updateQueue,e=u!==null?u.lastEffect:null;if(e!==null){var n=e.next;u=n;do{if((u.tag&l)===l){var i=u.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,e=t;var f=a,v=c;try{v()}catch(h){Q(e,f,h)}}}u=u.next}while(u!==n)}}catch(h){Q(t,t.return,h)}}function Mo(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{R1(t,a)}catch(u){Q(l,l.return,u)}}}function Do(l,t,a){a.props=ga(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(u){Q(l,t,u)}}function Xu(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var u=l.stateNode;break;case 30:u=l.stateNode;break;default:u=l.stateNode}typeof a=="function"?l.refCleanup=a(u):a.current=u}}catch(e){Q(l,t,e)}}function ut(l,t){var a=l.ref,u=l.refCleanup;if(a!==null)if(typeof u=="function")try{u()}catch(e){Q(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(e){Q(l,t,e)}else a.current=null}function Uo(l){var t=l.type,a=l.memoizedProps,u=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&u.focus();break l;case"img":a.src?u.src=a.src:a.srcSet&&(u.srcset=a.srcSet)}}catch(e){Q(l,l.return,e)}}function Ri(l,t,a){try{var u=l.stateNode;fm(u,l.type,a,t),u[_l]=t}catch(e){Q(l,l.return,e)}}function No(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ta(l.type)||l.tag===4}function Yi(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||No(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ta(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Ac(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=gt));else if(u!==4&&(u===27&&ta(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Ac(l,t,a),l=l.sibling;l!==null;)Ac(l,t,a),l=l.sibling}function Tn(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(u!==4&&(u===27&&ta(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(Tn(l,t,a),l=l.sibling;l!==null;)Tn(l,t,a),l=l.sibling}function Ho(l){var t=l.stateNode,a=l.memoizedProps;try{for(var u=l.type,e=t.attributes;e.length;)t.removeAttributeNode(e[0]);gl(t,u,a),t[sl]=l,t[_l]=a}catch(n){Q(l,l.return,n)}}var mt=!1,ul=!1,xi=!1,dd=typeof WeakSet=="function"?WeakSet:Set,fl=null;function Vs(l,t){if(l=l.containerInfo,Hc=Hn,l=S1(l),Fc(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var u=a.getSelection&&a.getSelection();if(u&&u.rangeCount!==0){a=u.anchorNode;var e=u.anchorOffset,n=u.focusNode;u=u.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var i=0,c=-1,f=-1,v=0,h=0,S=l,s=null;t:for(;;){for(var m;S!==a||e!==0&&S.nodeType!==3||(c=i+e),S!==n||u!==0&&S.nodeType!==3||(f=i+u),S.nodeType===3&&(i+=S.nodeValue.length),(m=S.firstChild)!==null;)s=S,S=m;for(;;){if(S===l)break t;if(s===a&&++v===e&&(c=i),s===n&&++h===u&&(f=i),(m=S.nextSibling)!==null)break;S=s,s=S.parentNode}S=m}a=c===-1||f===-1?null:{start:c,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Cc={focusedElem:l,selectionRange:a},Hn=!1,fl=t;fl!==null;)if(t=fl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,fl=l;else for(;fl!==null;){switch(t=fl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),gl(n,u,a),n[sl]=l,dl(n),u=n;break l;case"link":var i=Hd("link","href",e).get(u+(a.href||""));if(i){for(var c=0;cY&&(i=Y,Y=E,E=i);var o=q0(c,E),d=q0(c,Y);if(o&&d&&(m.rangeCount!==1||m.anchorNode!==o.node||m.anchorOffset!==o.offset||m.focusNode!==d.node||m.focusOffset!==d.offset)){var y=S.createRange();y.setStart(o.node,o.offset),m.removeAllRanges(),E>Y?(m.addRange(y),m.extend(d.node,d.offset)):(y.setEnd(d.node,d.offset),m.addRange(y))}}}}for(S=[],m=c;m=m.parentNode;)m.nodeType===1&&S.push({element:m,left:m.scrollLeft,top:m.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ca?32:a,A.T=null,a=Mc,Mc=null;var n=Jt,i=Tt;if(il=0,eu=Jt=null,Tt=0,(x&6)!==0)throw Error(b(331));var c=x;if(x|=4,Zo(n.current),Xo(n,n.current,i,a),x=c,se(0,!1),Bl&&typeof Bl.onPostCommitFiberRoot=="function")try{Bl.onPostCommitFiberRoot(ne,n)}catch{}return!0}finally{G.p=e,A.T=u,uv(l,t)}}function sd(l,t,a){t=Ll(a,t),t=rc(l.stateNode,t,2),l=Lt(l,t,2),l!==null&&(ce(l,2),it(l))}function Q(l,t,a){if(l.tag===3)sd(l,l,a);else for(;t!==null;){if(t.tag===3){sd(t,l,a);break}else if(t.tag===1){var u=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Kt===null||!Kt.has(u))){l=Ll(a,l),a=zo(2),u=Lt(t,a,2),u!==null&&(To(a,u,t,l),ce(u,2),it(u));break}}t=t.return}}function Xi(l,t,a){var u=l.pingCache;if(u===null){u=l.pingCache=new Js;var e=new Set;u.set(t,e)}else e=u.get(t),e===void 0&&(e=new Set,u.set(t,e));e.has(a)||(_f=!0,e.add(a),l=Fs.bind(null,l,t,a),t.then(l,l))}function Fs(l,t,a){var u=l.pingCache;u!==null&&u.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,V===l&&(C&a)===a&&(P===4||P===3&&(C&62914560)===C&&300>Cl()-Ln?(x&2)===0&&nu(l,0):Mf|=a,uu===C&&(uu=0)),it(l)}function nv(l,t){t===0&&(t=Wd()),l=Ta(l,t),l!==null&&(ce(l,t),it(l))}function Is(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),nv(l,a)}function Ps(l,t){var a=0;switch(l.tag){case 31:case 13:var u=l.stateNode,e=l.memoizedState;e!==null&&(a=e.retryLane);break;case 19:u=l.stateNode;break;case 22:u=l.stateNode._retryCache;break;default:throw Error(b(314))}u!==null&&u.delete(t),nv(l,a)}function lm(l,t){return Zc(l,t)}var An=null,Ha=null,Uc=!1,On=!1,Qi=!1,Qt=0;function it(l){l!==Ha&&l.next===null&&(Ha===null?An=Ha=l:Ha=Ha.next=l),On=!0,Uc||(Uc=!0,am())}function se(l,t){if(!Qi&&On){Qi=!0;do for(var a=!1,u=An;u!==null;){if(!t)if(l!==0){var e=u.pendingLanes;if(e===0)var n=0;else{var i=u.suspendedLanes,c=u.pingedLanes;n=(1<<31-ql(42|l)+1)-1,n&=e&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,md(u,n))}else n=C,n=Bn(u,u===V?n:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(n&3)===0||ie(u,n)||(a=!0,md(u,n));u=u.next}while(a);Qi=!1}}function tm(){iv()}function iv(){On=Uc=!1;var l=0;Qt!==0&&om()&&(l=Qt);for(var t=Cl(),a=null,u=An;u!==null;){var e=u.next,n=cv(u,t);n===0?(u.next=null,a===null?An=e:a.next=e,e===null&&(Ha=a)):(a=u,(l!==0||(n&3)!==0)&&(On=!0)),u=e}il!==0&&il!==5||se(l,!1),Qt!==0&&(Qt=0)}function cv(l,t){for(var a=l.suspendedLanes,u=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var h=f.transferSize,S=f.initiatorType;h&&rd(S)&&(f=f.responseEnd,i+=h*(f"u"?null:document;function gv(l,t,a){var u=su;if(u&&typeof t=="string"&&t){var e=Vl(t);e='link[rel="'+l+'"][href="'+e+'"]',typeof a=="string"&&(e+='[crossorigin="'+a+'"]'),Dd.has(e)||(Dd.add(e),l={rel:l,crossOrigin:a,href:t},u.querySelector(e)===null&&(t=u.createElement("link"),gl(t,"link",l),dl(t),u.head.appendChild(t)))}}function zm(l){_t.D(l),gv("dns-prefetch",l,null)}function Tm(l,t){_t.C(l,t),gv("preconnect",l,t)}function rm(l,t,a){_t.L(l,t,a);var u=su;if(u&&l&&t){var e='link[rel="preload"][as="'+Vl(t)+'"]';t==="image"&&a&&a.imageSrcSet?(e+='[imagesrcset="'+Vl(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(e+='[imagesizes="'+Vl(a.imageSizes)+'"]')):e+='[href="'+Vl(l)+'"]';var n=e;switch(t){case"style":n=iu(l);break;case"script":n=mu(l)}kl.has(n)||(l=W({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),kl.set(n,l),u.querySelector(e)!==null||t==="style"&&u.querySelector(me(n))||t==="script"&&u.querySelector(he(n))||(t=u.createElement("link"),gl(t,"link",l),dl(t),u.head.appendChild(t)))}}function Em(l,t){_t.m(l,t);var a=su;if(a&&l){var u=t&&typeof t.as=="string"?t.as:"script",e='link[rel="modulepreload"][as="'+Vl(u)+'"][href="'+Vl(l)+'"]',n=e;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=mu(l)}if(!kl.has(n)&&(l=W({rel:"modulepreload",href:l},t),kl.set(n,l),a.querySelector(e)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(he(n)))return}u=a.createElement("link"),gl(u,"link",l),dl(u),a.head.appendChild(u)}}}function pm(l,t,a){_t.S(l,t,a);var u=su;if(u&&l){var e=La(u).hoistableStyles,n=iu(l);t=t||"default";var i=e.get(n);if(!i){var c={loading:0,preload:null};if(i=u.querySelector(me(n)))c.loading=5;else{l=W({rel:"stylesheet",href:l,"data-precedence":t},a),(a=kl.get(n))&&Hf(l,a);var f=i=u.createElement("link");dl(f),gl(f,"link",l),f._p=new Promise(function(v,h){f.onload=v,f.onerror=h}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,Pe(i,t,u)}i={type:"stylesheet",instance:i,count:1,state:c},e.set(n,i)}}}function Am(l,t){_t.X(l,t);var a=su;if(a&&l){var u=La(a).hoistableScripts,e=mu(l),n=u.get(e);n||(n=a.querySelector(he(e)),n||(l=W({src:l,async:!0},t),(t=kl.get(e))&&Cf(l,t),n=a.createElement("script"),dl(n),gl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function Om(l,t){_t.M(l,t);var a=su;if(a&&l){var u=La(a).hoistableScripts,e=mu(l),n=u.get(e);n||(n=a.querySelector(he(e)),n||(l=W({src:l,async:!0,type:"module"},t),(t=kl.get(e))&&Cf(l,t),n=a.createElement("script"),dl(n),gl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function Ud(l,t,a,u){var e=(e=jt.current)?Dn(e):null;if(!e)throw Error(b(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=iu(a.href),a=La(e).hoistableStyles,u=a.get(t),u||(u={type:"style",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=iu(a.href);var n=La(e).hoistableStyles,i=n.get(l);if(i||(e=e.ownerDocument||e,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=e.querySelector(me(l)))&&!n._p&&(i.instance=n,i.state.loading=5),kl.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},kl.set(l,a),n||_m(e,l,a,i.state))),t&&u===null)throw Error(b(528,""));return i}if(t&&u!==null)throw Error(b(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=mu(a),a=La(e).hoistableScripts,u=a.get(t),u||(u={type:"script",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(b(444,l))}}function iu(l){return'href="'+Vl(l)+'"'}function me(l){return'link[rel="stylesheet"]['+l+"]"}function Sv(l){return W({},l,{"data-precedence":l.precedence,precedence:null})}function _m(l,t,a,u){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?u.loading=1:(t=l.createElement("link"),u.preload=t,t.addEventListener("load",function(){return u.loading|=1}),t.addEventListener("error",function(){return u.loading|=2}),gl(t,"link",a),dl(t),l.head.appendChild(t))}function mu(l){return'[src="'+Vl(l)+'"]'}function he(l){return"script[async]"+l}function Nd(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var u=l.querySelector('style[data-href~="'+Vl(a.href)+'"]');if(u)return t.instance=u,dl(u),u;var e=W({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return u=(l.ownerDocument||l).createElement("style"),dl(u),gl(u,"style",e),Pe(u,a.precedence,l),t.instance=u;case"stylesheet":e=iu(a.href);var n=l.querySelector(me(e));if(n)return t.state.loading|=4,t.instance=n,dl(n),n;u=Sv(a),(e=kl.get(e))&&Hf(u,e),n=(l.ownerDocument||l).createElement("link"),dl(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),gl(n,"link",u),t.state.loading|=4,Pe(n,a.precedence,l),t.instance=n;case"script":return n=mu(a.src),(e=l.querySelector(he(n)))?(t.instance=e,dl(e),e):(u=a,(e=kl.get(n))&&(u=W({},a),Cf(u,e)),l=l.ownerDocument||l,e=l.createElement("script"),dl(e),gl(e,"link",u),l.head.appendChild(e),t.instance=e);case"void":return null;default:throw Error(b(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(u=t.instance,t.state.loading|=4,Pe(u,a.precedence,l));return t.instance}function Pe(l,t,a){for(var u=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),e=u.length?u[u.length-1]:null,n=e,i=0;i title"):null)}function Mm(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function bv(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Dm(l,t,a,u){if(a.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var e=iu(u.href),n=t.querySelector(me(e));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Un.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,dl(n);return}n=t.ownerDocument||t,u=Sv(u),(e=kl.get(e))&&Hf(u,e),n=n.createElement("link"),dl(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),gl(n,"link",u),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Un.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var Li=0;function Um(l,t){return l.stylesheets&&l.count===0&&tn(l,l.stylesheets),0Li?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(u),clearTimeout(e)}}:null}function Un(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)tn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Nn=null;function tn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Nn=new Map,t.forEach(Nm,l),Nn=null,Un.call(l))}function Nm(l,t){if(!(t.state.loading&4)){var a=Nn.get(l);if(a)var u=a.get(null);else{a=new Map,Nn.set(l,a);for(var e=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n{"use strict";function Mv(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Mv)}catch(l){console.error(l)}}Mv(),Dv.exports=_v()});var Bv=Pl($n=>{"use strict";var Gm=Symbol.for("react.transitional.element"),Xm=Symbol.for("react.fragment");function Cv(l,t,a){var u=null;if(a!==void 0&&(u=""+a),t.key!==void 0&&(u=""+t.key),"key"in t){a={};for(var e in t)e!=="key"&&(a[e]=t[e])}else a=t;return t=a.ref,{$$typeof:Gm,type:l,key:u,ref:t!==void 0?t:null,props:a}}$n.Fragment=Xm;$n.jsx=Cv;$n.jsxs=Cv});var xf=Pl((th,qv)=>{"use strict";qv.exports=Bv()});var vl=Se(ze()),xv=Se(Uv());var Nv;function Hv(){return Nv??(Nv=acquireVsCodeApi()),Nv}var p=Se(xf()),Ea=Hv(),Rv="backlog";function Qm(l){let t=l.split(",").map(a=>a.trim()).filter(Boolean);return Array.from(new Set(t.map(a=>a.toLowerCase())))}function jm(l,t){return l.taskIds.map(a=>t.tasks[a]).filter(a=>a!==void 0)}function Zm({task:l,onEdit:t}){return(0,p.jsxs)("div",{className:"task-card",draggable:!0,onDragStart:a=>{a.dataTransfer.setData("text/task-id",l.id),a.dataTransfer.effectAllowed="move"},onClick:()=>t(l),children:[(0,p.jsxs)("div",{className:"task-title-row",children:[(0,p.jsx)("strong",{children:l.title}),(0,p.jsx)("span",{className:"priority-chip",children:l.priority??"normal"})]}),l.description?(0,p.jsx)("p",{className:"task-description",children:l.description}):null,(0,p.jsxs)("div",{className:"task-footer",children:[(0,p.jsx)("span",{children:l.assignee||"Unassigned"}),(0,p.jsx)("span",{children:l.tags&&l.tags.length>0?l.tags.join(", "):"No tags"})]})]})}function Vm(){let[l,t]=(0,vl.useState)("loading"),[a,u]=(0,vl.useState)(""),[e,n]=(0,vl.useState)(""),[i,c]=(0,vl.useState)({columns:[],tasks:{}}),[f,v]=(0,vl.useState)(null),[h,S]=(0,vl.useState)(""),[s,m]=(0,vl.useState)(null),[z,E]=(0,vl.useState)(""),[Y,o]=(0,vl.useState)(""),[d,y]=(0,vl.useState)(""),[g,r]=(0,vl.useState)(""),[B,T]=(0,vl.useState)("normal"),[O,D]=(0,vl.useState)(""),R=(0,vl.useMemo)(()=>Object.keys(i.tasks).length,[i.tasks]);(0,vl.useEffect)(()=>{let U=Mt=>{let K=Mt.data;if(K.type==="loading"){t("loading");return}if(K.type==="error"){u(K.message),t("error");return}if(K.type==="github-sign-in-required"){n(`${K.owner}/${K.repo}`),t("github-sign-in-required");return}c(K.data),K.githubRepo&&n(K.githubRepo),t("ready")};return window.addEventListener("message",U),Ea.postMessage({type:"ready"}),()=>window.removeEventListener("message",U)},[]);let Il=U=>{let Mt=i.columns.find(K=>K.taskIds.includes(U.id));m(U),E(Mt?.id??""),o(U.title),y(U.description??""),r(U.assignee??""),T(U.priority??"normal"),D((U.tags??[]).join(", "))},ge=()=>{h.trim()&&(Ea.postMessage({type:"createTask",columnId:Rv,title:h.trim(),priority:"normal",tags:[]}),S(""),v(null))},Gv=()=>{!s||!Y.trim()||!z||(Ea.postMessage({type:"updateTask",taskId:s.id,columnId:z,title:Y.trim(),description:d,assignee:g,priority:B,tags:Qm(O)}),m(null))},Xv=()=>{s&&(Ea.postMessage({type:"deleteTask",taskId:s.id}),m(null))},Qv=(U,Mt)=>{U.preventDefault();let K=U.dataTransfer.getData("text/task-id");K&&Ea.postMessage({type:"moveTask",taskId:K,toColumnId:Mt})};return l==="loading"?(0,p.jsx)("p",{className:"muted",children:"Loading board..."}):l==="error"?(0,p.jsx)("p",{className:"error",children:a}):l==="github-sign-in-required"?(0,p.jsxs)("div",{style:{padding:"12px",display:"flex",flexDirection:"column",gap:"10px"},children:[(0,p.jsxs)("p",{className:"muted",children:["This project uses GitHub Issues for task management",e?` (${e})`:"","."]}),(0,p.jsx)("button",{onClick:()=>Ea.postMessage({type:"githubSignIn"}),children:"Sign in to GitHub"})]}):(0,p.jsxs)("div",{className:"kanban-shell",children:[(0,p.jsx)("style",{children:` +`+u.stack}}var ac=Object.prototype.hasOwnProperty,Jc=fl.unstable_scheduleCallback,Si=fl.unstable_cancelCallback,R1=fl.unstable_shouldYield,q1=fl.unstable_requestPaint,Cl=fl.unstable_now,Y1=fl.unstable_getCurrentPriorityLevel,i0=fl.unstable_ImmediatePriority,c0=fl.unstable_UserBlockingPriority,dn=fl.unstable_NormalPriority,G1=fl.unstable_LowPriority,f0=fl.unstable_IdlePriority,X1=fl.log,Q1=fl.unstable_setDisableYieldValue,ce=null,Bl=null;function qt(l){if(typeof X1=="function"&&Q1(l),Bl&&typeof Bl.setStrictMode=="function")try{Bl.setStrictMode(ce,l)}catch{}}var Rl=Math.clz32?Math.clz32:V1,j1=Math.log,Z1=Math.LN2;function V1(l){return l>>>=0,l===0?32:31-(j1(l)/Z1|0)|0}var Me=256,Ne=262144,Ue=4194304;function na(l){var t=l&42;if(t!==0)return t;switch(l&-l){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function qn(l,t,a){var u=l.pendingLanes;if(u===0)return 0;var e=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=u&134217727;return c!==0?(u=c&~n,u!==0?e=na(u):(i&=c,i!==0?e=na(i):a||(a=c&~l,a!==0&&(e=na(a))))):(c=u&~n,c!==0?e=na(c):i!==0?e=na(i):a||(a=u&~l,a!==0&&(e=na(a)))),e===0?0:t!==0&&t!==e&&(t&n)===0&&(n=e&-e,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:e}function fe(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function L1(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function o0(){var l=Ue;return Ue<<=1,(Ue&62914560)===0&&(Ue=4194304),l}function pi(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function oe(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function K1(l,t,a,u,e,n){var i=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,s=l.hiddenUpdates;for(a=i&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var F1=/[\n"\\]/g;function Ll(l){return l.replace(F1,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function nc(l,t,a,u,e,n,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+jl(t)):l.value!==""+jl(t)&&(l.value=""+jl(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?ic(l,i,jl(t)):a!=null?ic(l,i,jl(a)):u!=null&&l.removeAttribute("value"),e==null&&n!=null&&(l.defaultChecked=!!n),e!=null&&(l.checked=e&&typeof e!="function"&&typeof e!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+jl(c):l.removeAttribute("name")}function h0(l,t,a,u,e,n,i,c){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){ec(l);return}a=a!=null?""+jl(a):"",t=t!=null?""+jl(t):a,c||t===l.value||(l.value=t),l.defaultValue=t}u=u??e,u=typeof u!="function"&&typeof u!="symbol"&&!!u,l.checked=c?l.checked:!!u,l.defaultChecked=!!u,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),ec(l)}function ic(l,t,a){t==="number"&&sn(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function Ja(l,t,a,u){if(l=l.options,t){t={};for(var e=0;e"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fc=!1;if(Tt)try{Ma={},Object.defineProperty(Ma,"passive",{get:function(){fc=!0}}),window.addEventListener("test",Ma,Ma),window.removeEventListener("test",Ma,Ma)}catch{fc=!1}var Ma,Yt=null,Ic=null,ke=null;function E0(){if(ke)return ke;var l,t=Ic,a=t.length,u,e="value"in Yt?Yt.value:Yt.textContent,n=e.length;for(l=0;l=Cu),Zo=" ",Vo=!1;function O0(l,t){switch(l){case"keyup":return Om.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function _0(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ya=!1;function Dm(l,t){switch(l){case"compositionend":return _0(t);case"keypress":return t.which!==32?null:(Vo=!0,Zo);case"textInput":return l=t.data,l===Zo&&Vo?null:l;default:return null}}function Mm(l,t){if(Ya)return l==="compositionend"||!lf&&O0(l,t)?(l=E0(),ke=Ic=Yt=null,Ya=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=u}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=ko(a)}}function U0(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?U0(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function x0(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=sn(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=sn(l.document)}return t}function tf(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var qm=Tt&&"documentMode"in document&&11>=document.documentMode,Ga=null,oc=null,Ru=null,dc=!1;function Wo(l,t,a){var u=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;dc||Ga==null||Ga!==sn(u)||(u=Ga,"selectionStart"in u&&tf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),Ru&&Wu(Ru,u)||(Ru=u,u=Nn(oc,"onSelect"),0>=i,e-=i,at=1<<32-Rl(t)+e|a<_?(N=z,z=null):N=z.sibling;var R=m(d,z,v[_],g);if(R===null){z===null&&(z=N);break}l&&z&&R.alternate===null&&t(d,z),o=n(R,o,_),H===null?T=R:H.sibling=R,H=R,z=N}if(_===v.length)return a(d,z),q&&yt(d,_),T;if(z===null){for(;__?(N=z,z=null):N=z.sibling;var $l=m(d,z,R.value,g);if($l===null){z===null&&(z=N);break}l&&z&&$l.alternate===null&&t(d,z),o=n($l,o,_),H===null?T=$l:H.sibling=$l,H=$l,z=N}if(R.done)return a(d,z),q&&yt(d,_),T;if(z===null){for(;!R.done;_++,R=v.next())R=b(d,R.value,g),R!==null&&(o=n(R,o,_),H===null?T=R:H.sibling=R,H=R);return q&&yt(d,_),T}for(z=u(z);!R.done;_++,R=v.next())R=y(z,d,_,R.value,g),R!==null&&(l&&R.alternate!==null&&z.delete(R.key===null?_:R.key),o=n(R,o,_),H===null?T=R:H.sibling=R,H=R);return l&&z.forEach(function(he){return t(d,he)}),q&&yt(d,_),T}function B(d,o,v,g){if(typeof v=="object"&&v!==null&&v.type===Ca&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case De:l:{for(var T=v.key;o!==null;){if(o.key===T){if(T=v.type,T===Ca){if(o.tag===7){a(d,o.sibling),g=e(o,v.props.children),g.return=d,d=g;break l}}else if(o.elementType===T||typeof T=="object"&&T!==null&&T.$$typeof===Ut&&ia(T)===o.type){a(d,o.sibling),g=e(o,v.props),Eu(g,v),g.return=d,d=g;break l}a(d,o);break}else t(d,o);o=o.sibling}v.type===Ca?(g=oa(v.props.children,d.mode,g,v.key),g.return=d,d=g):(g=We(v.type,v.key,v.props,null,d.mode,g),Eu(g,v),g.return=d,d=g)}return i(d);case Mu:l:{for(T=v.key;o!==null;){if(o.key===T)if(o.tag===4&&o.stateNode.containerInfo===v.containerInfo&&o.stateNode.implementation===v.implementation){a(d,o.sibling),g=e(o,v.children||[]),g.return=d,d=g;break l}else{a(d,o);break}else t(d,o);o=o.sibling}g=Mi(v,d.mode,g),g.return=d,d=g}return i(d);case Ut:return v=ia(v),B(d,o,v,g)}if(Nu(v))return p(d,o,v,g);if(zu(v)){if(T=zu(v),typeof T!="function")throw Error(h(150));return v=T.call(v),E(d,o,v,g)}if(typeof v.then=="function")return B(d,o,qe(v),g);if(v.$$typeof===gt)return B(d,o,Re(d,v),g);Ye(d,v)}return typeof v=="string"&&v!==""||typeof v=="number"||typeof v=="bigint"?(v=""+v,o!==null&&o.tag===6?(a(d,o.sibling),g=e(o,v),g.return=d,d=g):(a(d,o),g=Di(v,d.mode,g),g.return=d,d=g),i(d)):a(d,o)}return function(d,o,v,g){try{Iu=0;var T=B(d,o,v,g);return Wa=null,T}catch(z){if(z===vu||z===Zn)throw z;var H=xl(29,z,null,d.mode);return H.lanes=g,H.return=d,H}finally{}}}var ra=J0(!0),k0=J0(!1),xt=!1;function sf(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function bc(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Vt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Lt(l,t,a){var u=l.updateQueue;if(u===null)return null;if(u=u.shared,(Y&2)!==0){var e=u.pending;return e===null?t.next=t:(t.next=e.next,e.next=t),u.pending=t,t=mn(l),G0(l,null,a),t}return jn(l,u,t,a),mn(l)}function Yu(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,s0(l,a)}}function Ui(l,t){var a=l.updateQueue,u=l.alternate;if(u!==null&&(u=u.updateQueue,a===u)){var e=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var i={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?e=n=i:n=n.next=i,a=a.next}while(a!==null);n===null?e=n=t:n=n.next=t}else e=n=t;a={baseState:u.baseState,firstBaseUpdate:e,lastBaseUpdate:n,shared:u.shared,callbacks:u.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var hc=!1;function Gu(){if(hc){var l=wa;if(l!==null)throw l}}function Xu(l,t,a,u){hc=!1;var e=l.updateQueue;xt=!1;var n=e.firstBaseUpdate,i=e.lastBaseUpdate,c=e.shared.pending;if(c!==null){e.shared.pending=null;var f=c,s=f.next;f.next=null,i===null?n=s:i.next=s,i=f;var r=l.alternate;r!==null&&(r=r.updateQueue,c=r.lastBaseUpdate,c!==i&&(c===null?r.firstBaseUpdate=s:c.next=s,r.lastBaseUpdate=f))}if(n!==null){var b=e.baseState;i=0,r=s=f=null,c=n;do{var m=c.lane&-536870913,y=m!==c.lane;if(y?(C&m)===m:(u&m)===m){m!==0&&m===tu&&(hc=!0),r!==null&&(r=r.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var p=l,E=c;m=t;var B=a;switch(E.tag){case 1:if(p=E.payload,typeof p=="function"){b=p.call(B,b,m);break l}b=p;break l;case 3:p.flags=p.flags&-65537|128;case 0:if(p=E.payload,m=typeof p=="function"?p.call(B,b,m):p,m==null)break l;b=w({},b,m);break l;case 2:xt=!0}}m=c.callback,m!==null&&(l.flags|=64,y&&(l.flags|=8192),y=e.callbacks,y===null?e.callbacks=[m]:y.push(m))}else y={lane:m,tag:c.tag,payload:c.payload,callback:c.callback,next:null},r===null?(s=r=y,f=b):r=r.next=y,i|=m;if(c=c.next,c===null){if(c=e.shared.pending,c===null)break;y=c,c=y.next,y.next=null,e.lastBaseUpdate=y,e.shared.pending=null}}while(!0);r===null&&(f=b),e.baseState=f,e.firstBaseUpdate=s,e.lastBaseUpdate=r,n===null&&(e.shared.lanes=0),Pt|=i,l.lanes=i,l.memoizedState=b}}function w0(l,t){if(typeof l!="function")throw Error(h(191,l));l.call(t)}function W0(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var i=A.T,c={};A.T=c,Af(l,!1,t,a);try{var f=e(),s=A.S;if(s!==null&&s(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var r=Km(f,u);Qu(l,t,r,ql(l))}else Qu(l,t,u,ql(l))}catch(b){Qu(l,t,{then:function(){},status:"rejected",reason:b},ql())}finally{G.p=n,i!==null&&c.types!==null&&(i.types=c.types),A.T=i}}function Fm(){}function Ec(l,t,a,u){if(l.tag!==5)throw Error(h(476));var e=ps(l).queue;Ss(l,e,t,fa,a===null?Fm:function(){return zs(l),a(u)})}function ps(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:fa,baseState:fa,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:At,lastRenderedState:fa},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:At,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function zs(l){var t=ps(l);t.next===null&&(t=l.alternate.memoizedState),Qu(l,t.next.queue,{},ql())}function Ef(){return gl(ue)}function Ts(){return al().memoizedState}function Es(){return al().memoizedState}function Im(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=ql();l=Vt(a);var u=Lt(t,l,a);u!==null&&(_l(u,t,a),Yu(u,t,a)),t={cache:ff()},l.payload=t;return}t=t.return}}function Pm(l,t,a){var u=ql();a={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Jn(l)?Os(t,a):(a=uf(l,t,a,u),a!==null&&(_l(a,l,u),_s(a,t,u)))}function As(l,t,a){var u=ql();Qu(l,t,a,u)}function Qu(l,t,a,u){var e={lane:u,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Jn(l))Os(t,e);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,a);if(e.hasEagerState=!0,e.eagerState=c,Yl(c,i))return jn(l,t,e,0),V===null&&Qn(),!1}catch{}finally{}if(a=uf(l,t,e,u),a!==null)return _l(a,l,u),_s(a,t,u),!0}return!1}function Af(l,t,a,u){if(u={lane:2,revertLane:Cf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Jn(l)){if(t)throw Error(h(479))}else t=uf(l,a,u,2),t!==null&&_l(t,l,2)}function Jn(l){var t=l.alternate;return l===M||t!==null&&t===M}function Os(l,t){$a=Sn=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function _s(l,t,a){if((a&4194048)!==0){var u=t.lanes;u&=l.pendingLanes,a|=u,t.lanes=a,s0(l,a)}}var le={readContext:gl,use:Ln,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useLayoutEffect:P,useInsertionEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useSyncExternalStore:P,useId:P,useHostTransitionStatus:P,useFormState:P,useActionState:P,useOptimistic:P,useMemoCache:P,useCacheRefresh:P};le.useEffectEvent=P;var Ds={readContext:gl,use:Ln,useCallback:function(l,t){return zl().memoizedState=[l,t===void 0?null:t],l},useContext:gl,useEffect:dd,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,Ie(4194308,4,ys.bind(null,t,l),a)},useLayoutEffect:function(l,t){return Ie(4194308,4,l,t)},useInsertionEffect:function(l,t){Ie(4,2,l,t)},useMemo:function(l,t){var a=zl();t=t===void 0?null:t;var u=l();if(ga){qt(!0);try{l()}finally{qt(!1)}}return a.memoizedState=[u,t],u},useReducer:function(l,t,a){var u=zl();if(a!==void 0){var e=a(t);if(ga){qt(!0);try{a(t)}finally{qt(!1)}}}else e=t;return u.memoizedState=u.baseState=e,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:e},u.queue=l,l=l.dispatch=Pm.bind(null,M,l),[u.memoizedState,l]},useRef:function(l){var t=zl();return l={current:l},t.memoizedState=l},useState:function(l){l=zc(l);var t=l.queue,a=As.bind(null,M,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:zf,useDeferredValue:function(l,t){var a=zl();return Tf(a,l,t)},useTransition:function(){var l=zc(!1);return l=Ss.bind(null,M,l.queue,!0,!1),zl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var u=M,e=zl();if(q){if(a===void 0)throw Error(h(407));a=a()}else{if(a=t(),V===null)throw Error(h(349));(C&127)!==0||ls(u,t,a)}e.memoizedState=a;var n={value:a,getSnapshot:t};return e.queue=n,dd(as.bind(null,u,n,l),[l]),u.flags|=2048,uu(9,{destroy:void 0},ts.bind(null,u,n,a,t),null),a},useId:function(){var l=zl(),t=V.identifierPrefix;if(q){var a=ut,u=at;a=(u&~(1<<32-Rl(u)-1)).toString(32)+a,t="_"+t+"R_"+a,a=pn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof u.is=="string"?i.createElement("select",{is:u.is}):i.createElement("select"),u.multiple?n.multiple=!0:u.size&&(n.size=u.size);break;default:n=typeof u.is=="string"?i.createElement(e,{is:u.is}):i.createElement(e)}}n[yl]=t,n[Dl]=u;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(bl(n,e,u),e){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break l;case"img":u=!0;break l;default:u=!1}u&&dt(t)}}return J(t),Gi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==u&&dt(t);else{if(typeof u!="string"&&t.stateNode===null)throw Error(h(166));if(l=jt.current,Na(t)){if(l=t.stateNode,a=t.memoizedProps,u=null,e=rl,e!==null)switch(e.tag){case 27:case 5:u=e.memoizedProps}l[yl]=t,l=!!(l.nodeValue===a||u!==null&&u.suppressHydrationWarning===!0||Av(l.nodeValue,a)),l||Ft(t,!0)}else l=Un(l).createTextNode(u),l[yl]=t,t.stateNode=l}return J(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(u=Na(t),a!==null){if(l===null){if(!u)throw Error(h(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(h(557));l[yl]=t}else ma(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;J(t),l=!1}else a=Ni(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(Ul(t),t):(Ul(t),null);if((t.flags&128)!==0)throw Error(h(558))}return J(t),null;case 13:if(u=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(e=Na(t),u!==null&&u.dehydrated!==null){if(l===null){if(!e)throw Error(h(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(h(317));e[yl]=t}else ma(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;J(t),e=!1}else e=Ni(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),e=!0;if(!e)return t.flags&256?(Ul(t),t):(Ul(t),null)}return Ul(t),(t.flags&128)!==0?(t.lanes=a,t):(a=u!==null,l=l!==null&&l.memoizedState!==null,a&&(u=t.child,e=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(e=u.alternate.memoizedState.cachePool.pool),n=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(n=u.memoizedState.cachePool.pool),n!==e&&(u.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),Ge(t,t.updateQueue),J(t),null);case 4:return Ia(),l===null&&Bf(t.stateNode.containerInfo),J(t),null;case 10:return pt(t.type),J(t),null;case 19:if(vl(tl),u=t.memoizedState,u===null)return J(t),null;if(e=(t.flags&128)!==0,n=u.rendering,n===null)if(e)Au(u,!1);else{if(ll!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=hn(l),n!==null){for(t.flags|=128,Au(u,!1),l=n.updateQueue,t.updateQueue=l,Ge(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)X0(a,l),a=a.sibling;return L(tl,tl.current&1|2),q&&yt(t,u.treeForkCount),t.child}l=l.sibling}u.tail!==null&&Cl()>An&&(t.flags|=128,e=!0,Au(u,!1),t.lanes=4194304)}else{if(!e)if(l=hn(n),l!==null){if(t.flags|=128,e=!0,l=l.updateQueue,t.updateQueue=l,Ge(t,l),Au(u,!0),u.tail===null&&u.tailMode==="hidden"&&!n.alternate&&!q)return J(t),null}else 2*Cl()-u.renderingStartTime>An&&a!==536870912&&(t.flags|=128,e=!0,Au(u,!1),t.lanes=4194304);u.isBackwards?(n.sibling=t.child,t.child=n):(l=u.last,l!==null?l.sibling=n:t.child=n,u.last=n)}return u.tail!==null?(l=u.tail,u.rendering=l,u.tail=l.sibling,u.renderingStartTime=Cl(),l.sibling=null,a=tl.current,L(tl,e?a&1|2:a&1),q&&yt(t,u.treeForkCount),l):(J(t),null);case 22:case 23:return Ul(t),vf(),u=t.memoizedState!==null,l!==null?l.memoizedState!==null!==u&&(t.flags|=8192):u&&(t.flags|=8192),u?(a&536870912)!==0&&(t.flags&128)===0&&(J(t),t.subtreeFlags&6&&(t.flags|=8192)):J(t),a=t.updateQueue,a!==null&&Ge(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),u=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(u=t.memoizedState.cachePool.pool),u!==a&&(t.flags|=2048),l!==null&&vl(da),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),pt(nl),J(t),null;case 25:return null;case 30:return null}throw Error(h(156,t.tag))}function ey(l,t){switch(cf(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return pt(nl),Ia(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return on(t),null;case 31:if(t.memoizedState!==null){if(Ul(t),t.alternate===null)throw Error(h(340));ma()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Ul(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(h(340));ma()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return vl(tl),null;case 4:return Ia(),null;case 10:return pt(t.type),null;case 22:case 23:return Ul(t),vf(),l!==null&&vl(da),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return pt(nl),null;case 25:return null;default:return null}}function Xs(l,t){switch(cf(t),t.tag){case 3:pt(nl),Ia();break;case 26:case 27:case 5:on(t);break;case 4:Ia();break;case 31:t.memoizedState!==null&&Ul(t);break;case 13:Ul(t);break;case 19:vl(tl);break;case 10:pt(t.type);break;case 22:case 23:Ul(t),vf(),l!==null&&vl(da);break;case 24:pt(nl)}}function ye(l,t){try{var a=t.updateQueue,u=a!==null?a.lastEffect:null;if(u!==null){var e=u.next;a=e;do{if((a.tag&l)===l){u=void 0;var n=a.create,i=a.inst;u=n(),i.destroy=u}a=a.next}while(a!==e)}}catch(c){Q(t,t.return,c)}}function It(l,t,a){try{var u=t.updateQueue,e=u!==null?u.lastEffect:null;if(e!==null){var n=e.next;u=n;do{if((u.tag&l)===l){var i=u.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,e=t;var f=a,s=c;try{s()}catch(r){Q(e,f,r)}}}u=u.next}while(u!==n)}}catch(r){Q(t,t.return,r)}}function Qs(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{W0(t,a)}catch(u){Q(l,l.return,u)}}}function js(l,t,a){a.props=ba(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(u){Q(l,t,u)}}function ju(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var u=l.stateNode;break;case 30:u=l.stateNode;break;default:u=l.stateNode}typeof a=="function"?l.refCleanup=a(u):a.current=u}}catch(e){Q(l,t,e)}}function et(l,t){var a=l.ref,u=l.refCleanup;if(a!==null)if(typeof u=="function")try{u()}catch(e){Q(l,t,e)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(e){Q(l,t,e)}else a.current=null}function Zs(l){var t=l.type,a=l.memoizedProps,u=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&u.focus();break l;case"img":a.src?u.src=a.src:a.srcSet&&(u.srcset=a.srcSet)}}catch(e){Q(l,l.return,e)}}function Xi(l,t,a){try{var u=l.stateNode;Ay(u,l.type,a,t),u[Dl]=t}catch(e){Q(l,l.return,e)}}function Vs(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ta(l.type)||l.tag===4}function Qi(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||Vs(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ta(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Mc(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=bt));else if(u!==4&&(u===27&&ta(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Mc(l,t,a),l=l.sibling;l!==null;)Mc(l,t,a),l=l.sibling}function En(l,t,a){var u=l.tag;if(u===5||u===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(u!==4&&(u===27&&ta(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(En(l,t,a),l=l.sibling;l!==null;)En(l,t,a),l=l.sibling}function Ls(l){var t=l.stateNode,a=l.memoizedProps;try{for(var u=l.type,e=t.attributes;e.length;)t.removeAttributeNode(e[0]);bl(t,u,a),t[yl]=l,t[Dl]=a}catch(n){Q(l,l.return,n)}}var rt=!1,el=!1,ji=!1,Ed=typeof WeakSet=="function"?WeakSet:Set,dl=null;function ny(l,t){if(l=l.containerInfo,Rc=Bn,l=x0(l),tf(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var u=a.getSelection&&a.getSelection();if(u&&u.rangeCount!==0){a=u.anchorNode;var e=u.anchorOffset,n=u.focusNode;u=u.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var i=0,c=-1,f=-1,s=0,r=0,b=l,m=null;t:for(;;){for(var y;b!==a||e!==0&&b.nodeType!==3||(c=i+e),b!==n||u!==0&&b.nodeType!==3||(f=i+u),b.nodeType===3&&(i+=b.nodeValue.length),(y=b.firstChild)!==null;)m=b,b=y;for(;;){if(b===l)break t;if(m===a&&++s===e&&(c=i),m===n&&++r===u&&(f=i),(y=b.nextSibling)!==null)break;b=m,m=b.parentNode}b=y}a=c===-1||f===-1?null:{start:c,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(qc={focusedElem:l,selectionRange:a},Bn=!1,dl=t;dl!==null;)if(t=dl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,dl=l;else for(;dl!==null;){switch(t=dl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),bl(n,u,a),n[yl]=l,sl(n),u=n;break l;case"link":var i=Kd("link","href",e).get(u+(a.href||""));if(i){for(var c=0;cB&&(i=B,B=E,E=i);var d=wo(c,E),o=wo(c,B);if(d&&o&&(y.rangeCount!==1||y.anchorNode!==d.node||y.anchorOffset!==d.offset||y.focusNode!==o.node||y.focusOffset!==o.offset)){var v=b.createRange();v.setStart(d.node,d.offset),y.removeAllRanges(),E>B?(y.addRange(v),y.extend(o.node,o.offset)):(v.setEnd(o.node,o.offset),y.addRange(v))}}}}for(b=[],y=c;y=y.parentNode;)y.nodeType===1&&b.push({element:y,left:y.scrollLeft,top:y.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ca?32:a,A.T=null,a=xc,xc=null;var n=Jt,i=zt;if(cl=0,nu=Jt=null,zt=0,(Y&6)!==0)throw Error(h(331));var c=Y;if(Y|=4,tv(n.current),Is(n,n.current,i,a),Y=c,re(0,!1),Bl&&typeof Bl.onPostCommitFiberRoot=="function")try{Bl.onPostCommitFiberRoot(ce,n)}catch{}return!0}finally{G.p=e,A.T=u,gv(l,t)}}function Dd(l,t,a){t=Kl(a,t),t=Oc(l.stateNode,t,2),l=Lt(l,t,2),l!==null&&(oe(l,2),ct(l))}function Q(l,t,a){if(l.tag===3)Dd(l,l,a);else for(;t!==null;){if(t.tag===3){Dd(t,l,a);break}else if(t.tag===1){var u=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Kt===null||!Kt.has(u))){l=Kl(a,l),a=Hs(2),u=Lt(t,a,2),u!==null&&(Cs(a,u,t,l),oe(u,2),ct(u));break}}t=t.return}}function Vi(l,t,a){var u=l.pingCache;if(u===null){u=l.pingCache=new fy;var e=new Set;u.set(t,e)}else e=u.get(t),e===void 0&&(e=new Set,u.set(t,e));e.has(a)||(Uf=!0,e.add(a),l=my.bind(null,l,t,a),t.then(l,l))}function my(l,t,a){var u=l.pingCache;u!==null&&u.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,V===l&&(C&a)===a&&(ll===4||ll===3&&(C&62914560)===C&&300>Cl()-kn?(Y&2)===0&&iu(l,0):xf|=a,eu===C&&(eu=0)),ct(l)}function hv(l,t){t===0&&(t=o0()),l=za(l,t),l!==null&&(oe(l,t),ct(l))}function yy(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),hv(l,a)}function ry(l,t){var a=0;switch(l.tag){case 31:case 13:var u=l.stateNode,e=l.memoizedState;e!==null&&(a=e.retryLane);break;case 19:u=l.stateNode;break;case 22:u=l.stateNode._retryCache;break;default:throw Error(h(314))}u!==null&&u.delete(t),hv(l,a)}function gy(l,t){return Jc(l,t)}var Dn=null,Ha=null,Cc=!1,Mn=!1,Li=!1,Qt=0;function ct(l){l!==Ha&&l.next===null&&(Ha===null?Dn=Ha=l:Ha=Ha.next=l),Mn=!0,Cc||(Cc=!0,hy())}function re(l,t){if(!Li&&Mn){Li=!0;do for(var a=!1,u=Dn;u!==null;){if(!t)if(l!==0){var e=u.pendingLanes;if(e===0)var n=0;else{var i=u.suspendedLanes,c=u.pingedLanes;n=(1<<31-Rl(42|l)+1)-1,n&=e&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,Md(u,n))}else n=C,n=qn(u,u===V?n:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(n&3)===0||fe(u,n)||(a=!0,Md(u,n));u=u.next}while(a);Li=!1}}function by(){Sv()}function Sv(){Mn=Cc=!1;var l=0;Qt!==0&&_y()&&(l=Qt);for(var t=Cl(),a=null,u=Dn;u!==null;){var e=u.next,n=pv(u,t);n===0?(u.next=null,a===null?Dn=e:a.next=e,e===null&&(Ha=a)):(a=u,(l!==0||(n&3)!==0)&&(Mn=!0)),u=e}cl!==0&&cl!==5||re(l,!1),Qt!==0&&(Qt=0)}function pv(l,t){for(var a=l.suspendedLanes,u=l.pingedLanes,e=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var r=f.transferSize,b=f.initiatorType;r&&Rd(b)&&(f=f.responseEnd,i+=r*(f"u"?null:document;function Nv(l,t,a){var u=yu;if(u&&typeof t=="string"&&t){var e=Ll(t);e='link[rel="'+l+'"][href="'+e+'"]',typeof a=="string"&&(e+='[crossorigin="'+a+'"]'),Zd.has(e)||(Zd.add(e),l={rel:l,crossOrigin:a,href:t},u.querySelector(e)===null&&(t=u.createElement("link"),bl(t,"link",l),sl(t),u.head.appendChild(t)))}}function Ry(l){Dt.D(l),Nv("dns-prefetch",l,null)}function qy(l,t){Dt.C(l,t),Nv("preconnect",l,t)}function Yy(l,t,a){Dt.L(l,t,a);var u=yu;if(u&&l&&t){var e='link[rel="preload"][as="'+Ll(t)+'"]';t==="image"&&a&&a.imageSrcSet?(e+='[imagesrcset="'+Ll(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(e+='[imagesizes="'+Ll(a.imageSizes)+'"]')):e+='[href="'+Ll(l)+'"]';var n=e;switch(t){case"style":n=cu(l);break;case"script":n=ru(l)}Wl.has(n)||(l=w({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),Wl.set(n,l),u.querySelector(e)!==null||t==="style"&&u.querySelector(ge(n))||t==="script"&&u.querySelector(be(n))||(t=u.createElement("link"),bl(t,"link",l),sl(t),u.head.appendChild(t)))}}function Gy(l,t){Dt.m(l,t);var a=yu;if(a&&l){var u=t&&typeof t.as=="string"?t.as:"script",e='link[rel="modulepreload"][as="'+Ll(u)+'"][href="'+Ll(l)+'"]',n=e;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=ru(l)}if(!Wl.has(n)&&(l=w({rel:"modulepreload",href:l},t),Wl.set(n,l),a.querySelector(e)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(be(n)))return}u=a.createElement("link"),bl(u,"link",l),sl(u),a.head.appendChild(u)}}}function Xy(l,t,a){Dt.S(l,t,a);var u=yu;if(u&&l){var e=Ka(u).hoistableStyles,n=cu(l);t=t||"default";var i=e.get(n);if(!i){var c={loading:0,preload:null};if(i=u.querySelector(ge(n)))c.loading=5;else{l=w({rel:"stylesheet",href:l,"data-precedence":t},a),(a=Wl.get(n))&&Rf(l,a);var f=i=u.createElement("link");sl(f),bl(f,"link",l),f._p=new Promise(function(s,r){f.onload=s,f.onerror=r}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,an(i,t,u)}i={type:"stylesheet",instance:i,count:1,state:c},e.set(n,i)}}}function Qy(l,t){Dt.X(l,t);var a=yu;if(a&&l){var u=Ka(a).hoistableScripts,e=ru(l),n=u.get(e);n||(n=a.querySelector(be(e)),n||(l=w({src:l,async:!0},t),(t=Wl.get(e))&&qf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function jy(l,t){Dt.M(l,t);var a=yu;if(a&&l){var u=Ka(a).hoistableScripts,e=ru(l),n=u.get(e);n||(n=a.querySelector(be(e)),n||(l=w({src:l,async:!0,type:"module"},t),(t=Wl.get(e))&&qf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},u.set(e,n))}}function Vd(l,t,a,u){var e=(e=jt.current)?xn(e):null;if(!e)throw Error(h(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=cu(a.href),a=Ka(e).hoistableStyles,u=a.get(t),u||(u={type:"style",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=cu(a.href);var n=Ka(e).hoistableStyles,i=n.get(l);if(i||(e=e.ownerDocument||e,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=e.querySelector(ge(l)))&&!n._p&&(i.instance=n,i.state.loading=5),Wl.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Wl.set(l,a),n||Zy(e,l,a,i.state))),t&&u===null)throw Error(h(528,""));return i}if(t&&u!==null)throw Error(h(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ru(a),a=Ka(e).hoistableScripts,u=a.get(t),u||(u={type:"script",instance:null,count:0,state:null},a.set(t,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(h(444,l))}}function cu(l){return'href="'+Ll(l)+'"'}function ge(l){return'link[rel="stylesheet"]['+l+"]"}function Uv(l){return w({},l,{"data-precedence":l.precedence,precedence:null})}function Zy(l,t,a,u){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?u.loading=1:(t=l.createElement("link"),u.preload=t,t.addEventListener("load",function(){return u.loading|=1}),t.addEventListener("error",function(){return u.loading|=2}),bl(t,"link",a),sl(t),l.head.appendChild(t))}function ru(l){return'[src="'+Ll(l)+'"]'}function be(l){return"script[async]"+l}function Ld(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var u=l.querySelector('style[data-href~="'+Ll(a.href)+'"]');if(u)return t.instance=u,sl(u),u;var e=w({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return u=(l.ownerDocument||l).createElement("style"),sl(u),bl(u,"style",e),an(u,a.precedence,l),t.instance=u;case"stylesheet":e=cu(a.href);var n=l.querySelector(ge(e));if(n)return t.state.loading|=4,t.instance=n,sl(n),n;u=Uv(a),(e=Wl.get(e))&&Rf(u,e),n=(l.ownerDocument||l).createElement("link"),sl(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",u),t.state.loading|=4,an(n,a.precedence,l),t.instance=n;case"script":return n=ru(a.src),(e=l.querySelector(be(n)))?(t.instance=e,sl(e),e):(u=a,(e=Wl.get(n))&&(u=w({},a),qf(u,e)),l=l.ownerDocument||l,e=l.createElement("script"),sl(e),bl(e,"link",u),l.head.appendChild(e),t.instance=e);case"void":return null;default:throw Error(h(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(u=t.instance,t.state.loading|=4,an(u,a.precedence,l));return t.instance}function an(l,t,a){for(var u=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),e=u.length?u[u.length-1]:null,n=e,i=0;i title"):null)}function Vy(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function xv(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Ly(l,t,a,u){if(a.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var e=cu(u.href),n=t.querySelector(ge(e));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Hn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,sl(n);return}n=t.ownerDocument||t,u=Uv(u),(e=Wl.get(e))&&Rf(u,e),n=n.createElement("link"),sl(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",u),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Hn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var wi=0;function Ky(l,t){return l.stylesheets&&l.count===0&&en(l,l.stylesheets),0wi?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(u),clearTimeout(e)}}:null}function Hn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)en(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Cn=null;function en(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Cn=new Map,t.forEach(Jy,l),Cn=null,Hn.call(l))}function Jy(l,t){if(!(t.state.loading&4)){var a=Cn.get(l);if(a)var u=a.get(null);else{a=new Map,Cn.set(l,a);for(var e=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n{"use strict";function Qv(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Qv)}catch(l){console.error(l)}}Qv(),jv.exports=Xv()});var Jv=lt(Pn=>{"use strict";var lr=Symbol.for("react.transitional.element"),tr=Symbol.for("react.fragment");function Kv(l,t,a){var u=null;if(a!==void 0&&(u=""+a),t.key!==void 0&&(u=""+t.key),"key"in t){a={};for(var e in t)e!=="key"&&(a[e]=t[e])}else a=t;return t=a.ref,{$$typeof:lr,type:l,key:u,ref:t!==void 0?t:null,props:a}}Pn.Fragment=tr;Pn.jsx=Kv;Pn.jsxs=Kv});var jf=lt((zr,kv)=>{"use strict";kv.exports=Jv()});var F=pe(Te()),Fv=pe(Zv());var Vv;function Lv(){return Vv??(Vv=acquireVsCodeApi()),Vv}var S=pe(jf()),Ea=Lv(),wv={critical:{label:"Critical",color:"#e11d48"},high:{label:"High",color:"#ea580c"},normal:{label:"Normal",color:"#ca8a04"},low:{label:"Low",color:"#16a34a"}},Wv=["#6366f1","#f59e0b","#8b5cf6","#10b981","#ef4444","#3b82f6"],ar="done",gu=[7,14,30,0];function ur(l){let t=l.completedAt??l.movedAt;if(!t)return null;let a=new Date(t);return isNaN(a.getTime())?null:a}function er(l){let t=l.split(",").map(a=>a.trim()).filter(Boolean);return Array.from(new Set(t.map(a=>a.toLowerCase())))}function nr(l){return l.split(" ").slice(0,2).map(t=>t[0]?.toUpperCase()??"").join("")}function ir(l,t){return l.taskIds.map(a=>t.tasks[a]).filter(a=>a!==void 0)}function cr({priority:l}){let t=wv[l]??wv.normal;return(0,S.jsx)("span",{className:"priority-chip",style:{borderColor:`${t.color}55`,color:t.color,background:`${t.color}1a`},children:t.label})}function fr({task:l,onEdit:t,isDragging:a,onDragStart:u,onDragEnd:e}){return(0,S.jsxs)("div",{className:`task-card${a?" is-dragging":""}`,draggable:!0,onDragStart:n=>{n.dataTransfer.setData("text/task-id",l.id),n.dataTransfer.effectAllowed="move",u(l.id)},onDragEnd:e,onClick:()=>t(l),children:[(0,S.jsxs)("div",{className:"task-title-row",children:[(0,S.jsx)("span",{className:"task-title",children:l.title}),(0,S.jsx)(cr,{priority:l.priority??"normal"})]}),l.description?(0,S.jsx)("p",{className:"task-description",children:l.description}):null,(0,S.jsxs)("div",{className:"task-footer",children:[l.assignee?(0,S.jsx)("span",{className:"assignee-avatar",title:l.assignee,children:nr(l.assignee)||"?"}):(0,S.jsx)("span",{className:"no-assignee",children:"\u2014"}),l.tags&&l.tags.length>0?(0,S.jsxs)("div",{className:"tag-list",children:[l.tags.slice(0,3).map(n=>(0,S.jsx)("span",{className:"tag-pill",children:n},n)),l.tags.length>3?(0,S.jsxs)("span",{className:"tag-pill",children:["+",l.tags.length-3]}):null]}):null]})]})}function or(){let[l,t]=(0,F.useState)("loading"),[a,u]=(0,F.useState)(""),[e,n]=(0,F.useState)(""),[i,c]=(0,F.useState)({columns:[],tasks:{}}),[f,s]=(0,F.useState)(null),[r,b]=(0,F.useState)(""),[m,y]=(0,F.useState)(null),[p,E]=(0,F.useState)(null),[B,d]=(0,F.useState)(7),[o,v]=(0,F.useState)(null),[g,T]=(0,F.useState)(""),[H,z]=(0,F.useState)(""),[_,N]=(0,F.useState)(""),[R,$l]=(0,F.useState)(""),[he,Zf]=(0,F.useState)("normal"),[Vf,Lf]=(0,F.useState)(""),Kf=(0,F.useRef)(null),Iv=(0,F.useMemo)(()=>Object.keys(i.tasks).length,[i.tasks]);(0,F.useEffect)(()=>{let O=aa=>{let ol=aa.data;if(ol.type==="loading"){t("loading");return}if(ol.type==="error"){u(ol.message),t("error");return}if(ol.type==="github-sign-in-required"){n(`${ol.owner}/${ol.repo}`),t("github-sign-in-required");return}c(ol.data),ol.githubRepo&&n(ol.githubRepo),t("ready")};return window.addEventListener("message",O),Ea.postMessage({type:"ready"}),()=>window.removeEventListener("message",O)},[]),(0,F.useEffect)(()=>{f&&setTimeout(()=>Kf.current?.focus(),40)},[f]);let Pv=O=>{let aa=i.columns.find(ol=>ol.taskIds.includes(O.id));v(O),T(aa?.id??""),z(O.title),N(O.description??""),$l(O.assignee??""),Zf(O.priority??"normal"),Lf((O.tags??[]).join(", "))},Jf=()=>{!r.trim()||!f||(Ea.postMessage({type:"createTask",columnId:f,title:r.trim(),priority:"normal",tags:[]}),b(""),s(null))},kf=()=>{!o||!H.trim()||!g||(Ea.postMessage({type:"updateTask",taskId:o.id,columnId:g,title:H.trim(),description:_,assignee:R,priority:he,tags:er(Vf)}),v(null))},l1=()=>{o&&(Ea.postMessage({type:"deleteTask",taskId:o.id}),v(null))},t1=(O,aa)=>{O.preventDefault();let ol=O.dataTransfer.getData("text/task-id");ol&&Ea.postMessage({type:"moveTask",taskId:ol,toColumnId:aa}),y(null)};return l==="loading"?(0,S.jsx)("p",{style:{padding:"12px",color:"var(--vscode-descriptionForeground)"},children:"Loading board\u2026"}):l==="error"?(0,S.jsx)("p",{style:{padding:"12px",color:"#ef4444"},children:a}):l==="github-sign-in-required"?(0,S.jsxs)("div",{style:{padding:"12px",display:"flex",flexDirection:"column",gap:"10px"},children:[(0,S.jsxs)("p",{style:{margin:0,color:"var(--vscode-descriptionForeground)",fontSize:"0.85rem"},children:["This project uses GitHub Issues",e?` (${e})`:"","."]}),(0,S.jsx)("button",{onClick:()=>Ea.postMessage({type:"githubSignIn"}),children:"Sign in to GitHub"})]}):(0,S.jsxs)("div",{className:"kanban-shell",children:[(0,S.jsx)("style",{children:` + *, *::before, *::after { box-sizing: border-box; } + :root { - --kb-bg: var(--vscode-editor-background); - --kb-surface: var(--vscode-sideBar-background); - --kb-panel: var(--vscode-editorWidget-background); - --kb-card: var(--vscode-editorWidget-background); - --kb-border: var(--vscode-widget-border); - --kb-border-strong: var(--vscode-focusBorder); - --kb-foreground: var(--vscode-foreground); - --kb-muted: var(--vscode-descriptionForeground); - --kb-accent: var(--vscode-textLink-foreground); - --kb-badge-bg: var(--vscode-badge-background); - --kb-badge-fg: var(--vscode-badge-foreground); + --kb-bg: var(--vscode-editor-background); + --kb-surface: var(--vscode-sideBar-background); + --kb-panel: var(--vscode-editorWidget-background); + --kb-border: var(--vscode-widget-border, #3c3c3c); + --kb-border-focus: var(--vscode-focusBorder); + --kb-fg: var(--vscode-foreground); + --kb-muted: var(--vscode-descriptionForeground); + --kb-accent: var(--vscode-textLink-foreground); + --kb-badge-bg: var(--vscode-badge-background); + --kb-badge-fg: var(--vscode-badge-foreground); + --kb-input-bg: var(--vscode-input-background); + --kb-input-fg: var(--vscode-input-foreground); + --kb-input-border: var(--vscode-input-border, #3c3c3c); + --kb-btn-bg: var(--vscode-button-background); + --kb-btn-fg: var(--vscode-button-foreground); + --kb-btn-hover: var(--vscode-button-hoverBackground); + --kb-btn2-bg: var(--vscode-button-secondaryBackground, #3c3c3c); + --kb-btn2-fg: var(--vscode-button-secondaryForeground, var(--kb-fg)); + --kb-btn2-hover: var(--vscode-button-secondaryHoverBackground, #4c4c4c); } .kanban-shell { font-family: var(--vscode-font-family); + font-size: var(--vscode-font-size, 13px); + color: var(--kb-fg); + background: var(--kb-bg); display: flex; flex-direction: column; - gap: 12px; - background: linear-gradient( - 180deg, - color-mix(in srgb, var(--kb-bg) 96%, var(--kb-surface) 4%), - color-mix(in srgb, var(--kb-bg) 92%, var(--kb-surface) 8%) - ); - border: 1px solid var(--kb-border); - border-radius: 12px; + gap: 10px; padding: 10px; - min-height: calc(100vh - 24px); - box-sizing: border-box; + min-height: 100vh; } + /* \u2500\u2500\u2500 Header \u2500\u2500\u2500 */ .board-header { display: flex; justify-content: space-between; - align-items: baseline; - gap: 12px; + align-items: center; + gap: 8px; + padding-bottom: 8px; + border-bottom: 1px solid color-mix(in srgb, var(--kb-border) 50%, transparent); } .board-title { margin: 0; - letter-spacing: 0.06em; + font-size: 0.75rem; + font-weight: 600; text-transform: uppercase; - font-size: 0.95rem; - color: var(--kb-foreground); + letter-spacing: 0.09em; + opacity: 0.65; } + .board-repo { + font-size: 0.68rem; + color: var(--kb-muted); + margin-top: 2px; + } + + .header-right { display: flex; align-items: center; gap: 5px; } + .task-count { - border: 1px solid color-mix(in srgb, var(--kb-border) 75%, transparent); border-radius: 999px; - padding: 2px 8px; - font-size: 0.75rem; + padding: 1px 8px; + font-size: 0.68rem; + font-variant-numeric: tabular-nums; background: var(--kb-badge-bg); color: var(--kb-badge-fg); } + .icon-btn { + background: transparent; + border: 1px solid transparent; + color: var(--kb-muted); + cursor: pointer; + border-radius: 4px; + padding: 2px 6px; + font-size: 0.82rem; + line-height: 1.4; + transition: color 120ms, border-color 120ms, background 120ms; + } + .icon-btn:hover { + color: var(--kb-fg); + border-color: var(--kb-border); + background: color-mix(in srgb, var(--kb-border) 25%, transparent); + } + + /* \u2500\u2500\u2500 Columns \u2500\u2500\u2500 */ .board-columns { display: grid; grid-auto-flow: column; - grid-auto-columns: minmax(240px, 1fr); - gap: 10px; + grid-auto-columns: minmax(200px, 1fr); + gap: 8px; overflow-x: auto; - padding-bottom: 8px; + padding-bottom: 4px; + align-items: start; } .board-column { - border: 1px solid var(--kb-border); - border-radius: 10px; + border: 1px solid color-mix(in srgb, var(--kb-border) 65%, transparent); + border-top: 2px solid var(--col-accent, var(--kb-border)); + border-radius: 7px; padding: 8px; - background: color-mix(in srgb, var(--kb-panel) 92%, var(--kb-bg) 8%); - min-height: 220px; + background: color-mix(in srgb, var(--kb-surface) 55%, var(--kb-bg) 45%); display: flex; flex-direction: column; - gap: 8px; - backdrop-filter: blur(4px); + gap: 6px; + transition: background 140ms, border-color 140ms; + } + + .board-column.drag-over { + background: color-mix(in srgb, var(--kb-border-focus) 8%, var(--kb-bg) 92%); + border-color: var(--kb-border-focus); } .column-head { display: flex; justify-content: space-between; align-items: center; - gap: 8px; + padding-bottom: 4px; } .column-title { margin: 0; - font-size: 0.85rem; + font-size: 0.7rem; + font-weight: 600; text-transform: uppercase; - letter-spacing: 0.05em; + letter-spacing: 0.08em; + color: var(--kb-muted); } .column-count { - color: var(--kb-muted); - font-size: 0.75rem; + min-width: 18px; + height: 17px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 5px; + border-radius: 999px; + font-size: 0.62rem; + font-variant-numeric: tabular-nums; + background: color-mix(in srgb, var(--kb-badge-bg) 65%, transparent); + color: var(--kb-badge-fg); + } + + .column-cards { + display: flex; + flex-direction: column; + gap: 5px; + min-height: 32px; } + /* \u2500\u2500\u2500 Cards \u2500\u2500\u2500 */ .task-card { - border: 1px solid color-mix(in srgb, var(--kb-border) 80%, transparent); - border-radius: 8px; - background: color-mix(in srgb, var(--kb-card) 92%, var(--kb-bg) 8%); - padding: 8px; + border: 1px solid color-mix(in srgb, var(--kb-border) 55%, transparent); + border-radius: 5px; + background: var(--kb-bg); + padding: 8px 9px; display: flex; flex-direction: column; - gap: 7px; + gap: 5px; cursor: pointer; - transition: transform 140ms ease, border-color 140ms ease; + user-select: none; + transition: transform 120ms ease, border-color 120ms ease, + box-shadow 120ms ease, opacity 120ms ease; } .task-card:hover { transform: translateY(-1px); - border-color: var(--kb-border-strong); + border-color: color-mix(in srgb, var(--kb-border-focus) 55%, transparent); + box-shadow: 0 2px 6px color-mix(in srgb, black 20%, transparent); } + .task-card.is-dragging { opacity: 0.35; transform: scale(0.97); } + .task-title-row { display: flex; justify-content: space-between; align-items: flex-start; - gap: 8px; + gap: 6px; + } + + .task-title { + font-size: 0.8rem; + font-weight: 500; + line-height: 1.35; + flex: 1; + min-width: 0; + word-break: break-word; } .priority-chip { - border: 1px solid color-mix(in srgb, var(--kb-accent) 70%, transparent); - color: var(--kb-accent); - background: color-mix(in srgb, var(--kb-accent) 14%, transparent); + flex-shrink: 0; + border: 1px solid; border-radius: 999px; - padding: 1px 8px; - font-size: 0.7rem; + padding: 1px 6px; + font-size: 0.58rem; + font-weight: 700; text-transform: uppercase; - letter-spacing: 0.04em; + letter-spacing: 0.06em; white-space: nowrap; } .task-description { margin: 0; color: var(--kb-muted); - font-size: 0.8rem; - line-height: 1.35; + font-size: 0.73rem; + line-height: 1.4; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; } .task-footer { display: flex; + align-items: center; justify-content: space-between; - gap: 8px; + gap: 5px; + } + + .assignee-avatar { + display: inline-flex; + align-items: center; + justify-content: center; + width: 19px; + height: 19px; + border-radius: 999px; + flex-shrink: 0; + font-size: 0.57rem; + font-weight: 700; + background: color-mix(in srgb, var(--kb-accent) 22%, transparent); + color: var(--kb-accent); + border: 1px solid color-mix(in srgb, var(--kb-accent) 35%, transparent); + } + + .no-assignee { font-size: 0.65rem; color: color-mix(in srgb, var(--kb-muted) 50%, transparent); } + + .tag-list { display: flex; gap: 3px; overflow: hidden; flex-wrap: nowrap; } + + .tag-pill { + border-radius: 3px; + padding: 1px 5px; + font-size: 0.58rem; + background: color-mix(in srgb, var(--kb-border) 55%, transparent); color: var(--kb-muted); - font-size: 0.7rem; white-space: nowrap; - overflow: hidden; } - .task-footer > span { - text-overflow: ellipsis; - overflow: hidden; + /* \u2500\u2500\u2500 Add task \u2500\u2500\u2500 */ + .add-task-btn { + display: flex; + align-items: center; + gap: 5px; + width: 100%; + background: transparent; + border: 1px dashed color-mix(in srgb, var(--kb-border) 60%, transparent); + border-radius: 5px; + color: color-mix(in srgb, var(--kb-muted) 80%, transparent); + font-family: var(--vscode-font-family); + font-size: 0.73rem; + padding: 5px 8px; + cursor: pointer; + text-align: left; + transition: color 120ms, border-color 120ms, background 120ms; + } + .add-task-btn:hover { + color: var(--kb-fg); + border-color: var(--kb-border-focus); + background: color-mix(in srgb, var(--kb-border) 12%, transparent); } .task-create { display: flex; - gap: 6px; + flex-direction: column; + gap: 5px; + border: 1px solid var(--kb-border-focus); + border-radius: 5px; + padding: 7px 8px; + background: var(--kb-bg); } .task-create input { + background: transparent; + border: none; + outline: none; + color: var(--kb-fg); + font-family: var(--vscode-font-family); + font-size: 0.8rem; + padding: 1px 0; width: 100%; } + .task-create input::placeholder { color: var(--kb-muted); } - .editor { - border-top: 1px solid color-mix(in srgb, var(--kb-border) 70%, transparent); - margin-top: 4px; - padding-top: 8px; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 8px; + .task-create-actions { display: flex; gap: 4px; } + + /* \u2500\u2500\u2500 Buttons \u2500\u2500\u2500 */ + button { + font-family: var(--vscode-font-family); + font-size: 0.76rem; + border-radius: 3px; + padding: 3px 10px; + cursor: pointer; + border: none; + transition: background 110ms; } - .editor h4 { - margin: 0; - grid-column: 1 / -1; - font-size: 0.85rem; - letter-spacing: 0.05em; + button.primary, button:not(.secondary):not(.icon-btn):not(.add-task-btn):not(.danger) { + background: var(--kb-btn-bg); + color: var(--kb-btn-fg); + } + button.primary:hover, + button:not(.secondary):not(.icon-btn):not(.add-task-btn):not(.danger):hover { + background: var(--kb-btn-hover); + } + + button.secondary { + background: var(--kb-btn2-bg); + color: var(--kb-btn2-fg); + } + button.secondary:hover { background: var(--kb-btn2-hover); } + + button.danger { + background: color-mix(in srgb, #dc2626 18%, transparent); + color: #f87171; + border: 1px solid color-mix(in srgb, #dc2626 35%, transparent); + } + button.danger:hover { background: color-mix(in srgb, #dc2626 28%, transparent); } + + /* \u2500\u2500\u2500 Form controls \u2500\u2500\u2500 */ + input, select, textarea { + font-family: var(--vscode-font-family); + font-size: 0.8rem; + background: var(--kb-input-bg); + color: var(--kb-input-fg); + border: 1px solid var(--kb-input-border); + border-radius: 3px; + padding: 4px 7px; + outline: none; + width: 100%; + } + input:focus, select:focus, textarea:focus { border-color: var(--kb-border-focus); } + textarea { resize: vertical; } + + label { + display: block; + font-size: 0.67rem; + color: var(--kb-muted); text-transform: uppercase; + letter-spacing: 0.06em; + margin-bottom: 4px; } - .editor textarea, - .editor input, - .editor select { + .field { display: flex; flex-direction: column; } + + /* \u2500\u2500\u2500 Edit modal \u2500\u2500\u2500 */ + .modal-backdrop { + position: fixed; + inset: 0; + background: color-mix(in srgb, black 55%, transparent); + display: flex; + align-items: center; + justify-content: center; + z-index: 100; + padding: 16px; + } + + .modal { + background: var(--kb-surface, var(--kb-bg)); + border: 1px solid var(--kb-border); + border-radius: 9px; + padding: 16px; width: 100%; - box-sizing: border-box; + max-width: min(460px, calc(100vw - 32px)); + display: flex; + flex-direction: column; + gap: 12px; + box-shadow: 0 12px 40px color-mix(in srgb, black 45%, transparent); + } + + .modal-header { + display: flex; + justify-content: space-between; + align-items: center; + } + + .modal-title { + margin: 0; + font-size: 0.72rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--kb-muted); } - .editor .full { - grid-column: 1 / -1; + .modal-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; } - .editor-actions { - grid-column: 1 / -1; + .modal-grid .full { grid-column: 1 / -1; } + + .modal-actions { display: flex; gap: 6px; + align-items: center; + border-top: 1px solid color-mix(in srgb, var(--kb-border) 55%, transparent); + padding-top: 10px; + } + + .spacer { flex: 1; } + + /* \u2500\u2500\u2500 Done column window control \u2500\u2500\u2500 */ + .done-window-btn { + background: color-mix(in srgb, var(--kb-badge-bg) 50%, transparent); + color: var(--kb-muted); + border: 1px solid color-mix(in srgb, var(--kb-border) 55%, transparent); + border-radius: 999px; + padding: 1px 6px; + font-size: 0.6rem; + font-variant-numeric: tabular-nums; + cursor: pointer; + transition: color 120ms, border-color 120ms, background 120ms; + } + .done-window-btn:hover { + color: var(--kb-fg); + border-color: var(--kb-border-focus); + background: color-mix(in srgb, var(--kb-border) 30%, transparent); + } + + .done-hidden-btn { + background: transparent; + border: 1px dashed color-mix(in srgb, var(--kb-border) 45%, transparent); + border-radius: 4px; + color: color-mix(in srgb, var(--kb-muted) 70%, transparent); + font-family: var(--vscode-font-family); + font-size: 0.65rem; + padding: 4px 8px; + cursor: pointer; + width: 100%; + text-align: center; + transition: color 120ms, border-color 120ms; + } + .done-hidden-btn:hover { + color: var(--kb-muted); + border-color: var(--kb-border); + } + + /* \u2500\u2500\u2500 Empty state \u2500\u2500\u2500 */ + .empty-column { + font-size: 0.7rem; + color: color-mix(in srgb, var(--kb-muted) 55%, transparent); + text-align: center; + padding: 10px 4px; + border: 1px dashed color-mix(in srgb, var(--kb-border) 35%, transparent); + border-radius: 4px; } - @media (max-width: 720px) { - .editor { - grid-template-columns: 1fr; - } + @media (max-width: 560px) { + .modal-grid { grid-template-columns: 1fr; } } - `}),(0,p.jsxs)("div",{className:"board-header",children:[(0,p.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[(0,p.jsx)("h3",{className:"board-title",children:"Project Board"}),e?(0,p.jsxs)("span",{style:{fontSize:"0.72rem",color:"var(--kb-muted)"},children:["\u2387 ",e]}):null]}),(0,p.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[(0,p.jsxs)("span",{className:"task-count",children:[R," tasks"]}),(0,p.jsx)("button",{className:"secondary",title:"Refresh board",style:{padding:"2px 7px",fontSize:"0.85em",lineHeight:1},onClick:()=>{t("loading"),Ea.postMessage({type:"refresh"})},children:"\u21BB"})]})]}),(0,p.jsx)("div",{className:"board-columns",children:i.columns.map(U=>{let Mt=jm(U,i);return(0,p.jsxs)("section",{className:"board-column",onDragOver:K=>K.preventDefault(),onDrop:K=>Qv(K,U.id),children:[(0,p.jsxs)("div",{className:"column-head",children:[(0,p.jsx)("h4",{className:"column-title",children:U.title}),(0,p.jsx)("span",{className:"column-count",children:Mt.length})]}),Mt.map(K=>(0,p.jsx)(Zm,{task:K,onEdit:Il},K.id)),f===U.id?(0,p.jsxs)("div",{className:"task-create",children:[(0,p.jsx)("input",{value:h,placeholder:"Task title",onChange:K=>S(K.target.value),onKeyDown:K=>{K.key==="Enter"&&ge()}}),(0,p.jsx)("button",{onClick:()=>ge(),children:"Add"})]}):U.id===Rv?(0,p.jsx)("button",{className:"secondary",onClick:()=>{v(U.id),S("")},children:"+ Task"}):null]},U.id)})}),s?(0,p.jsxs)("section",{className:"editor",children:[(0,p.jsx)("h4",{children:"Edit Task"}),(0,p.jsx)("input",{value:Y,onChange:U=>o(U.target.value),placeholder:"Title"}),(0,p.jsxs)("select",{value:z,onChange:U=>E(U.target.value),children:[(0,p.jsx)("option",{value:"",disabled:!0,children:"Select column"}),i.columns.map(U=>(0,p.jsx)("option",{value:U.id,children:U.title},U.id))]}),(0,p.jsx)("input",{value:g,onChange:U=>r(U.target.value),placeholder:"Assignee"}),(0,p.jsx)("input",{value:B,onChange:U=>T(U.target.value),placeholder:"Priority"}),(0,p.jsx)("input",{className:"full",value:O,onChange:U=>D(U.target.value),placeholder:"Tags (comma separated)"}),(0,p.jsx)("textarea",{className:"full",rows:4,value:d,onChange:U=>y(U.target.value),placeholder:"Description"}),(0,p.jsxs)("div",{className:"editor-actions",children:[(0,p.jsx)("button",{onClick:Gv,children:"Save"}),(0,p.jsx)("button",{className:"secondary",onClick:()=>m(null),children:"Cancel"}),(0,p.jsx)("button",{className:"secondary",onClick:Xv,children:"Delete"})]})]}):null]})}var Yv=document.getElementById("root");Yv&&(0,xv.createRoot)(Yv).render((0,p.jsx)(Vm,{}));})(); + `}),(0,S.jsxs)("div",{className:"board-header",children:[(0,S.jsxs)("div",{children:[(0,S.jsx)("h3",{className:"board-title",children:"Project Board"}),e?(0,S.jsxs)("div",{className:"board-repo",children:["\u2387 ",e]}):null]}),(0,S.jsxs)("div",{className:"header-right",children:[(0,S.jsx)("span",{className:"task-count",children:Iv}),(0,S.jsx)("button",{className:"icon-btn",title:"Refresh board",onClick:()=>{t("loading"),Ea.postMessage({type:"refresh"})},children:"\u21BB"})]})]}),(0,S.jsx)("div",{className:"board-columns",children:i.columns.map((O,aa)=>{let ol=ir(O,i),wf=O.id===ar,Wf=wf&&B>0?new Date(Date.now()-B*864e5):null,Se=Wf?ol.filter(I=>{let $f=ur(I);return $f===null||$f>=Wf}):ol,li=ol.length-Se.length,a1=Wv[aa%Wv.length];return(0,S.jsxs)("section",{className:`board-column${m===O.id?" drag-over":""}`,style:{"--col-accent":a1},onDragOver:I=>{I.preventDefault(),y(O.id)},onDragLeave:I=>{I.currentTarget.contains(I.relatedTarget)||y(null)},onDrop:I=>t1(I,O.id),children:[(0,S.jsxs)("div",{className:"column-head",children:[(0,S.jsx)("h4",{className:"column-title",children:O.title}),(0,S.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[wf?(0,S.jsx)("button",{className:"done-window-btn",title:"Cycle time window",onClick:()=>{let I=gu[(gu.indexOf(B)+1)%gu.length];d(Math.max(I,I===0?0:7))},children:B===0?"all":`${B}d`}):null,(0,S.jsx)("span",{className:"column-count",children:Se.length})]})]}),(0,S.jsxs)("div",{className:"column-cards",children:[Se.length===0&&m!==O.id?(0,S.jsx)("div",{className:"empty-column",children:"Drop tasks here"}):null,Se.map(I=>(0,S.jsx)(fr,{task:I,onEdit:Pv,isDragging:p===I.id,onDragStart:E,onDragEnd:()=>E(null)},I.id))]}),li>0?(0,S.jsxs)("button",{className:"done-hidden-btn",onClick:()=>{let I=gu.indexOf(B);d(gu[(I+1)%gu.length])},children:[li," older task",li!==1?"s":""," hidden \xB7 show more"]}):null,f===O.id?(0,S.jsxs)("div",{className:"task-create",children:[(0,S.jsx)("input",{ref:Kf,value:r,placeholder:"Task title\u2026",onChange:I=>b(I.target.value),onKeyDown:I=>{I.key==="Enter"&&Jf(),I.key==="Escape"&&s(null)}}),(0,S.jsxs)("div",{className:"task-create-actions",children:[(0,S.jsx)("button",{onClick:Jf,children:"Add"}),(0,S.jsx)("button",{className:"secondary",onClick:()=>s(null),children:"Cancel"})]})]}):(0,S.jsx)("button",{className:"add-task-btn",onClick:()=>{s(O.id),b("")},children:"+ Add task"})]},O.id)})}),o?(0,S.jsx)("div",{className:"modal-backdrop",onClick:O=>{O.target===O.currentTarget&&v(null)},children:(0,S.jsxs)("div",{className:"modal",children:[(0,S.jsxs)("div",{className:"modal-header",children:[(0,S.jsx)("h4",{className:"modal-title",children:"Edit Task"}),(0,S.jsx)("button",{className:"icon-btn",onClick:()=>v(null),children:"\u2715"})]}),(0,S.jsxs)("div",{className:"modal-grid",children:[(0,S.jsxs)("div",{className:"field full",children:[(0,S.jsx)("label",{children:"Title"}),(0,S.jsx)("input",{value:H,onChange:O=>z(O.target.value),placeholder:"Task title",autoFocus:!0,onKeyDown:O=>{O.key==="Enter"&&kf()}})]}),(0,S.jsxs)("div",{className:"field",children:[(0,S.jsx)("label",{children:"Column"}),(0,S.jsxs)("select",{value:g,onChange:O=>T(O.target.value),children:[(0,S.jsx)("option",{value:"",disabled:!0,children:"Select column"}),i.columns.map(O=>(0,S.jsx)("option",{value:O.id,children:O.title},O.id))]})]}),(0,S.jsxs)("div",{className:"field",children:[(0,S.jsx)("label",{children:"Priority"}),(0,S.jsxs)("select",{value:he,onChange:O=>Zf(O.target.value),children:[(0,S.jsx)("option",{value:"critical",children:"Critical"}),(0,S.jsx)("option",{value:"high",children:"High"}),(0,S.jsx)("option",{value:"normal",children:"Normal"}),(0,S.jsx)("option",{value:"low",children:"Low"})]})]}),(0,S.jsxs)("div",{className:"field",children:[(0,S.jsx)("label",{children:"Assignee"}),(0,S.jsx)("input",{value:R,onChange:O=>$l(O.target.value),placeholder:"Name"})]}),(0,S.jsxs)("div",{className:"field",children:[(0,S.jsx)("label",{children:"Tags"}),(0,S.jsx)("input",{value:Vf,onChange:O=>Lf(O.target.value),placeholder:"tag1, tag2"})]}),(0,S.jsxs)("div",{className:"field full",children:[(0,S.jsx)("label",{children:"Description"}),(0,S.jsx)("textarea",{rows:4,value:_,onChange:O=>N(O.target.value),placeholder:"Description\u2026"})]})]}),(0,S.jsxs)("div",{className:"modal-actions",children:[(0,S.jsx)("button",{onClick:kf,children:"Save"}),(0,S.jsx)("button",{className:"secondary",onClick:()=>v(null),children:"Cancel"}),(0,S.jsx)("div",{className:"spacer"}),(0,S.jsx)("button",{className:"danger",onClick:l1,children:"Delete"})]})]})}):null]})}var $v=document.getElementById("root");$v&&(0,Fv.createRoot)($v).render((0,S.jsx)(or,{}));})(); /*! Bundled license information: react/cjs/react.production.js: diff --git a/ai-dev-vscode/dist/webviews/kanban/main.js.map b/ai-dev-vscode/dist/webviews/kanban/main.js.map index b498715..5b6e064 100644 --- a/ai-dev-vscode/dist/webviews/kanban/main.js.map +++ b/ai-dev-vscode/dist/webviews/kanban/main.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../node_modules/react/cjs/react.production.js", "../../../node_modules/react/index.js", "../../../node_modules/scheduler/cjs/scheduler.production.js", "../../../node_modules/scheduler/index.js", "../../../node_modules/react-dom/cjs/react-dom.production.js", "../../../node_modules/react-dom/index.js", "../../../node_modules/react-dom/cjs/react-dom-client.production.js", "../../../node_modules/react-dom/client.js", "../../../node_modules/react/cjs/react-jsx-runtime.production.js", "../../../node_modules/react/jsx-runtime.js", "../../../src/webviews/kanban/main.tsx", "../../../src/webviews/shared/vscodeApi.ts"], - "sourcesContent": ["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n", "/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n", "/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n", "/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" ()\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"\") &&\n (frame = frame.replace(\"\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[: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]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle 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(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \" -`}async loadLocalBoard(){if(!this.api||!this.projectSlug)throw new Error("Board API is not connected.");let e=await this.api.getBoard(this.projectSlug);return this.currentBoard=e,e}async handleAction(e){if(this.gitHubRepo){await this.handleGitHubAction(e);return}await this.handleLocalAction(e)}async handleGitHubAction(e){let t=await this.getGitHubClient(!1);if(!t)throw new Error("GitHub is not authenticated.");if(e.type==="createTask"){let n=await t.createIssue(e.columnId??r.backlogColumnId,e.title.trim(),e.description);this.currentBoard=void 0;return}if(e.type==="updateTask"){await t.updateIssue(e.taskId,e.columnId,e.title.trim(),e.description),this.currentBoard=void 0;return}if(e.type==="moveTask"){let o=(this.currentBoard??await(async()=>{let s=await t.getBoard();return this.currentBoard=s,s})()).tasks[e.taskId];if(!o)throw new Error(`Task '${e.taskId}' not found.`);await t.updateIssue(e.taskId,e.toColumnId,o.title,o.description),this.currentBoard=void 0;return}e.type==="deleteTask"&&(await t.closeIssue(e.taskId),this.currentBoard=void 0)}async handleLocalAction(e){if(!this.api||!this.projectSlug)throw new Error("Board API is not connected.");if(e.type==="createTask"){let t=this.currentBoard??await this.loadLocalBoard(),n=this.resolveBacklogColumnId(t)??e.columnId;await this.api.createBoardTask(this.projectSlug,{columnId:n,title:e.title.trim(),description:this.normalizeOptional(e.description),assignee:this.normalizeOptional(e.assignee),priority:this.normalizePriority(e.priority),tags:this.normalizeTags(e.tags)});return}if(e.type==="updateTask"){await this.api.updateBoardTask(this.projectSlug,e.taskId,{columnId:e.columnId,title:e.title.trim(),description:this.normalizeOptional(e.description),assignee:this.normalizeOptional(e.assignee),priority:this.normalizePriority(e.priority),tags:this.normalizeTags(e.tags)});return}if(e.type==="moveTask"){let n=(this.currentBoard??await this.loadLocalBoard()).tasks[e.taskId];if(!n)throw new Error(`Task '${e.taskId}' was not found.`);await this.api.updateBoardTask(this.projectSlug,e.taskId,{columnId:e.toColumnId,title:n.title,description:n.description,assignee:n.assignee,priority:this.normalizePriority(n.priority),tags:this.normalizeTags(n.tags)});return}e.type==="deleteTask"&&await this.api.deleteBoardTask(this.projectSlug,e.taskId)}normalizePriority(e){let t=e?.trim().toLowerCase();return t||"normal"}normalizeOptional(e){let t=e?.trim();return t||void 0}normalizeTags(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let o of e){let s=o.trim(),i=s.toLowerCase();s&&!t.has(i)&&(t.add(i),n.push(s))}return n}resolveBacklogColumnId(e){return e.columns.find(t=>t.id===r.backlogColumnId)?.id}};var Te=L(require("vscode")),Cr=1e3,lt=class{channel;buffer=[];subscribers=[];clearSubscribers=[];constructor(e){this.channel=Te.window.createOutputChannel(e)}appendLine(e){this.info(e)}info(e){this.emit("info",e)}warn(e){this.emit("warn",e)}error(e){this.emit("error",e)}emit(e,t){let n={timestamp:new Date().toISOString(),level:e,message:t},o=`[${n.timestamp}] [${e.toUpperCase().padEnd(5)}] ${t}`;this.channel.appendLine(o),this.buffer.push(n),this.buffer.length>Cr&&this.buffer.shift();for(let s of this.subscribers)s(n)}subscribe(e){return this.subscribers.push(e),new Te.Disposable(()=>{let t=this.subscribers.indexOf(e);t>=0&&this.subscribers.splice(t,1)})}onCleared(e){return this.clearSubscribers.push(e),new Te.Disposable(()=>{let t=this.clearSubscribers.indexOf(e);t>=0&&this.clearSubscribers.splice(t,1)})}getHistory(){return[...this.buffer]}clearBuffer(){this.buffer.length=0;for(let e of this.clearSubscribers)e()}dispose(){this.channel.dispose()}};var ge,B,to,no,O,h,Pr="Waiting for AI Dev Studio backend...";async function kr(r){h=new lt("AI Dev Studio"),r.subscriptions.push(h),h.appendLine(`Activating \u2014 extensionPath: ${r.extensionPath}`),O=new je,r.subscriptions.push(O);let e=new nt(r.extensionUri),t=new ot(r.extensionUri),n=new rt(r.extensionUri),o=new Ce(r.extensionUri,h),s=new Ce(r.extensionUri,h),i=new ct(r.extensionUri);r.subscriptions.push(P.window.registerWebviewViewProvider("aidev.agents",e),P.window.registerWebviewViewProvider("aidev.messages",t),P.window.registerWebviewViewProvider("aidev.decisions",n),P.window.registerWebviewViewProvider("aidev.logs",o),P.window.registerWebviewViewProvider("aidev.logsDebug",s),o,s);let a=new Le(c=>{let l=P.workspace.createFileSystemWatcher(c);return{onCreated:d=>l.onDidCreate(u=>d(u.fsPath)),onDeleted:d=>l.onDidDelete(u=>d(u.fsPath)),dispose:()=>l.dispose()}},c=>{try{return g.readFileSync(c,"utf8")}catch{return}});r.subscriptions.push(a),a.on("projectDetected",async({config:c,workspaceFolderPath:l})=>{if(h.appendLine(`Project detected: slug=${c.projectSlug} port=${c.apiPort} at ${l}`),ge){h.appendLine("Backend already running \u2014 skipping.");return}await Mr(r,c,l,e,t,n,i)}),a.on("projectRemoved",c=>{h.appendLine(`Project removed: ${c}`),Yn(e,t,n,i)}),r.subscriptions.push(P.commands.registerCommand("aidev.restartBackend",async()=>{h.appendLine("Restart backend command invoked."),await Yn(e,t,n,i),Zt(r,a,e,t,n,i)})),r.subscriptions.push(P.commands.registerCommand("aidev.openBoard",()=>{i.openEditor()})),r.subscriptions.push(P.commands.registerCommand("aidev.openGlobalTemplatesFolder",async()=>{let c=nn(),l=ro(c.templatesGlobalPath,r);g.mkdirSync(l,{recursive:!0}),await P.commands.executeCommand("revealFileInOS",P.Uri.file(l)),h.appendLine(`Opened global templates folder: ${l}`)})),r.subscriptions.push(P.workspace.onDidChangeWorkspaceFolders(c=>{h.appendLine(`Workspace folders changed: +${c.added.length} -${c.removed.length}`),Zt(r,a,e,t,n,i)})),Zt(r,a,e,t,n,i)}function Zt(r,e,t,n,o,s){let i=nn(),a=P.workspace.workspaceFolders??[];if(h.appendLine(`Scanning ${a.length} folder(s): ${a.map(d=>d.uri.fsPath).join(", ")||"(none \u2014 open a folder containing .ai-dev/project.json)"}`),a.length===0){tn("No folder opened.",t,n,o),e.start([]);return}let c=0,l=0;for(let d of a){if(!Tr(r,i,d.uri.fsPath).ok){l++;continue}c++}c===0?(tn("No .ai-dev folder created.",t,n,o),h.warn("No valid .ai-dev/project.json found in opened folder(s). Backend connection requires projectSlug and apiPort."),l>0&&h.warn(`Failed to initialize .ai-dev in ${l} folder(s).`)):tn(Pr,t,n,o),e.start(a.map(d=>d.uri.fsPath))}function Tr(r,e,t){let n=v.join(t,".ai-dev"),o=v.join(n,"project.json"),s=v.basename(t);try{if(!e.bootstrapEnabled)return g.existsSync(o)?{ok:!0,configPath:o}:(h.warn(`Bootstrap disabled and no project config found at ${o}`),{ok:!1});if(g.existsSync(n)||(g.mkdirSync(n,{recursive:!0}),h.appendLine(`Created ${n}`)),!g.existsSync(o)){let i=oo(s),a={projectSlug:i,apiPort:e.bootstrapApiPort,name:s,description:"",createdAt:new Date().toISOString()};g.writeFileSync(o,JSON.stringify(a,null,2),"utf8"),h.appendLine(`Created default project config at ${o} (slug=${i}, port=${e.bootstrapApiPort})`)}return Ir(o,s,e.bootstrapApiPort)?(Dr(r,e,n),{ok:!0,configPath:o}):(h.warn(`Invalid project config at ${o} \u2014 requires projectSlug and apiPort.`),{ok:!1})}catch(i){return h.warn(`Failed to initialize .ai-dev for ${t}: ${i}`),{ok:!1}}}function oo(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"ai-dev-project"}function Ir(r,e,t){let n=oo(e),o;try{let l=g.readFileSync(r,"utf8");o=JSON.parse(l)}catch{o={}}let s=Lr(o,n,t);if(!s)return!1;let i=typeof o.projectSlug=="string"?o.projectSlug:void 0,a=typeof o.apiPort=="number"?o.apiPort:typeof o.apiPort=="string"?Number(o.apiPort):void 0;if(i!==s.projectSlug||a!==s.apiPort){let l={...o,projectSlug:s.projectSlug,apiPort:s.apiPort};g.writeFileSync(r,JSON.stringify(l,null,2),"utf8"),h.appendLine(`Repaired project config at ${r} (slug=${s.projectSlug}, port=${s.apiPort})`)}return!0}function Lr(r,e,t){let n=Er(r.projectSlug,r.slug,r.projectId)??e,o=jr(r.apiPort,r.port)??t;if(!(!n||!o))return{projectSlug:n,apiPort:o}}function Er(...r){for(let e of r){if(typeof e!="string")continue;let t=e.trim();if(t)return t}}function jr(...r){for(let e of r){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return Math.trunc(e);if(typeof e=="string"){let t=Number(e.trim());if(Number.isFinite(t)&&t>0)return Math.trunc(t)}}}function Dr(r,e,t){let n=ro(e.templatesGlobalPath,r),o=Hr(n,r.extensionPath,e.templatesPrecedence),s=Rr(o);if(s.length===0){h.warn("No agent templates discovered. Skipping default agent bootstrap.");return}let i=new Map,a=v.join(t,"agents");g.mkdirSync(a,{recursive:!0});let c=0;for(let l of s){let d=v.join(a,l.slug);if(g.existsSync(d))continue;let u;try{u=JSON.parse(g.readFileSync(l.jsonPath,"utf8"))}catch(oe){h.warn(`Failed to parse template ${l.jsonPath}: ${oe}`);continue}let A=typeof u.slug=="string"&&u.slug.length>0?u.slug:l.slug,W=typeof u.name=="string"&&u.name.length>0?u.name:l.slug,ne=i.get(l.root)??$r(l.root);i.set(l.root,ne);let K=g.existsSync(l.mdPath)?Qn(Xn(l.mdPath,ne,l.slug),W,A):`# ${W} +`}async loadLocalBoard(){if(!this.api||!this.projectSlug)throw new Error("Board API is not connected.");let e=await this.api.getBoard(this.projectSlug);return this.currentBoard=e,e}async loadAgents(){if(!this.api||!this.projectSlug)return[];try{return await this.api.listAgents(this.projectSlug)}catch{return[]}}async handleAction(e){if(this.gitHubRepo){await this.handleGitHubAction(e);return}await this.handleLocalAction(e)}async handleGitHubAction(e){let t=await this.getGitHubClient(!1);if(!t)throw new Error("GitHub is not authenticated.");if(e.type==="createTask"){let n=await t.createIssue(e.columnId??r.backlogColumnId,e.title.trim(),e.description);this.currentBoard=void 0;return}if(e.type==="updateTask"){await t.updateIssue(e.taskId,e.columnId,e.title.trim(),e.description),this.currentBoard=void 0;return}if(e.type==="moveTask"){let o=(this.currentBoard??await(async()=>{let s=await t.getBoard();return this.currentBoard=s,s})()).tasks[e.taskId];if(!o)throw new Error(`Task '${e.taskId}' not found.`);await t.updateIssue(e.taskId,e.toColumnId,o.title,o.description),this.currentBoard=void 0;return}e.type==="deleteTask"&&(await t.closeIssue(e.taskId),this.currentBoard=void 0)}async handleLocalAction(e){if(!this.api||!this.projectSlug)throw new Error("Board API is not connected.");if(e.type==="createTask"){let t=this.currentBoard??await this.loadLocalBoard(),n=this.resolveBacklogColumnId(t)??e.columnId;await this.api.createBoardTask(this.projectSlug,{columnId:n,title:e.title.trim(),description:this.normalizeOptional(e.description),assignee:this.normalizeOptional(e.assignee),priority:this.normalizePriority(e.priority),tags:this.normalizeTags(e.tags)});return}if(e.type==="updateTask"){await this.api.updateBoardTask(this.projectSlug,e.taskId,{columnId:e.columnId,title:e.title.trim(),description:this.normalizeOptional(e.description),assignee:this.normalizeOptional(e.assignee),priority:this.normalizePriority(e.priority),tags:this.normalizeTags(e.tags)});return}if(e.type==="moveTask"){let n=(this.currentBoard??await this.loadLocalBoard()).tasks[e.taskId];if(!n)throw new Error(`Task '${e.taskId}' was not found.`);await this.api.updateBoardTask(this.projectSlug,e.taskId,{columnId:e.toColumnId,title:n.title,description:n.description,assignee:n.assignee,priority:this.normalizePriority(n.priority),tags:this.normalizeTags(n.tags)});return}if(e.type==="deleteTask"){await this.api.deleteBoardTask(this.projectSlug,e.taskId);return}if(e.type==="addColumn"){await this.api.addBoardColumn(this.projectSlug,e.id,e.title);return}if(e.type==="renameColumn"){await this.api.renameBoardColumn(this.projectSlug,e.columnId,e.title);return}e.type==="deleteColumn"&&await this.api.removeBoardColumn(this.projectSlug,e.columnId)}normalizePriority(e){let t=e?.trim().toLowerCase();return t||"normal"}normalizeOptional(e){let t=e?.trim();return t||void 0}normalizeTags(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let o of e){let s=o.trim(),i=s.toLowerCase();s&&!t.has(i)&&(t.add(i),n.push(s))}return n}resolveBacklogColumnId(e){return e.columns.find(t=>t.id===r.backlogColumnId)?.id}};var Te=L(require("vscode")),Cr=1e3,lt=class{channel;buffer=[];subscribers=[];clearSubscribers=[];constructor(e){this.channel=Te.window.createOutputChannel(e)}appendLine(e){this.info(e)}info(e){this.emit("info",e)}warn(e){this.emit("warn",e)}error(e){this.emit("error",e)}emit(e,t){let n={timestamp:new Date().toISOString(),level:e,message:t},o=`[${n.timestamp}] [${e.toUpperCase().padEnd(5)}] ${t}`;this.channel.appendLine(o),this.buffer.push(n),this.buffer.length>Cr&&this.buffer.shift();for(let s of this.subscribers)s(n)}subscribe(e){return this.subscribers.push(e),new Te.Disposable(()=>{let t=this.subscribers.indexOf(e);t>=0&&this.subscribers.splice(t,1)})}onCleared(e){return this.clearSubscribers.push(e),new Te.Disposable(()=>{let t=this.clearSubscribers.indexOf(e);t>=0&&this.clearSubscribers.splice(t,1)})}getHistory(){return[...this.buffer]}clearBuffer(){this.buffer.length=0;for(let e of this.clearSubscribers)e()}dispose(){this.channel.dispose()}};var ge,B,to,no,O,h,Pr="Waiting for AI Dev Studio backend...";async function kr(r){h=new lt("AI Dev Studio"),r.subscriptions.push(h),h.appendLine(`Activating \u2014 extensionPath: ${r.extensionPath}`),O=new je,r.subscriptions.push(O);let e=new nt(r.extensionUri),t=new ot(r.extensionUri),n=new rt(r.extensionUri),o=new Ce(r.extensionUri,h),s=new Ce(r.extensionUri,h),i=new ct(r.extensionUri);r.subscriptions.push(P.window.registerWebviewViewProvider("aidev.agents",e),P.window.registerWebviewViewProvider("aidev.messages",t),P.window.registerWebviewViewProvider("aidev.decisions",n),P.window.registerWebviewViewProvider("aidev.logs",o),P.window.registerWebviewViewProvider("aidev.logsDebug",s),o,s);let a=new Le(c=>{let l=P.workspace.createFileSystemWatcher(c);return{onCreated:d=>l.onDidCreate(u=>d(u.fsPath)),onDeleted:d=>l.onDidDelete(u=>d(u.fsPath)),dispose:()=>l.dispose()}},c=>{try{return g.readFileSync(c,"utf8")}catch{return}});r.subscriptions.push(a),a.on("projectDetected",async({config:c,workspaceFolderPath:l})=>{if(h.appendLine(`Project detected: slug=${c.projectSlug} port=${c.apiPort} at ${l}`),ge){h.appendLine("Backend already running \u2014 skipping.");return}await Mr(r,c,l,e,t,n,i)}),a.on("projectRemoved",c=>{h.appendLine(`Project removed: ${c}`),Yn(e,t,n,i)}),r.subscriptions.push(P.commands.registerCommand("aidev.restartBackend",async()=>{h.appendLine("Restart backend command invoked."),await Yn(e,t,n,i),Zt(r,a,e,t,n,i)})),r.subscriptions.push(P.commands.registerCommand("aidev.openBoard",()=>{i.openEditor()})),r.subscriptions.push(P.commands.registerCommand("aidev.openGlobalTemplatesFolder",async()=>{let c=nn(),l=ro(c.templatesGlobalPath,r);g.mkdirSync(l,{recursive:!0}),await P.commands.executeCommand("revealFileInOS",P.Uri.file(l)),h.appendLine(`Opened global templates folder: ${l}`)})),r.subscriptions.push(P.workspace.onDidChangeWorkspaceFolders(c=>{h.appendLine(`Workspace folders changed: +${c.added.length} -${c.removed.length}`),Zt(r,a,e,t,n,i)})),Zt(r,a,e,t,n,i)}function Zt(r,e,t,n,o,s){let i=nn(),a=P.workspace.workspaceFolders??[];if(h.appendLine(`Scanning ${a.length} folder(s): ${a.map(d=>d.uri.fsPath).join(", ")||"(none \u2014 open a folder containing .ai-dev/project.json)"}`),a.length===0){tn("No folder opened.",t,n,o),e.start([]);return}let c=0,l=0;for(let d of a){if(!Tr(r,i,d.uri.fsPath).ok){l++;continue}c++}c===0?(tn("No .ai-dev folder created.",t,n,o),h.warn("No valid .ai-dev/project.json found in opened folder(s). Backend connection requires projectSlug and apiPort."),l>0&&h.warn(`Failed to initialize .ai-dev in ${l} folder(s).`)):tn(Pr,t,n,o),e.start(a.map(d=>d.uri.fsPath))}function Tr(r,e,t){let n=v.join(t,".ai-dev"),o=v.join(n,"project.json"),s=v.basename(t);try{if(!e.bootstrapEnabled)return g.existsSync(o)?{ok:!0,configPath:o}:(h.warn(`Bootstrap disabled and no project config found at ${o}`),{ok:!1});if(g.existsSync(n)||(g.mkdirSync(n,{recursive:!0}),h.appendLine(`Created ${n}`)),!g.existsSync(o)){let i=oo(s),a={projectSlug:i,apiPort:e.bootstrapApiPort,name:s,description:"",createdAt:new Date().toISOString()};g.writeFileSync(o,JSON.stringify(a,null,2),"utf8"),h.appendLine(`Created default project config at ${o} (slug=${i}, port=${e.bootstrapApiPort})`)}return Ir(o,s,e.bootstrapApiPort)?(Dr(r,e,n),{ok:!0,configPath:o}):(h.warn(`Invalid project config at ${o} \u2014 requires projectSlug and apiPort.`),{ok:!1})}catch(i){return h.warn(`Failed to initialize .ai-dev for ${t}: ${i}`),{ok:!1}}}function oo(r){return r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"ai-dev-project"}function Ir(r,e,t){let n=oo(e),o;try{let l=g.readFileSync(r,"utf8");o=JSON.parse(l)}catch{o={}}let s=Lr(o,n,t);if(!s)return!1;let i=typeof o.projectSlug=="string"?o.projectSlug:void 0,a=typeof o.apiPort=="number"?o.apiPort:typeof o.apiPort=="string"?Number(o.apiPort):void 0;if(i!==s.projectSlug||a!==s.apiPort){let l={...o,projectSlug:s.projectSlug,apiPort:s.apiPort};g.writeFileSync(r,JSON.stringify(l,null,2),"utf8"),h.appendLine(`Repaired project config at ${r} (slug=${s.projectSlug}, port=${s.apiPort})`)}return!0}function Lr(r,e,t){let n=Er(r.projectSlug,r.slug,r.projectId)??e,o=jr(r.apiPort,r.port)??t;if(!(!n||!o))return{projectSlug:n,apiPort:o}}function Er(...r){for(let e of r){if(typeof e!="string")continue;let t=e.trim();if(t)return t}}function jr(...r){for(let e of r){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return Math.trunc(e);if(typeof e=="string"){let t=Number(e.trim());if(Number.isFinite(t)&&t>0)return Math.trunc(t)}}}function Dr(r,e,t){let n=ro(e.templatesGlobalPath,r),o=Ar(n,r.extensionPath,e.templatesPrecedence),s=Rr(o);if(s.length===0){h.warn("No agent templates discovered. Skipping default agent bootstrap.");return}let i=new Map,a=v.join(t,"agents");g.mkdirSync(a,{recursive:!0});let c=0;for(let l of s){let d=v.join(a,l.slug);if(g.existsSync(d))continue;let u;try{u=JSON.parse(g.readFileSync(l.jsonPath,"utf8"))}catch(re){h.warn(`Failed to parse template ${l.jsonPath}: ${re}`);continue}let $=typeof u.slug=="string"&&u.slug.length>0?u.slug:l.slug,W=typeof u.name=="string"&&u.name.length>0?u.name:l.slug,oe=i.get(l.root)??Hr(l.root);i.set(l.root,oe);let K=g.existsSync(l.mdPath)?Qn(Xn(l.mdPath,oe,l.slug),W,$):`# ${W} You are ${W}. -`,X=l.compactMdPath&&g.existsSync(l.compactMdPath)?Qn(Xn(l.compactMdPath,ne,l.slug),W,A):"";g.mkdirSync(d,{recursive:!0}),g.mkdirSync(v.join(d,"inbox"),{recursive:!0}),g.mkdirSync(v.join(d,"outbox"),{recursive:!0}),g.mkdirSync(v.join(d,"journal"),{recursive:!0});let k={slug:A,name:W,role:u.role??"",model:u.model??"claude-sonnet-4-6",executor:u.executor??"claude",status:"idle",description:u.description??""};Array.isArray(u.skills)&&u.skills.length>0&&(k.skills=u.skills);let H=typeof u.thinking=="string"?u.thinking:typeof u.thinkingLevel=="string"?u.thinkingLevel:"";H&&H!=="off"&&(k.thinking=H),g.writeFileSync(v.join(d,"agent.json"),JSON.stringify(k,null,2),"utf8"),g.writeFileSync(v.join(d,"CLAUDE.md"),K,"utf8"),X&&g.writeFileSync(v.join(d,"CLAUDE.compact.md"),X,"utf8"),c++}h.appendLine(`Created ${c} default agent(s) from templates.`)}function Rr(r){let e=new Map;for(let t of r){let n;try{n=g.readdirSync(t,{withFileTypes:!0})}catch{continue}for(let o of n){if(!o.isFile()||!o.name.endsWith(".json"))continue;let s=o.name.replace(/\.json$/i,"");if(e.has(s))continue;let i=v.join(t,`${s}.json`),a=v.join(t,`${s}.md`);if(!g.existsSync(a))continue;let c=v.join(t,`${s}.compact.md`);e.set(s,{slug:s,root:t,jsonPath:i,mdPath:a,compactMdPath:g.existsSync(c)?c:void 0})}}return[...e.values()].sort((t,n)=>t.slug.localeCompare(n.slug))}function Hr(r,e,t){let n=v.join(e,"assets","agent-templates"),o=v.resolve(e,"..","workspaces","agent-templates"),s=g.existsSync(n)?n:g.existsSync(o)?o:void 0,i=[];return t==="global-first"?(i.push(r),s&&i.push(s)):(s&&i.push(s),i.push(r)),i.filter((a,c,l)=>l.indexOf(a)===c)}function ro(r,e){if(r&&r.trim().length>0){if(v.isAbsolute(r))return r;let t=P.workspace.workspaceFolders?.[0]?.uri.fsPath;return t?v.resolve(t,r):v.resolve(Zn.homedir(),r)}return v.join(e.globalStorageUri.fsPath,"agent-templates")}function nn(){let r=P.workspace.getConfiguration("aidev"),e=en(r.get("bootstrap.apiPort",5191),1,65535,5191),t=en(r.get("backend.health.maxAttempts",120),1,3600,120),n=en(r.get("backend.health.retryDelayMs",1e3),100,6e4,1e3),s=r.get("templates.precedence","global-first")==="packaged-first"?"packaged-first":"global-first";return{bootstrapEnabled:r.get("bootstrap.enabled",!0),bootstrapApiPort:e,backendMaxAttempts:t,backendRetryDelayMs:n,templatesGlobalPath:r.get("templates.globalPath"),templatesPrecedence:s}}function en(r,e,t,n){return Number.isFinite(r)?Math.min(t,Math.max(e,Math.round(r))):n}function $r(r){let e={},t=v.join(r,"shared");if(!g.existsSync(t))return e;let n=g.readdirSync(t,{withFileTypes:!0});for(let o of n){if(!o.isFile()||!o.name.endsWith(".md"))continue;let s=`shared/${o.name.replace(/\.md$/i,"")}`;e[s]=g.readFileSync(v.join(t,o.name),"utf8")}return e}function Xn(r,e,t){return g.readFileSync(r,"utf8").replace(/\{\{>\s*([^\s}]+)\s*\}\}/g,(o,s)=>{let i=e[s];return i===void 0?(h.warn(`Template '${t}' references unknown partial '${s}'.`),""):i})}function Qn(r,e,t){return r.replace(/\{\{\s*name\s*\}\}/g,e).replace(/\{\{\s*slug\s*\}\}/g,t)}function tn(r,e,t,n){e.setPlaceholderMessage(r),t.setPlaceholderMessage(r),n.setPlaceholderMessage(r)}function Ar(r){try{let e=g.readFileSync(v.join(r,".git","config"),"utf8"),t=/\[remote\s+"([^"]+)"\][\s\S]*?url\s*=\s*([^\r\n]+)/g,n=new Map,o;for(;(o=t.exec(e))!==null;){let s=o[1].trim(),i=o[2].trim(),a=xr(i);a&&n.set(s,a)}return n.get("upstream")??n.get("origin")??n.values().next().value}catch{}}function xr(r){let e=/github\.com[/:]([^/\s]+)\/([^/\s.]+?)(?:\.git)?$/.exec(r);if(e)return{owner:e[1],repo:e[2]}}async function Mr(r,e,t,n,o,s,i){let a=nn(),c=process.platform==="win32"?"ai-dev-api.exe":"ai-dev-api",l=v.join(r.extensionPath,"bin",c),d=g.existsSync(l),u=v.resolve(r.extensionPath,".."),A=v.join(u,"ai-dev.api","ai-dev.api.csproj"),W=!d&&g.existsSync(A);h.appendLine(`Binary: ${l} (exists: ${d})`),W?h.appendLine(`Using dev backend fallback: dotnet run --project ${A} --no-launch-profile`):d||h.warn("Bundled backend missing and no local ai-dev.api project found. Expecting external backend on configured port."),ge=new Ee({binaryPath:l,port:e.apiPort,maxAttempts:a.backendMaxAttempts,retryDelayMs:a.backendRetryDelayMs,fallbackCommand:W?{binary:"dotnet",args:["run","--project",A,"--no-launch-profile"],cwd:u}:void 0,onOutput:(k,H)=>{let oe=`[backend:${H}] ${k}`;H==="stderr"?h.warn(oe):h.info(oe)}},(k,H,oe)=>(0,eo.spawn)(k,H,{...oe,stdio:"pipe",env:{...process.env,WORKSPACE_ROOT:t,ASPNETCORE_URLS:`http://localhost:${e.apiPort}`}}),async k=>{let H=await fetch(k);return h.appendLine(`Health check ${k} \u2192 ${H.status}`),{ok:H.ok}}),O?.setStarting(),h.appendLine(`Waiting for backend on port ${e.apiPort}\u2026`);try{await ge.start(),h.appendLine("Backend ready.")}catch(k){h.appendLine(`Backend failed: ${k}`),O?.setDisconnected(),P.window.showErrorMessage("AI Dev Studio: backend failed to start. See Output > AI Dev Studio.");return}let ne=`http://localhost:${e.apiPort}`,K=new De(ne);to=K,no=e.projectSlug,B=new tt(`${ne}/hubs/project`),B.onConnectionStateChanged(k=>{h.appendLine(`SignalR: ${k}`),k==="connected"?O?.setRunning():k==="connecting"?O?.setStarting():O?.setDisconnected()});try{await B.start(e.projectSlug),h.appendLine("SignalR connected.")}catch(k){h.appendLine(`SignalR failed (non-fatal, REST still works): ${k}`)}O?.setRunning();let X=Ar(t);X&&h.appendLine(`GitHub repo detected: ${X.owner}/${X.repo}`),n.connect(e.projectSlug,K,B),o.connect(e.projectSlug,K,B),s.connect(e.projectSlug,K,B),i.connect(e.projectSlug,K,B,t,X),h.appendLine("Panels connected.")}async function Yn(r,e,t,n){h?.appendLine("Tearing down."),await B?.stop(),B=void 0,to=void 0,no=void 0,ge?.stop(),ge=void 0,O?.setDisconnected(),r.disconnect(),e.disconnect(),t.disconnect(),n.disconnect()}function Br(){h?.appendLine("Deactivating."),ge?.stop(),B?.stop()}0&&(module.exports={activate,deactivate,log}); +`,X=l.compactMdPath&&g.existsSync(l.compactMdPath)?Qn(Xn(l.compactMdPath,oe,l.slug),W,$):"";g.mkdirSync(d,{recursive:!0}),g.mkdirSync(v.join(d,"inbox"),{recursive:!0}),g.mkdirSync(v.join(d,"outbox"),{recursive:!0}),g.mkdirSync(v.join(d,"journal"),{recursive:!0});let k={slug:$,name:W,role:u.role??"",model:u.model??"claude-sonnet-4-6",executor:u.executor??"claude",status:"idle",description:u.description??""};Array.isArray(u.skills)&&u.skills.length>0&&(k.skills=u.skills);let A=typeof u.thinking=="string"?u.thinking:typeof u.thinkingLevel=="string"?u.thinkingLevel:"";A&&A!=="off"&&(k.thinking=A),g.writeFileSync(v.join(d,"agent.json"),JSON.stringify(k,null,2),"utf8"),g.writeFileSync(v.join(d,"CLAUDE.md"),K,"utf8"),X&&g.writeFileSync(v.join(d,"CLAUDE.compact.md"),X,"utf8"),c++}h.appendLine(`Created ${c} default agent(s) from templates.`)}function Rr(r){let e=new Map;for(let t of r){let n;try{n=g.readdirSync(t,{withFileTypes:!0})}catch{continue}for(let o of n){if(!o.isFile()||!o.name.endsWith(".json"))continue;let s=o.name.replace(/\.json$/i,"");if(e.has(s))continue;let i=v.join(t,`${s}.json`),a=v.join(t,`${s}.md`);if(!g.existsSync(a))continue;let c=v.join(t,`${s}.compact.md`);e.set(s,{slug:s,root:t,jsonPath:i,mdPath:a,compactMdPath:g.existsSync(c)?c:void 0})}}return[...e.values()].sort((t,n)=>t.slug.localeCompare(n.slug))}function Ar(r,e,t){let n=v.join(e,"assets","agent-templates"),o=v.resolve(e,"..","workspaces","agent-templates"),s=g.existsSync(n)?n:g.existsSync(o)?o:void 0,i=[];return t==="global-first"?(i.push(r),s&&i.push(s)):(s&&i.push(s),i.push(r)),i.filter((a,c,l)=>l.indexOf(a)===c)}function ro(r,e){if(r&&r.trim().length>0){if(v.isAbsolute(r))return r;let t=P.workspace.workspaceFolders?.[0]?.uri.fsPath;return t?v.resolve(t,r):v.resolve(Zn.homedir(),r)}return v.join(e.globalStorageUri.fsPath,"agent-templates")}function nn(){let r=P.workspace.getConfiguration("aidev"),e=en(r.get("bootstrap.apiPort",5191),1,65535,5191),t=en(r.get("backend.health.maxAttempts",120),1,3600,120),n=en(r.get("backend.health.retryDelayMs",1e3),100,6e4,1e3),s=r.get("templates.precedence","global-first")==="packaged-first"?"packaged-first":"global-first";return{bootstrapEnabled:r.get("bootstrap.enabled",!0),bootstrapApiPort:e,backendMaxAttempts:t,backendRetryDelayMs:n,templatesGlobalPath:r.get("templates.globalPath"),templatesPrecedence:s}}function en(r,e,t,n){return Number.isFinite(r)?Math.min(t,Math.max(e,Math.round(r))):n}function Hr(r){let e={},t=v.join(r,"shared");if(!g.existsSync(t))return e;let n=g.readdirSync(t,{withFileTypes:!0});for(let o of n){if(!o.isFile()||!o.name.endsWith(".md"))continue;let s=`shared/${o.name.replace(/\.md$/i,"")}`;e[s]=g.readFileSync(v.join(t,o.name),"utf8")}return e}function Xn(r,e,t){return g.readFileSync(r,"utf8").replace(/\{\{>\s*([^\s}]+)\s*\}\}/g,(o,s)=>{let i=e[s];return i===void 0?(h.warn(`Template '${t}' references unknown partial '${s}'.`),""):i})}function Qn(r,e,t){return r.replace(/\{\{\s*name\s*\}\}/g,e).replace(/\{\{\s*slug\s*\}\}/g,t)}function tn(r,e,t,n){e.setPlaceholderMessage(r),t.setPlaceholderMessage(r),n.setPlaceholderMessage(r)}function $r(r){try{let e=g.readFileSync(v.join(r,".git","config"),"utf8"),t=/\[remote\s+"([^"]+)"\][\s\S]*?url\s*=\s*([^\r\n]+)/g,n=new Map,o;for(;(o=t.exec(e))!==null;){let s=o[1].trim(),i=o[2].trim(),a=xr(i);a&&n.set(s,a)}return n.get("upstream")??n.get("origin")??n.values().next().value}catch{}}function xr(r){let e=/github\.com[/:]([^/\s]+)\/([^/\s.]+?)(?:\.git)?$/.exec(r);if(e)return{owner:e[1],repo:e[2]}}async function Mr(r,e,t,n,o,s,i){let a=nn(),c=process.platform==="win32"?"ai-dev-api.exe":"ai-dev-api",l=v.join(r.extensionPath,"bin",c),d=g.existsSync(l),u=v.resolve(r.extensionPath,".."),$=v.join(u,"ai-dev.api","ai-dev.api.csproj"),W=!d&&g.existsSync($);h.appendLine(`Binary: ${l} (exists: ${d})`),W?h.appendLine(`Using dev backend fallback: dotnet run --project ${$} --no-launch-profile`):d||h.warn("Bundled backend missing and no local ai-dev.api project found. Expecting external backend on configured port."),ge=new Ee({binaryPath:l,port:e.apiPort,maxAttempts:a.backendMaxAttempts,retryDelayMs:a.backendRetryDelayMs,fallbackCommand:W?{binary:"dotnet",args:["run","--project",$,"--no-launch-profile"],cwd:u}:void 0,onOutput:(k,A)=>{let re=`[backend:${A}] ${k}`;A==="stderr"?h.warn(re):h.info(re)}},(k,A,re)=>(0,eo.spawn)(k,A,{...re,stdio:"pipe",env:{...process.env,WORKSPACE_ROOT:t,ASPNETCORE_URLS:`http://localhost:${e.apiPort}`}}),async k=>{let A=await fetch(k);return h.appendLine(`Health check ${k} \u2192 ${A.status}`),{ok:A.ok}}),O?.setStarting(),h.appendLine(`Waiting for backend on port ${e.apiPort}\u2026`);try{await ge.start(),h.appendLine("Backend ready.")}catch(k){h.appendLine(`Backend failed: ${k}`),O?.setDisconnected(),P.window.showErrorMessage("AI Dev Studio: backend failed to start. See Output > AI Dev Studio.");return}let oe=`http://localhost:${e.apiPort}`,K=new De(oe);to=K,no=e.projectSlug,B=new tt(`${oe}/hubs/project`),B.onConnectionStateChanged(k=>{h.appendLine(`SignalR: ${k}`),k==="connected"?O?.setRunning():k==="connecting"?O?.setStarting():O?.setDisconnected()});try{await B.start(e.projectSlug),h.appendLine("SignalR connected.")}catch(k){h.appendLine(`SignalR failed (non-fatal, REST still works): ${k}`)}O?.setRunning();let X=$r(t);X&&h.appendLine(`GitHub repo detected: ${X.owner}/${X.repo}`),n.connect(e.projectSlug,K,B),o.connect(e.projectSlug,K,B),s.connect(e.projectSlug,K,B),i.connect(e.projectSlug,K,B,t,X),h.appendLine("Panels connected.")}async function Yn(r,e,t,n){h?.appendLine("Tearing down."),await B?.stop(),B=void 0,to=void 0,no=void 0,ge?.stop(),ge=void 0,O?.setDisconnected(),r.disconnect(),e.disconnect(),t.disconnect(),n.disconnect()}function Br(){h?.appendLine("Deactivating."),ge?.stop(),B?.stop()}0&&(module.exports={activate,deactivate,log}); //# sourceMappingURL=extension.js.map diff --git a/ai-dev-vscode/dist/extension.js.map b/ai-dev-vscode/dist/extension.js.map index e77e829..b3b771c 100644 --- a/ai-dev-vscode/dist/extension.js.map +++ b/ai-dev-vscode/dist/extension.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/@microsoft/signalr/src/Errors.ts", "../node_modules/@microsoft/signalr/src/HttpClient.ts", "../node_modules/@microsoft/signalr/src/ILogger.ts", "../node_modules/@microsoft/signalr/src/Loggers.ts", "../node_modules/@microsoft/signalr/src/pkg-version.ts", "../node_modules/@microsoft/signalr/src/Utils.ts", "../node_modules/@microsoft/signalr/src/FetchHttpClient.ts", "../node_modules/@microsoft/signalr/src/XhrHttpClient.ts", "../node_modules/@microsoft/signalr/src/DefaultHttpClient.ts", "../node_modules/@microsoft/signalr/src/TextMessageFormat.ts", "../node_modules/@microsoft/signalr/src/HandshakeProtocol.ts", "../node_modules/@microsoft/signalr/src/IHubProtocol.ts", "../node_modules/@microsoft/signalr/src/Subject.ts", "../node_modules/@microsoft/signalr/src/MessageBuffer.ts", "../node_modules/@microsoft/signalr/src/HubConnection.ts", "../node_modules/@microsoft/signalr/src/DefaultReconnectPolicy.ts", "../node_modules/@microsoft/signalr/src/HeaderNames.ts", "../node_modules/@microsoft/signalr/src/AccessTokenHttpClient.ts", "../node_modules/@microsoft/signalr/src/ITransport.ts", "../node_modules/@microsoft/signalr/src/AbortController.ts", "../node_modules/@microsoft/signalr/src/LongPollingTransport.ts", "../node_modules/@microsoft/signalr/src/ServerSentEventsTransport.ts", "../node_modules/@microsoft/signalr/src/WebSocketTransport.ts", "../node_modules/@microsoft/signalr/src/HttpConnection.ts", "../node_modules/@microsoft/signalr/src/JsonHubProtocol.ts", "../node_modules/@microsoft/signalr/src/HubConnectionBuilder.ts", "../node_modules/@microsoft/signalr/src/index.ts", "../src/extension.ts", "../src/WorkspaceDetector.ts", "../src/BackendProcessManager.ts", "../src/StatusBarManager.ts", "../src/StudioApiClient.ts", "../src/StudioSignalRClient.ts", "../src/panels/BasePanelProvider.ts", "../src/panels/AgentsPanelProvider.ts", "../src/panels/MessagesPanelProvider.ts", "../src/panels/DecisionsPanelProvider.ts", "../src/panels/LogsPanelProvider.ts", "../src/panels/KanbanPanelProvider.ts", "../src/GitHubBoardClient.ts", "../src/Logger.ts"], - "sourcesContent": ["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpTransportType } from \"./ITransport\";\r\n\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The HTTP status code represented by this error. */\r\n public statusCode: number;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage: string, statusCode: number) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message: string) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when multiple errors have occurred. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The collection of errors this error is aggregating. */\r\n public innerErrors: Error[];\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message: string, innerErrors: Error[]) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n\r\n this.innerErrors = innerErrors;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortSignal } from \"./AbortController\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\n\r\n/** Represents an HTTP request. */\r\nexport interface HttpRequest {\r\n /** The HTTP method to use for the request. */\r\n method?: string;\r\n\r\n /** The URL for the request. */\r\n url?: string;\r\n\r\n /** The body content for the request. May be a string or an ArrayBuffer (for binary data). */\r\n content?: string | ArrayBuffer;\r\n\r\n /** An object describing headers to apply to the request. */\r\n headers?: MessageHeaders;\r\n\r\n /** The XMLHttpRequestResponseType to apply to the request. */\r\n responseType?: XMLHttpRequestResponseType;\r\n\r\n /** An AbortSignal that can be monitored for cancellation. */\r\n abortSignal?: AbortSignal;\r\n\r\n /** The time to wait for the request to complete before throwing a TimeoutError. Measured in milliseconds. */\r\n timeout?: number;\r\n\r\n /** This controls whether credentials such as cookies are sent in cross-site requests. */\r\n withCredentials?: boolean;\r\n}\r\n\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n */\r\n constructor(statusCode: number);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code and message.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n */\r\n constructor(statusCode: number, statusText: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and string content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: ArrayBuffer);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string | ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string | ArrayBuffer);\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly statusText?: string,\r\n public readonly content?: string | ArrayBuffer) {\r\n }\r\n}\r\n\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport abstract class HttpClient {\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string): Promise;\r\n\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string, options: HttpRequest): Promise;\r\n public get(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string): Promise;\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string, options: HttpRequest): Promise;\r\n public post(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string): Promise;\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string, options: HttpRequest): Promise;\r\n public delete(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP request to the specified URL, returning a {@link Promise} that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {HttpRequest} request An {@link @microsoft/signalr.HttpRequest} describing the request to send.\r\n * @returns {Promise} A Promise that resolves with an HttpResponse describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public abstract send(request: HttpRequest): Promise;\r\n\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n public getCookieString(url: string): string {\r\n return \"\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport enum LogLevel {\r\n /** Log level for very low severity diagnostic messages. */\r\n Trace = 0,\r\n /** Log level for low severity diagnostic messages. */\r\n Debug = 1,\r\n /** Log level for informational diagnostic messages. */\r\n Information = 2,\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n Warning = 3,\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n Error = 4,\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n Critical = 5,\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n None = 6,\r\n}\r\n\r\n/** An abstraction that provides a sink for diagnostic messages. */\r\nexport interface ILogger {\r\n /** Called by the framework to emit a diagnostic message.\r\n *\r\n * @param {LogLevel} logLevel The severity level of the message.\r\n * @param {string} message The message.\r\n */\r\n log(logLevel: LogLevel, message: string): void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger implements ILogger {\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n public static instance: ILogger = new NullLogger();\r\n\r\n private constructor() {}\r\n\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n public log(_logLevel: LogLevel, _message: string): void {\r\n }\r\n}\r\n", "export const VERSION = '10.0.0';", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { VERSION } from \"./pkg-version\";\r\n\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\n\r\nexport { VERSION };\r\n/** @private */\r\nexport class Arg {\r\n public static isRequired(val: any, name: string): void {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n public static isNotEmpty(val: string, name: string): void {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n\r\n public static isIn(val: any, values: any, name: string): void {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n public static get isBrowser(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n public static get isWebWorker(): boolean {\r\n return !Platform.isNode && typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n\r\n // react-native has a window but no document\r\n static get isReactNative(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n public static get isNode(): boolean {\r\n return typeof process !== \"undefined\" && process.release && process.release.name === \"node\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getDataDetail(data: any, includeContent: boolean): string {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n } else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n\r\n/** @private */\r\nexport function formatArrayBuffer(data: ArrayBuffer): string {\r\n const view = new Uint8Array(data);\r\n\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n\r\n // Trim of trailing space.\r\n return str.substring(0, str.length - 1);\r\n}\r\n\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val: any): val is ArrayBuffer {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n\r\n/** @private */\r\nexport async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string,\r\n content: string | ArrayBuffer, options: IHttpConnectionOptions): Promise {\r\n const headers: {[k: string]: string} = {};\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent!)}.`);\r\n\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers},\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n\r\n/** @private */\r\nexport function createLogger(logger?: ILogger | LogLevel): ILogger {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n\r\n if ((logger as ILogger).log !== undefined) {\r\n return logger as ILogger;\r\n }\r\n\r\n return new ConsoleLogger(logger as LogLevel);\r\n}\r\n\r\n/** @private */\r\nexport class SubjectSubscription implements ISubscription {\r\n private _subject: Subject;\r\n private _observer: IStreamSubscriber;\r\n\r\n constructor(subject: Subject, observer: IStreamSubscriber) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n\r\n public dispose(): void {\r\n const index: number = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class ConsoleLogger implements ILogger {\r\n private readonly _minLevel: LogLevel;\r\n\r\n // Public for testing purposes.\r\n public out: {\r\n error(message: any): void,\r\n warn(message: any): void,\r\n info(message: any): void,\r\n log(message: any): void,\r\n };\r\n\r\n constructor(minimumLogLevel: LogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n\r\n public log(logLevel: LogLevel, message: string): void {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getUserAgentHeader(): [string, string] {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [ userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion()) ];\r\n}\r\n\r\n/** @private */\r\nexport function constructUserAgent(version: string, os: string, runtime: string, runtimeVersion: string | undefined): string {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent: string = \"Microsoft SignalR/\";\r\n\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n } else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n\r\n userAgent += `${runtime}`;\r\n\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n } else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName(): string {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion(): string | undefined {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction getRuntime(): string {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n } else {\r\n return \"Browser\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getErrorString(e: any): string {\r\n if (e.stack) {\r\n return e.stack;\r\n } else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n\r\n/** @private */\r\nexport function getGlobalThis(): unknown {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// @ts-ignore: This will be removed from built files and is here to make the types available during dev work\r\nimport { CookieJar } from \"@types/tough-cookie\";\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis, isArrayBuffer } from \"./Utils\";\r\n\r\nexport class FetchHttpClient extends HttpClient {\r\n private readonly _abortControllerType: { prototype: AbortController, new(): AbortController };\r\n private readonly _fetchType: (input: RequestInfo, init?: RequestInit) => Promise;\r\n private readonly _jar?: CookieJar;\r\n\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n\r\n // Node added a fetch implementation to the global scope starting in v18.\r\n // We need to add a cookie jar in node to be able to share cookies with WebSocket\r\n if (typeof fetch === \"undefined\" || Platform.isNode) {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n\r\n if (typeof fetch === \"undefined\") {\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n } else {\r\n // Use fetch from Node if available\r\n this._fetchType = fetch;\r\n }\r\n\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n } else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n } else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public async send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n\r\n const abortController = new this._abortControllerType();\r\n\r\n let error: any;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId: any = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout!;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n request.headers = request.headers || {};\r\n if (isArrayBuffer(request.content)) {\r\n request.headers[\"Content-Type\"] = \"application/octet-stream\";\r\n } else {\r\n request.headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\r\n }\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await this._fetchType(request.url!, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method!,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n } catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(\r\n LogLevel.Warning,\r\n `Error from HTTP request. ${e}.`,\r\n );\r\n throw e;\r\n } finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\") as string;\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n\r\n return new HttpResponse(\r\n response.status,\r\n response.statusText,\r\n payload,\r\n );\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n let cookies: string = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\n\r\nfunction deserializeContent(response: Response, responseType?: XMLHttpRequestResponseType): Promise {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n\r\n return content;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\nexport class XhrHttpClient extends HttpClient {\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open(request.method!, request.url!, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n if (isArrayBuffer(request.content)) {\r\n xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\r\n } else {\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n }\r\n }\r\n\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n } else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n\r\n xhr.send(request.content);\r\n });\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n private readonly _httpClient: HttpClient;\r\n\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n public constructor(logger: ILogger) {\r\n super();\r\n\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n } else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n } else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return this._httpClient.send(request);\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n public static RecordSeparatorCode = 0x1e;\r\n public static RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n\r\n public static write(output: string): string {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n\r\n public static parse(input: string): string[] {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport interface HandshakeRequestMessage {\r\n readonly protocol: string;\r\n readonly version: number;\r\n}\r\n\r\n/** @private */\r\nexport interface HandshakeResponseMessage {\r\n readonly error: string;\r\n readonly minorVersion: number;\r\n}\r\n\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n public writeHandshakeRequest(handshakeRequest: HandshakeRequestMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n\r\n public parseHandshakeResponse(data: any): [any, HandshakeResponseMessage] {\r\n let messageData: string;\r\n let remainingData: any;\r\n\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n } else {\r\n const textData: string = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage: HandshakeResponseMessage = response;\r\n\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\n\r\n/** Defines the type of a Hub Message. */\r\nexport enum MessageType {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n Invocation = 1,\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n StreamItem = 2,\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n Completion = 3,\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n StreamInvocation = 4,\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n CancelInvocation = 5,\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n Ping = 6,\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n Close = 7,\r\n Ack = 8,\r\n Sequence = 9\r\n}\r\n\r\n/** Defines a dictionary of string keys and string values representing headers attached to a Hub message. */\r\nexport interface MessageHeaders {\r\n /** Gets or sets the header with the specified key. */\r\n [key: string]: string;\r\n}\r\n\r\n/** Union type of all known Hub messages. */\r\nexport type HubMessage =\r\n InvocationMessage |\r\n StreamInvocationMessage |\r\n StreamItemMessage |\r\n CompletionMessage |\r\n CancelInvocationMessage |\r\n PingMessage |\r\n CloseMessage |\r\n AckMessage |\r\n SequenceMessage;\r\n\r\n/** Defines properties common to all Hub messages. */\r\nexport interface HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageType} value indicating the type of this message. */\r\n readonly type: MessageType;\r\n}\r\n\r\n/** Defines properties common to all Hub messages relating to a specific invocation. */\r\nexport interface HubInvocationMessage extends HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageHeaders} dictionary containing headers attached to the message. */\r\n readonly headers?: MessageHeaders;\r\n /** The ID of the invocation relating to this message.\r\n *\r\n * This is expected to be present for {@link @microsoft/signalr.StreamInvocationMessage} and {@link @microsoft/signalr.CompletionMessage}. It may\r\n * be 'undefined' for an {@link @microsoft/signalr.InvocationMessage} if the sender does not expect a response.\r\n */\r\n readonly invocationId?: string;\r\n}\r\n\r\n/** A hub message representing a non-streaming invocation. */\r\nexport interface InvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Invocation;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a streaming invocation. */\r\nexport interface StreamInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamInvocation;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a single item produced as part of a result stream. */\r\nexport interface StreamItemMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamItem;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n\r\n /** The item produced by the server. */\r\n readonly item?: any;\r\n}\r\n\r\n/** A hub message representing the result of an invocation. */\r\nexport interface CompletionMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Completion;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The error produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly error?: string;\r\n /** The result produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly result?: any;\r\n}\r\n\r\n/** A hub message indicating that the sender is still active. */\r\nexport interface PingMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Ping;\r\n}\r\n\r\n/** A hub message indicating that the sender is closing the connection.\r\n *\r\n * If {@link @microsoft/signalr.CloseMessage.error} is defined, the sender is closing the connection due to an error.\r\n */\r\nexport interface CloseMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Close;\r\n /** The error that triggered the close, if any.\r\n *\r\n * If this property is undefined, the connection was closed normally and without error.\r\n */\r\n readonly error?: string;\r\n\r\n /** If true, clients with automatic reconnects enabled should attempt to reconnect after receiving the CloseMessage. Otherwise, they should not. */\r\n readonly allowReconnect?: boolean;\r\n}\r\n\r\n/** A hub message sent to request that a streaming invocation be canceled. */\r\nexport interface CancelInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.CancelInvocation;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n}\r\n\r\nexport interface AckMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Ack;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\nexport interface SequenceMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Sequence;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\n/** A protocol abstraction for communicating with SignalR Hubs. */\r\nexport interface IHubProtocol {\r\n /** The name of the protocol. This is used by SignalR to resolve the protocol between the client and server. */\r\n readonly name: string;\r\n /** The version of the protocol. */\r\n readonly version: number;\r\n /** The {@link @microsoft/signalr.TransferFormat} of the protocol. */\r\n readonly transferFormat: TransferFormat;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the `input` parameter must be a string, otherwise it must be an ArrayBuffer.\r\n *\r\n * @param {string | ArrayBuffer} input A string or ArrayBuffer containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input: string | ArrayBuffer, logger: ILogger): HubMessage[];\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string or ArrayBuffer and returns it.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the result of this method will be a string, otherwise it will be an ArrayBuffer.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string | ArrayBuffer} A string or ArrayBuffer containing the serialized representation of the message.\r\n */\r\n writeMessage(message: HubMessage): string | ArrayBuffer;\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IStreamResult, IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { SubjectSubscription } from \"./Utils\";\r\n\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject implements IStreamResult {\r\n /** @internal */\r\n public observers: IStreamSubscriber[];\r\n\r\n /** @internal */\r\n public cancelCallback?: () => Promise;\r\n\r\n constructor() {\r\n this.observers = [];\r\n }\r\n\r\n public next(item: T): void {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n\r\n public error(err: any): void {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n\r\n public complete(): void {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n\r\n public subscribe(observer: IStreamSubscriber): ISubscription {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AckMessage, HubMessage, IHubProtocol, MessageType, SequenceMessage } from \"./IHubProtocol\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class MessageBuffer {\r\n private readonly _protocol: IHubProtocol;\r\n private readonly _connection: IConnection;\r\n\r\n private readonly _bufferSize: number = 100_000;\r\n\r\n private _messages: BufferedItem[] = [];\r\n private _totalMessageCount: number = 0;\r\n private _waitForSequenceMessage: boolean = false;\r\n\r\n // Message IDs start at 1 and always increment by 1\r\n private _nextReceivingSequenceId = 1;\r\n private _latestReceivedSequenceId = 0;\r\n private _bufferedByteCount: number = 0;\r\n private _reconnectInProgress: boolean = false;\r\n\r\n private _ackTimerHandle?: any;\r\n\r\n constructor(protocol: IHubProtocol, connection: IConnection, bufferSize: number) {\r\n this._protocol = protocol;\r\n this._connection = connection;\r\n this._bufferSize = bufferSize;\r\n }\r\n\r\n public async _send(message: HubMessage): Promise {\r\n const serializedMessage = this._protocol.writeMessage(message);\r\n\r\n let backpressurePromise: Promise = Promise.resolve();\r\n\r\n // Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect\r\n if (this._isInvocationMessage(message)) {\r\n this._totalMessageCount++;\r\n let backpressurePromiseResolver: (value: void) => void = () => {};\r\n let backpressurePromiseRejector: (value?: void) => void = () => {};\r\n\r\n if (isArrayBuffer(serializedMessage)) {\r\n this._bufferedByteCount += serializedMessage.byteLength;\r\n } else {\r\n this._bufferedByteCount += serializedMessage.length;\r\n }\r\n\r\n if (this._bufferedByteCount >= this._bufferSize) {\r\n backpressurePromise = new Promise((resolve, reject) => {\r\n backpressurePromiseResolver = resolve;\r\n backpressurePromiseRejector = reject;\r\n });\r\n }\r\n\r\n this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount,\r\n backpressurePromiseResolver, backpressurePromiseRejector));\r\n }\r\n\r\n try {\r\n // If this is set it means we are reconnecting or resending\r\n // We don't want to send on a disconnected connection\r\n // And we don't want to send if resend is running since that would mean sending\r\n // this message twice\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(serializedMessage);\r\n }\r\n } catch {\r\n this._disconnected();\r\n }\r\n await backpressurePromise;\r\n }\r\n\r\n public _ack(ackMessage: AckMessage): void {\r\n let newestAckedMessage = -1;\r\n\r\n // Find index of newest message being acked\r\n for (let index = 0; index < this._messages.length; index++) {\r\n const element = this._messages[index];\r\n if (element._id <= ackMessage.sequenceId) {\r\n newestAckedMessage = index;\r\n if (isArrayBuffer(element._message)) {\r\n this._bufferedByteCount -= element._message.byteLength;\r\n } else {\r\n this._bufferedByteCount -= element._message.length;\r\n }\r\n // resolve items that have already been sent and acked\r\n element._resolver();\r\n } else if (this._bufferedByteCount < this._bufferSize) {\r\n // resolve items that now fall under the buffer limit but haven't been acked\r\n element._resolver();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (newestAckedMessage !== -1) {\r\n // We're removing everything including the message pointed to, so add 1\r\n this._messages = this._messages.slice(newestAckedMessage + 1);\r\n }\r\n }\r\n\r\n public _shouldProcessMessage(message: HubMessage): boolean {\r\n if (this._waitForSequenceMessage) {\r\n if (message.type !== MessageType.Sequence) {\r\n return false;\r\n } else {\r\n this._waitForSequenceMessage = false;\r\n return true;\r\n }\r\n }\r\n\r\n // No special processing for acks, pings, etc.\r\n if (!this._isInvocationMessage(message)) {\r\n return true;\r\n }\r\n\r\n const currentId = this._nextReceivingSequenceId;\r\n this._nextReceivingSequenceId++;\r\n if (currentId <= this._latestReceivedSequenceId) {\r\n if (currentId === this._latestReceivedSequenceId) {\r\n // Should only hit this if we just reconnected and the server is sending\r\n // Messages it has buffered, which would mean it hasn't seen an Ack for these messages\r\n this._ackTimer();\r\n }\r\n // Ignore, this is a duplicate message\r\n return false;\r\n }\r\n\r\n this._latestReceivedSequenceId = currentId;\r\n\r\n // Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves\r\n // timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)\r\n this._ackTimer();\r\n return true;\r\n }\r\n\r\n public _resetSequence(message: SequenceMessage): void {\r\n if (message.sequenceId > this._nextReceivingSequenceId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._connection.stop(new Error(\"Sequence ID greater than amount of messages we've received.\"));\r\n return;\r\n }\r\n\r\n this._nextReceivingSequenceId = message.sequenceId;\r\n }\r\n\r\n public _disconnected(): void {\r\n this._reconnectInProgress = true;\r\n this._waitForSequenceMessage = true;\r\n }\r\n\r\n public async _resend(): Promise {\r\n const sequenceId = this._messages.length !== 0\r\n ? this._messages[0]._id\r\n : this._totalMessageCount + 1;\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Sequence, sequenceId }));\r\n\r\n // Get a local variable to the _messages, just in case messages are acked while resending\r\n // Which would slice the _messages array (which creates a new copy)\r\n const messages = this._messages;\r\n for (const element of messages) {\r\n await this._connection.send(element._message);\r\n }\r\n\r\n this._reconnectInProgress = false;\r\n }\r\n\r\n public _dispose(error?: Error): void {\r\n error ??= new Error(\"Unable to reconnect to server.\")\r\n\r\n // Unblock backpressure if any\r\n for (const element of this._messages) {\r\n element._rejector(error);\r\n }\r\n }\r\n\r\n private _isInvocationMessage(message: HubMessage): boolean {\r\n // There is no way to check if something implements an interface.\r\n // So we individually check the messages in a switch statement.\r\n // To make sure we don't miss any message types we rely on the compiler\r\n // seeing the function returns a value and it will do the\r\n // exhaustive check for us on the switch statement, since we don't use 'case default'\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n case MessageType.StreamInvocation:\r\n case MessageType.CancelInvocation:\r\n return true;\r\n case MessageType.Close:\r\n case MessageType.Sequence:\r\n case MessageType.Ping:\r\n case MessageType.Ack:\r\n return false;\r\n }\r\n }\r\n\r\n private _ackTimer(): void {\r\n if (this._ackTimerHandle === undefined) {\r\n this._ackTimerHandle = setTimeout(async () => {\r\n try {\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Ack, sequenceId: this._latestReceivedSequenceId }))\r\n }\r\n // Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.\r\n } catch { }\r\n\r\n clearTimeout(this._ackTimerHandle);\r\n this._ackTimerHandle = undefined;\r\n // 1 second delay so we don't spam Ack messages if there are many messages being received at once.\r\n }, 1000);\r\n }\r\n }\r\n}\r\n\r\nclass BufferedItem {\r\n constructor(message: string | ArrayBuffer, id: number, resolver: (value: void) => void, rejector: (value?: any) => void) {\r\n this._message = message;\r\n this._id = id;\r\n this._resolver = resolver;\r\n this._rejector = rejector;\r\n }\r\n\r\n _message: string | ArrayBuffer;\r\n _id: number;\r\n _resolver: (value: void) => void;\r\n _rejector: (value?: any) => void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage } from \"./HandshakeProtocol\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AbortError } from \"./Errors\";\r\nimport { CancelInvocationMessage, CloseMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStreamResult } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nimport { MessageBuffer } from \"./MessageBuffer\";\r\n\r\nconst DEFAULT_TIMEOUT_IN_MS: number = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS: number = 15 * 1000;\r\nconst DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE = 100_000;\r\n\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport enum HubConnectionState {\r\n /** The hub connection is disconnected. */\r\n Disconnected = \"Disconnected\",\r\n /** The hub connection is connecting. */\r\n Connecting = \"Connecting\",\r\n /** The hub connection is connected. */\r\n Connected = \"Connected\",\r\n /** The hub connection is disconnecting. */\r\n Disconnecting = \"Disconnecting\",\r\n /** The hub connection is reconnecting. */\r\n Reconnecting = \"Reconnecting\",\r\n}\r\n\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n private readonly _cachedPingMessage: string | ArrayBuffer;\r\n // Needs to not start with _ for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private readonly connection: IConnection;\r\n private readonly _logger: ILogger;\r\n private readonly _reconnectPolicy?: IRetryPolicy;\r\n private readonly _statefulReconnectBufferSize: number;\r\n private _protocol: IHubProtocol;\r\n private _handshakeProtocol: HandshakeProtocol;\r\n private _callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };\r\n private _methods: { [name: string]: (((...args: any[]) => void) | ((...args: any[]) => any))[] };\r\n private _invocationId: number;\r\n private _messageBuffer?: MessageBuffer;\r\n\r\n private _closedCallbacks: ((error?: Error) => void)[];\r\n private _reconnectingCallbacks: ((error?: Error) => void)[];\r\n private _reconnectedCallbacks: ((connectionId?: string) => void)[];\r\n\r\n private _receivedHandshakeResponse: boolean;\r\n private _handshakeResolver!: (value?: PromiseLike<{}>) => void;\r\n private _handshakeRejecter!: (reason?: any) => void;\r\n private _stopDuringStartError?: Error;\r\n\r\n private _connectionState: HubConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private _startPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _nextKeepAlive: number = 0;\r\n\r\n // The type of these a) doesn't matter and b) varies when building in browser and node contexts\r\n // Since we're building the WebPack bundle directly from the TypeScript, this matters (previously\r\n // we built the bundle from the compiled JavaScript).\r\n private _reconnectDelayHandle?: any;\r\n private _timeoutHandle?: any;\r\n private _pingServerHandle?: any;\r\n\r\n private _freezeEventListener = () =>\r\n {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n\r\n /** The server timeout in milliseconds.\r\n *\r\n * If this timeout elapses without receiving any messages from the server, the connection will be terminated with an error.\r\n * The default timeout value is 30,000 milliseconds (30 seconds).\r\n */\r\n public serverTimeoutInMilliseconds: number;\r\n\r\n /** Default interval at which to ping the server.\r\n *\r\n * The default value is 15,000 milliseconds (15 seconds).\r\n * Allows the server to detect hard disconnects (like when a client unplugs their computer).\r\n * The ping will happen at most as often as the server pings.\r\n * If the server pings every 5 seconds, a value lower than 5 will ping every 5 seconds.\r\n */\r\n public keepAliveIntervalInMilliseconds: number;\r\n\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n public static create(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number): HubConnection {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy,\r\n serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize);\r\n }\r\n\r\n private constructor(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number) {\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.serverTimeoutInMilliseconds = serverTimeoutInMilliseconds ?? DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = keepAliveIntervalInMilliseconds ?? DEFAULT_PING_INTERVAL_IN_MS;\r\n\r\n this._statefulReconnectBufferSize = statefulReconnectBufferSize ?? DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE;\r\n\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n\r\n this.connection.onreceive = (data: any) => this._processIncomingData(data);\r\n this.connection.onclose = (error?: Error) => this._connectionClosed(error);\r\n\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state(): HubConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId(): string | null {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl(): string {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url: string) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n\r\n this.connection.baseUrl = url;\r\n }\r\n\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n public start(): Promise {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n\r\n private async _startWithStateTransitions(): Promise {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n } catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n\r\n await this.connection.start(this._protocol.transferFormat);\r\n\r\n try {\r\n let version = this._protocol.version;\r\n if (!this.connection.features.reconnect) {\r\n // Stateful Reconnect starts with HubProtocol version 2, newer clients connecting to older servers will fail to connect due to\r\n // the handshake only supporting version 1, so we will try to send version 1 during the handshake to keep old servers working.\r\n version = 1;\r\n }\r\n\r\n const handshakeRequest: HandshakeRequestMessage = {\r\n protocol: this._protocol.name,\r\n version,\r\n };\r\n\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n\r\n await handshakePromise;\r\n\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n\r\n const useStatefulReconnect = this.connection.features.reconnect || false;\r\n if (useStatefulReconnect) {\r\n this._messageBuffer = new MessageBuffer(this._protocol, this.connection, this._statefulReconnectBufferSize);\r\n this.connection.features.disconnected = this._messageBuffer._disconnected.bind(this._messageBuffer);\r\n this.connection.features.resend = () => {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._resend();\r\n }\r\n }\r\n }\r\n\r\n if (!this.connection.features.inherentKeepAlive) {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n public async stop(): Promise {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this.connection.features.reconnect = false;\r\n\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n\r\n private _stopInternal(error?: Error): Promise {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise!;\r\n }\r\n\r\n const state = this._connectionState;\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n\r\n if (state === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._sendCloseMessage();\r\n }\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new AbortError(\"The connection was stopped before the hub handshake could complete.\");\r\n\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n\r\n private async _sendCloseMessage() {\r\n try {\r\n await this._sendWithProtocol(this._createCloseMessage());\r\n } catch {\r\n // Ignore, this is a best effort attempt to let the server know the client closed gracefully.\r\n }\r\n }\r\n\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n public stream(methodName: string, ...args: any[]): IStreamResult {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue: Promise;\r\n\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation: CancelInvocationMessage = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent: CompletionMessage | StreamItemMessage | null, error?: Error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n } else {\r\n subject.complete();\r\n }\r\n } else {\r\n subject.next((invocationEvent.item) as T);\r\n }\r\n }\r\n };\r\n\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n\r\n return subject;\r\n }\r\n\r\n private _sendMessage(message: any) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n private _sendWithProtocol(message: any) {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._send(message);\r\n } else {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n public send(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n\r\n this._launchStreams(streams, sendPromise);\r\n\r\n return sendPromise;\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n public invoke(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId!] = (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n } else {\r\n resolve(invocationEvent.result);\r\n }\r\n } else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId!];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n\r\n return p;\r\n }\r\n\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n public on(methodName: string, newMethod: (...args: any[]) => any): void\r\n public on(methodName: string, newMethod: (...args: any[]) => void): void {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n\r\n this._methods[methodName].push(newMethod);\r\n }\r\n\r\n /** Removes all handlers for the specified hub method.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n */\r\n public off(methodName: string): void;\r\n\r\n /** Removes the specified handler for the specified hub method.\r\n *\r\n * You must pass the exact same Function instance as was previously passed to {@link @microsoft/signalr.HubConnection.on}. Passing a different instance (even if the function\r\n * body is the same) will not remove the handler.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n * @param {Function} method The handler to remove. This must be the same Function instance as the one passed to {@link @microsoft/signalr.HubConnection.on}.\r\n */\r\n public off(methodName: string, method: (...args: any[]) => void): void;\r\n public off(methodName: string, method?: (...args: any[]) => void): void {\r\n if (!methodName) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n } else {\r\n delete this._methods[methodName];\r\n }\r\n\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n public onclose(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n public onreconnecting(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n public onreconnected(callback: (connectionId?: string) => void): void {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n private _processIncomingData(data: any) {\r\n this._cleanupTimeout();\r\n\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n\r\n for (const message of messages) {\r\n if (this._messageBuffer && !this._messageBuffer._shouldProcessMessage(message)) {\r\n // Don't process the message, we are either waiting for a SequenceMessage or received a duplicate message\r\n continue;\r\n }\r\n\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message)\r\n .catch((e) => {\r\n this._logger.log(LogLevel.Error, `Invoke client method threw error: ${getErrorString(e)}`)\r\n });\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n } else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n\r\n break;\r\n }\r\n case MessageType.Ack:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._ack(message);\r\n }\r\n break;\r\n case MessageType.Sequence:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._resetSequence(message);\r\n }\r\n break;\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this._resetTimeoutPeriod();\r\n }\r\n\r\n private _processHandshakeResponse(data: any): any {\r\n let responseMessage: HandshakeResponseMessage;\r\n let remainingData: any;\r\n\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n } catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n\r\n private _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n\r\n this._cleanupPingTimer();\r\n }\r\n\r\n private _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n\r\n // Immediately fire Keep-Alive ping if nextPing is overdue to avoid dependency on JS timers\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._trySendPingMessage();\r\n }\r\n return;\r\n }\r\n\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined)\r\n {\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n await this._trySendPingMessage();\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n\r\n private async _invokeClientMethod(invocationMessage: InvocationMessage) {\r\n const methodName = invocationMessage.target.toLowerCase();\r\n const methods = this._methods[methodName];\r\n if (!methods) {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${methodName}' found.`);\r\n\r\n // No handlers provided by client but the server is expecting a response still, so we send an error\r\n if (invocationMessage.invocationId) {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n await this._sendWithProtocol(this._createCompletionMessage(invocationMessage.invocationId, \"Client didn't provide a result.\", null));\r\n }\r\n return;\r\n }\r\n\r\n // Avoid issues with handlers removing themselves thus modifying the list while iterating through it\r\n const methodsCopy = methods.slice();\r\n\r\n // Server expects a response\r\n const expectsResponse = invocationMessage.invocationId ? true : false;\r\n // We preserve the last result or exception but still call all handlers\r\n let res;\r\n let exception;\r\n let completionMessage;\r\n for (const m of methodsCopy) {\r\n try {\r\n const prevRes = res;\r\n res = await m.apply(this, invocationMessage.arguments);\r\n if (expectsResponse && res && prevRes) {\r\n this._logger.log(LogLevel.Error, `Multiple results provided for '${methodName}'. Sending error to server.`);\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `Client provided multiple results.`, null);\r\n }\r\n // Ignore exception if we got a result after, the exception will be logged\r\n exception = undefined;\r\n } catch (e) {\r\n exception = e;\r\n this._logger.log(LogLevel.Error, `A callback for the method '${methodName}' threw error '${e}'.`);\r\n }\r\n }\r\n if (completionMessage) {\r\n await this._sendWithProtocol(completionMessage);\r\n } else if (expectsResponse) {\r\n // If there is an exception that means either no result was given or a handler after a result threw\r\n if (exception) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `${exception}`, null);\r\n } else if (res !== undefined) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, null, res);\r\n } else {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n // Client didn't provide a result or throw from a handler, server expects a response so we send an error\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, \"Client didn't provide a result.\", null);\r\n }\r\n await this._sendWithProtocol(completionMessage);\r\n } else {\r\n if (res) {\r\n this._logger.log(LogLevel.Error, `Result given for '${methodName}' method but server is not expecting a result.`);\r\n }\r\n }\r\n }\r\n\r\n private _connectionClosed(error?: Error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new AbortError(\"The underlying connection was closed before the hub handshake could complete.\");\r\n\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n } else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n } else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n\r\n private _completeClose(error?: Error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (this._messageBuffer) {\r\n this._messageBuffer._dispose(error ?? new Error(\"Connection closed.\"));\r\n this._messageBuffer = undefined;\r\n }\r\n\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private async _reconnect(error?: Error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts, 0, retryError);\r\n\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts + 1} will start in ${nextRetryDelay} ms.`);\r\n\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay!);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n\r\n return;\r\n } catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n\r\n previousReconnectAttempts++;\r\n retryError = e instanceof Error ? e : new Error((e as any).toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n\r\n this._completeClose();\r\n }\r\n\r\n private _getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {\r\n try {\r\n return this._reconnectPolicy!.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n private _cancelCallbacksWithError(error: Error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n\r\n private _cleanupPingTimer(): void {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n\r\n private _cleanupTimeout(): void {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n private _createInvocation(methodName: string, args: any[], nonblocking: boolean, streamIds: string[]): InvocationMessage {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n } else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n\r\n private _launchStreams(streams: IStreamResult[], promiseQueue: Promise): void {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message: string;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n } else if (err && err.toString) {\r\n message = err.toString();\r\n } else {\r\n message = \"Unknown error\";\r\n }\r\n\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n\r\n private _replaceStreamingParams(args: any[]): [IStreamResult[], string[]] {\r\n const streams: IStreamResult[] = [];\r\n const streamIds: string[] = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n\r\n return [streams, streamIds];\r\n }\r\n\r\n private _isObservable(arg: any): arg is IStreamResult {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n\r\n private _createStreamInvocation(methodName: string, args: any[], streamIds: string[]): StreamInvocationMessage {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.StreamInvocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n\r\n private _createCancelInvocation(id: string): CancelInvocationMessage {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n\r\n private _createStreamItemMessage(id: string, item: any): StreamItemMessage {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n\r\n private _createCompletionMessage(id: string, error?: any, result?: any): CompletionMessage {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n private _createCloseMessage(): CloseMessage {\r\n return { type: MessageType.Close };\r\n }\r\n\r\n private async _trySendPingMessage(): Promise {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n } catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\n\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n\r\n/** @private */\r\nexport class DefaultReconnectPolicy implements IRetryPolicy {\r\n private readonly _retryDelays: (number | null)[];\r\n\r\n constructor(retryDelays?: number[]) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n\r\n public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nexport abstract class HeaderNames {\r\n static readonly Authorization = \"Authorization\";\r\n static readonly Cookie = \"Cookie\";\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\n\r\n/** @private */\r\nexport class AccessTokenHttpClient extends HttpClient {\r\n private _innerClient: HttpClient;\r\n _accessToken: string | undefined;\r\n _accessTokenFactory: (() => string | Promise) | undefined;\r\n\r\n constructor(innerClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined) {\r\n super();\r\n\r\n this._innerClient = innerClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n }\r\n\r\n public async send(request: HttpRequest): Promise {\r\n let allowRetry = true;\r\n if (this._accessTokenFactory && (!this._accessToken || (request.url && request.url.indexOf(\"/negotiate?\") > 0))) {\r\n // don't retry if the request is a negotiate or if we just got a potentially new token from the access token factory\r\n allowRetry = false;\r\n this._accessToken = await this._accessTokenFactory();\r\n }\r\n this._setAuthorizationHeader(request);\r\n const response = await this._innerClient.send(request);\r\n\r\n if (allowRetry && response.statusCode === 401 && this._accessTokenFactory) {\r\n this._accessToken = await this._accessTokenFactory();\r\n this._setAuthorizationHeader(request);\r\n return await this._innerClient.send(request);\r\n }\r\n return response;\r\n }\r\n\r\n private _setAuthorizationHeader(request: HttpRequest) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (this._accessToken) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${this._accessToken}`\r\n }\r\n // don't remove the header if there isn't an access token factory, the user manually added the header in this case\r\n else if (this._accessTokenFactory) {\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._innerClient.getCookieString(url);\r\n }\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport enum HttpTransportType {\r\n /** Specifies no transport preference. */\r\n None = 0,\r\n /** Specifies the WebSockets transport. */\r\n WebSockets = 1,\r\n /** Specifies the Server-Sent Events transport. */\r\n ServerSentEvents = 2,\r\n /** Specifies the Long Polling transport. */\r\n LongPolling = 4,\r\n}\r\n\r\n/** Specifies the transfer format for a connection. */\r\nexport enum TransferFormat {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n Text = 1,\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n Binary = 2,\r\n}\r\n\r\n/** An abstraction over the behavior of transports. This is designed to support the framework and not intended for use by applications. */\r\nexport interface ITransport {\r\n connect(url: string, transferFormat: TransferFormat): Promise;\r\n send(data: any): Promise;\r\n stop(): Promise;\r\n onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n onclose: ((error?: Error) => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController implements AbortSignal {\r\n private _isAborted: boolean = false;\r\n public onabort: (() => void) | null = null;\r\n\r\n public abort(): void {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n\r\n get signal(): AbortSignal {\r\n return this;\r\n }\r\n\r\n get aborted(): boolean {\r\n return this._isAborted;\r\n }\r\n}\r\n\r\n/** Represents a signal that can be monitored to determine if a request has been aborted. */\r\nexport interface AbortSignal {\r\n /** Indicates if the request has been aborted. */\r\n aborted: boolean;\r\n /** Set this to a handler that will be invoked when the request is aborted. */\r\n onabort: (() => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private readonly _pollAbort: AbortController;\r\n\r\n private _url?: string;\r\n private _running: boolean;\r\n private _receiving?: Promise;\r\n private _closeError?: Error | unknown;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n public get pollAborted(): boolean {\r\n return this._pollAbort.aborted;\r\n }\r\n\r\n constructor(httpClient: HttpClient, logger: ILogger, options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n\r\n this._running = false;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._url = url;\r\n\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n\r\n const pollOptions: HttpRequest = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n this._running = true;\r\n }\r\n\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n\r\n private async _poll(url: string, pollOptions: HttpRequest): Promise {\r\n try {\r\n while (this._running) {\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n\r\n this._running = false;\r\n } else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent!)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n } else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n } catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${(e as any).message}`);\r\n } else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n } else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public async stop(): Promise {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n\r\n try {\r\n await this._receiving;\r\n\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const deleteOptions: HttpRequest = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n let error;\r\n try {\r\n await this._httpClient.delete(this._url!, deleteOptions);\r\n } catch (err) {\r\n error = err;\r\n }\r\n\r\n if (error) {\r\n if (error instanceof HttpError) {\r\n if (error.statusCode === 404) {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) A 404 response was returned from sending a DELETE request.\");\r\n } else {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request accepted.\");\r\n }\r\n\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n\r\n private _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n/** @private */\r\nexport class ServerSentEventsTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _accessToken: string | undefined;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private _eventSource?: EventSource;\r\n private _url?: string;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessToken: string | undefined, logger: ILogger,\r\n options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._accessToken = accessToken;\r\n this._logger = logger;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n\r\n // set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n\r\n if (this._accessToken) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(this._accessToken)}`;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n\r\n let eventSource: EventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials });\r\n } else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers: MessageHeaders = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers} } as EventSourceInit);\r\n }\r\n\r\n try {\r\n eventSource.onmessage = (e: MessageEvent) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent!)}.`);\r\n this.onreceive(e.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e: Event) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n } else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n } catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public stop(): Promise {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(e?: Error | unknown) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { WebSocketConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class WebSocketTransport implements ITransport {\r\n private readonly _logger: ILogger;\r\n private readonly _accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly _logMessageContent: boolean;\r\n private readonly _webSocketConstructor: WebSocketConstructor;\r\n private readonly _httpClient: HttpClient;\r\n private _webSocket?: WebSocket;\r\n private _headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n logMessageContent: boolean, webSocketConstructor: WebSocketConstructor, headers: MessageHeaders) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n\r\n let token: string;\r\n if (this._accessTokenFactory) {\r\n token = await this._accessTokenFactory();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket: WebSocket | undefined;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n\r\n if (Platform.isNode || Platform.isReactNative) {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = cookies;\r\n }\r\n\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n else\r\n {\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n\r\n webSocket.onopen = (_event: Event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n\r\n webSocket.onerror = (event: Event) => {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"There was an error with the transport\";\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n\r\n webSocket.onmessage = (message: MessageEvent) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n webSocket.onclose = (event: CloseEvent) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n } else {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n\r\n public send(data: any): Promise {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n\r\n public stop(): Promise {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(event: CloseEvent | Error | unknown): void {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => {};\r\n this._webSocket.onmessage = () => {};\r\n this._webSocket.onerror = () => {};\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n } else if (event instanceof Error) {\r\n this.onclose(event);\r\n } else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n\r\n private _isCloseEvent(event?: any): event is CloseEvent {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AccessTokenHttpClient } from \"./AccessTokenHttpClient\";\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError, AbortError } from \"./Errors\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, ITransport, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\n\r\n/** @private */\r\nconst enum ConnectionState {\r\n Connecting = \"Connecting\",\r\n Connected = \"Connected\",\r\n Disconnected = \"Disconnected\",\r\n Disconnecting = \"Disconnecting\",\r\n}\r\n\r\n/** @private */\r\nexport interface INegotiateResponse {\r\n connectionId?: string;\r\n connectionToken?: string;\r\n negotiateVersion?: number;\r\n availableTransports?: IAvailableTransport[];\r\n url?: string;\r\n accessToken?: string;\r\n error?: string;\r\n useStatefulReconnect?: boolean;\r\n}\r\n\r\n/** @private */\r\nexport interface IAvailableTransport {\r\n transport: keyof typeof HttpTransportType;\r\n transferFormats: (keyof typeof TransferFormat)[];\r\n}\r\n\r\nconst MAX_REDIRECTS = 100;\r\n\r\n/** @private */\r\nexport class HttpConnection implements IConnection {\r\n private _connectionState: ConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private readonly _httpClient: AccessTokenHttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n // Needs to not start with _ to be available for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private transport?: ITransport;\r\n private _startInternalPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _stopPromiseResolver: (value?: PromiseLike) => void = () => {};\r\n private _stopError?: Error;\r\n private _accessTokenFactory?: () => string | Promise;\r\n private _sendQueue?: TransportSendQueue;\r\n\r\n public readonly features: any = {};\r\n public baseUrl: string;\r\n public connectionId?: string;\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((e?: Error) => void) | null;\r\n\r\n private readonly _negotiateVersion: number = 1;\r\n\r\n constructor(url: string, options: IHttpConnectionOptions = {}) {\r\n Arg.isRequired(url, \"url\");\r\n\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n } else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n\r\n let webSocketModule: any = null;\r\n let eventSourceModule: any = null;\r\n\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n } else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n } else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n\r\n this._httpClient = new AccessTokenHttpClient(options.httpClient || new DefaultHttpClient(this._logger), options.accessTokenFactory);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public start(): Promise;\r\n public start(transferFormat: TransferFormat): Promise;\r\n public async start(transferFormat?: TransferFormat): Promise {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n\r\n if (this._connectionState !== ConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = ConnectionState.Connecting;\r\n\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === ConnectionState.Disconnecting) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n\r\n return Promise.reject(new AbortError(message));\r\n } else if (this._connectionState as any !== ConnectionState.Connected) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n\r\n this._connectionStarted = true;\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n if (this._connectionState !== ConnectionState.Connected) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport!);\r\n }\r\n\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n\r\n public async stop(error?: Error): Promise {\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n\r\n this._connectionState = ConnectionState.Disconnecting;\r\n\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n\r\n private async _stopInternal(error?: Error): Promise {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n\r\n try {\r\n await this._startInternalPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n\r\n this.transport = undefined;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n\r\n private async _startInternal(transferFormat: TransferFormat): Promise {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n this._httpClient._accessTokenFactory = this._accessTokenFactory;\r\n\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n } else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n } else {\r\n let negotiateResponse: INegotiateResponse | null = null;\r\n let redirects = 0;\r\n\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === ConnectionState.Disconnecting || this._connectionState === ConnectionState.Disconnected) {\r\n throw new AbortError(\"The connection was stopped during negotiation.\");\r\n }\r\n\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n\r\n if ((negotiateResponse as any).ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n // set the factory to undefined so the AccessTokenHttpClient won't retry with the same token, since we know it won't change until a connection restart\r\n this._httpClient._accessToken = accessToken;\r\n this._httpClient._accessTokenFactory = undefined;\r\n }\r\n\r\n redirects++;\r\n }\r\n while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = ConnectionState.Connected;\r\n }\r\n\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this.transport = undefined;\r\n\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _getNegotiationResponse(url: string): Promise {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n\r\n const negotiateResponse = JSON.parse(response.content as string) as INegotiateResponse;\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n\r\n if (negotiateResponse.useStatefulReconnect && this._options._useStatefulReconnect !== true) {\r\n return Promise.reject(new FailedToNegotiateWithServerError(\"Client didn't negotiate Stateful Reconnect but the server did.\"));\r\n }\r\n\r\n return negotiateResponse;\r\n } catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n\r\n private _createConnectUrl(url: string, connectionToken: string | null | undefined) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n\r\n private async _createTransport(url: string, requestedTransport: HttpTransportType | ITransport | undefined, negotiateResponse: INegotiateResponse, requestedTransferFormat: TransferFormat): Promise {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n\r\n const transportExceptions: any[] = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate: INegotiateResponse | undefined = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat,\r\n negotiate?.useStatefulReconnect === true);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n } else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n } catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n } catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n\r\n if (this._connectionState !== ConnectionState.Connecting) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n\r\n private _constructTransport(transport: HttpTransportType): ITransport {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent!,\r\n this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._httpClient._accessToken, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n\r\n private _startTransport(url: string, transferFormat: TransferFormat): Promise {\r\n this.transport!.onreceive = this.onreceive;\r\n if (this.features.reconnect) {\r\n this.transport!.onclose = async (e) => {\r\n let callStop = false;\r\n if (this.features.reconnect) {\r\n try {\r\n this.features.disconnected();\r\n await this.transport!.connect(url, transferFormat);\r\n await this.features.resend();\r\n } catch {\r\n callStop = true;\r\n }\r\n } else {\r\n this._stopConnection(e);\r\n return;\r\n }\r\n\r\n if (callStop) {\r\n this._stopConnection(e);\r\n }\r\n };\r\n } else {\r\n this.transport!.onclose = (e) => this._stopConnection(e);\r\n }\r\n return this.transport!.connect(url, transferFormat);\r\n }\r\n\r\n private _resolveTransportOrError(endpoint: IAvailableTransport, requestedTransport: HttpTransportType | undefined,\r\n requestedTransferFormat: TransferFormat, useStatefulReconnect: boolean): ITransport | Error | unknown {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n } else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n this.features.reconnect = transport === HttpTransportType.WebSockets ? useStatefulReconnect : undefined;\r\n return this._constructTransport(transport);\r\n } catch (ex) {\r\n return ex;\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n\r\n private _isITransport(transport: any): transport is ITransport {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n\r\n private _stopConnection(error?: Error): void {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n\r\n this.transport = undefined;\r\n\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n\r\n this.connectionId = undefined;\r\n this._connectionState = ConnectionState.Disconnected;\r\n\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private _resolveUrl(url: string): string {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n\r\n private _resolveNegotiateUrl(url: string): string {\r\n const negotiateUrl = new URL(url);\r\n\r\n if (negotiateUrl.pathname.endsWith('/')) {\r\n negotiateUrl.pathname += \"negotiate\";\r\n } else {\r\n negotiateUrl.pathname += \"/negotiate\";\r\n }\r\n const searchParams = new URLSearchParams(negotiateUrl.searchParams);\r\n\r\n if (!searchParams.has(\"negotiateVersion\")) {\r\n searchParams.append(\"negotiateVersion\", this._negotiateVersion.toString());\r\n }\r\n\r\n if (searchParams.has(\"useStatefulReconnect\")) {\r\n if (searchParams.get(\"useStatefulReconnect\") === \"true\") {\r\n this._options._useStatefulReconnect = true;\r\n }\r\n } else if (this._options._useStatefulReconnect === true) {\r\n searchParams.append(\"useStatefulReconnect\", \"true\");\r\n }\r\n\r\n negotiateUrl.search = searchParams.toString();\r\n\r\n return negotiateUrl.toString();\r\n }\r\n}\r\n\r\nfunction transportMatches(requestedTransport: HttpTransportType | undefined, actualTransport: HttpTransportType) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n\r\n/** @private */\r\nexport class TransportSendQueue {\r\n private _buffer: any[] = [];\r\n private _sendBufferedData: PromiseSource;\r\n private _executing: boolean = true;\r\n private _transportResult?: PromiseSource;\r\n private _sendLoopPromise: Promise;\r\n\r\n constructor(private readonly _transport: ITransport) {\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n\r\n public stop(): Promise {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n\r\n private _bufferData(data: string | ArrayBuffer): void {\r\n if (this._buffer.length && typeof(this._buffer[0]) !== typeof(data)) {\r\n throw new Error(`Expected data to be of type ${typeof(this._buffer)} but was of type ${typeof(data)}`);\r\n }\r\n\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n\r\n private async _sendLoop(): Promise {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n\r\n break;\r\n }\r\n\r\n this._sendBufferedData = new PromiseSource();\r\n\r\n const transportResult = this._transportResult!;\r\n this._transportResult = undefined;\r\n\r\n const data = typeof(this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n\r\n this._buffer.length = 0;\r\n\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n } catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n\r\n private static _concatBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n\r\n return result.buffer;\r\n }\r\n}\r\n\r\nclass PromiseSource {\r\n private _resolver?: () => void;\r\n private _rejecter!: (reason?: any) => void;\r\n public promise: Promise;\r\n\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n\r\n public resolve(): void {\r\n this._resolver!();\r\n }\r\n\r\n public reject(reason?: any): void {\r\n this._rejecter!(reason);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AckMessage, CompletionMessage, HubMessage, IHubProtocol, InvocationMessage, MessageType, SequenceMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\n\r\nconst JSON_HUB_PROTOCOL_NAME: string = \"json\";\r\n\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol implements IHubProtocol {\r\n\r\n /** @inheritDoc */\r\n public readonly name: string = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n public readonly version: number = 2;\r\n\r\n /** @inheritDoc */\r\n public readonly transferFormat: TransferFormat = TransferFormat.Text;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n public parseMessages(input: string, logger: ILogger): HubMessage[] {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message) as HubMessage;\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n case MessageType.Ack:\r\n this._isAckMessage(parsedMessage);\r\n break;\r\n case MessageType.Sequence:\r\n this._isSequenceMessage(parsedMessage);\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n\r\n return hubMessages;\r\n }\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n public writeMessage(message: HubMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n\r\n private _isInvocationMessage(message: InvocationMessage): void {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n\r\n private _isStreamItemMessage(message: StreamItemMessage): void {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n\r\n private _isCompletionMessage(message: CompletionMessage): void {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n private _isAckMessage(message: AckMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Ack message.\");\r\n }\r\n }\r\n\r\n private _isSequenceMessage(message: SequenceMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Sequence message.\");\r\n }\r\n }\r\n\r\n private _assertNotEmptyString(value: any, errorMessage: string): void {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { IHubProtocol } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStatefulReconnectOptions } from \"./IStatefulReconnectOptions\";\r\nimport { HttpTransportType } from \"./ITransport\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n\r\nconst LogLevelNameMapping: {[k: string]: LogLevel} = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\n\r\nfunction parseLogLevel(name: string): LogLevel {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n } else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n private _serverTimeoutInMilliseconds?: number;\r\n private _keepAliveIntervalInMilliseconds ?: number;\r\n\r\n /** @internal */\r\n public protocol?: IHubProtocol;\r\n /** @internal */\r\n public httpConnectionOptions?: IHttpConnectionOptions;\r\n /** @internal */\r\n public url?: string;\r\n /** @internal */\r\n public logger?: ILogger;\r\n\r\n /** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */\r\n /** @internal */\r\n public reconnectPolicy?: IRetryPolicy;\r\n\r\n private _statefulReconnectBufferSize?: number;\r\n\r\n /** Configures console logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel} logLevel The minimum level of messages to log. Anything at this level, or a more severe level, will be logged.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logLevel: LogLevel): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {ILogger} logger An object implementing the {@link @microsoft/signalr.ILogger} interface, which will be used to write all log messages.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logger: ILogger): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {string} logLevel A string representing a LogLevel setting a minimum level of messages to log.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n */\r\n public configureLogging(logLevel: string): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel | string | ILogger} logging A {@link @microsoft/signalr.LogLevel}, a string representing a LogLevel, or an object implementing the {@link @microsoft/signalr.ILogger} interface.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder;\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder {\r\n Arg.isRequired(logging, \"logging\");\r\n\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n } else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n } else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * The transport will be selected automatically based on what the server and client support.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified HTTP-based transport to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {HttpTransportType} transportType The specific transport to use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, transportType: HttpTransportType): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {IHttpConnectionOptions} options An options object used to configure the connection.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, options: IHttpConnectionOptions): HubConnectionBuilder;\r\n public withUrl(url: string, transportTypeOrOptions?: IHttpConnectionOptions | HttpTransportType): HubConnectionBuilder {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n\r\n this.url = url;\r\n\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n } else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n public withHubProtocol(protocol: IHubProtocol): HubConnectionBuilder {\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n * By default, the client will wait 0, 2, 10 and 30 seconds respectively before trying up to 4 reconnect attempts.\r\n */\r\n public withAutomaticReconnect(): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {number[]} retryDelays An array containing the delays in milliseconds before trying each reconnect attempt.\r\n * The length of the array represents how many failed reconnect attempts it takes before the client will stop attempting to reconnect.\r\n */\r\n public withAutomaticReconnect(retryDelays: number[]): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {IRetryPolicy} reconnectPolicy An {@link @microsoft/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.\r\n */\r\n public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;\r\n public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n } else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n } else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.serverTimeoutInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withServerTimeout(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._serverTimeoutInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.keepAliveIntervalInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withKeepAliveInterval(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._keepAliveIntervalInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Enables and configures options for the Stateful Reconnect feature.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withStatefulReconnect(options?: IStatefulReconnectOptions): HubConnectionBuilder {\r\n if (this.httpConnectionOptions === undefined) {\r\n this.httpConnectionOptions = {};\r\n }\r\n this.httpConnectionOptions._useStatefulReconnect = true;\r\n\r\n this._statefulReconnectBufferSize = options?.bufferSize;\r\n\r\n return this;\r\n }\r\n\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n public build(): HubConnection {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n\r\n return HubConnection.create(\r\n connection,\r\n this.logger || NullLogger.instance,\r\n this.protocol || new JsonHubProtocol(),\r\n this.reconnectPolicy,\r\n this._serverTimeoutInMilliseconds,\r\n this._keepAliveIntervalInMilliseconds,\r\n this._statefulReconnectBufferSize);\r\n }\r\n}\r\n\r\nfunction isLogger(logger: any): logger is ILogger {\r\n return logger.log !== undefined;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Everything that users need to access must be exported here. Including interfaces.\r\nexport { AbortSignal } from \"./AbortController\";\r\nexport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nexport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nexport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nexport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nexport { IStatefulReconnectOptions } from \"./IStatefulReconnectOptions\";\r\nexport { HubConnection, HubConnectionState } from \"./HubConnection\";\r\nexport { HubConnectionBuilder } from \"./HubConnectionBuilder\";\r\nexport { AckMessage, SequenceMessage, MessageType, MessageHeaders, HubMessage, HubMessageBase,\r\n HubInvocationMessage, InvocationMessage, StreamInvocationMessage, StreamItemMessage, CompletionMessage,\r\n PingMessage, CloseMessage, CancelInvocationMessage, IHubProtocol } from \"./IHubProtocol\";\r\nexport { ILogger, LogLevel } from \"./ILogger\";\r\nexport { HttpTransportType, TransferFormat, ITransport } from \"./ITransport\";\r\nexport { IStreamSubscriber, IStreamResult, ISubscription } from \"./Stream\";\r\nexport { NullLogger } from \"./Loggers\";\r\nexport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nexport { Subject } from \"./Subject\";\r\nexport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\nexport { VERSION } from \"./Utils\";\r\n", "import * as vscode from 'vscode';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\nimport * as os from 'os';\r\nimport { spawn } from 'child_process';\r\nimport { WorkspaceDetector } from './WorkspaceDetector';\r\nimport { BackendProcessManager } from './BackendProcessManager';\r\nimport { StatusBarManager } from './StatusBarManager';\r\nimport { StudioApiClient } from './StudioApiClient';\r\nimport { StudioSignalRClient } from './StudioSignalRClient';\r\nimport { AgentsPanelProvider } from './panels/AgentsPanelProvider';\r\nimport { MessagesPanelProvider } from './panels/MessagesPanelProvider';\r\nimport { DecisionsPanelProvider } from './panels/DecisionsPanelProvider';\r\nimport { LogsPanelProvider } from './panels/LogsPanelProvider';\r\nimport { KanbanPanelProvider } from './panels/KanbanPanelProvider';\r\nimport { Logger } from './Logger';\r\nimport type { ProjectConfig, GitHubRepoInfo } from './types';\r\n\r\nlet backendManager: BackendProcessManager | undefined;\r\nlet signalRClient: StudioSignalRClient | undefined;\r\nlet activeApiClient: StudioApiClient | undefined;\r\nlet activeProjectSlug: string | undefined;\r\nlet statusBar: StatusBarManager | undefined;\r\nexport let log: Logger;\r\n\r\nconst DEFAULT_PLACEHOLDER = 'Waiting for AI Dev Studio backend...';\r\n\r\ntype TemplatePrecedence = 'global-first' | 'packaged-first';\r\n\r\ntype ExtensionSettings = {\r\n bootstrapEnabled: boolean;\r\n bootstrapApiPort: number;\r\n backendMaxAttempts: number;\r\n backendRetryDelayMs: number;\r\n templatesGlobalPath?: string;\r\n templatesPrecedence: TemplatePrecedence;\r\n};\r\n\r\nexport async function activate(context: vscode.ExtensionContext): Promise {\r\n log = new Logger('AI Dev Studio');\r\n context.subscriptions.push(log);\r\n log.appendLine(`Activating \u2014 extensionPath: ${context.extensionPath}`);\r\n\r\n statusBar = new StatusBarManager();\r\n context.subscriptions.push(statusBar);\r\n\r\n // Register placeholder panel providers immediately so panels never show \"\u2014\"\r\n const agentsProvider = new AgentsPanelProvider(context.extensionUri);\r\n const messagesProvider = new MessagesPanelProvider(context.extensionUri);\r\n const decisionsProvider = new DecisionsPanelProvider(context.extensionUri);\r\n const logsProvider = new LogsPanelProvider(context.extensionUri, log);\r\n const debugLogsProvider = new LogsPanelProvider(context.extensionUri, log);\r\n const kanbanProvider = new KanbanPanelProvider(context.extensionUri);\r\n\r\n context.subscriptions.push(\r\n vscode.window.registerWebviewViewProvider('aidev.agents', agentsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.messages', messagesProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.decisions', decisionsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.logs', logsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.logsDebug', debugLogsProvider),\r\n logsProvider,\r\n debugLogsProvider,\r\n );\r\n\r\n const detector = new WorkspaceDetector(\r\n glob => {\r\n const watcher = vscode.workspace.createFileSystemWatcher(glob);\r\n return {\r\n onCreated: handler => watcher.onDidCreate(uri => handler(uri.fsPath)),\r\n onDeleted: handler => watcher.onDidDelete(uri => handler(uri.fsPath)),\r\n dispose: () => watcher.dispose(),\r\n };\r\n },\r\n filePath => {\r\n try { return fs.readFileSync(filePath, 'utf8'); }\r\n catch { return undefined; }\r\n },\r\n );\r\n context.subscriptions.push(detector);\r\n\r\n detector.on('projectDetected', async ({ config, workspaceFolderPath }) => {\r\n log.appendLine(`Project detected: slug=${config.projectSlug} port=${config.apiPort} at ${workspaceFolderPath}`);\r\n if (backendManager) {\r\n log.appendLine('Backend already running \u2014 skipping.');\r\n return;\r\n }\r\n await connectBackend(context, config, workspaceFolderPath, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n });\r\n\r\n detector.on('projectRemoved', wsPath => {\r\n log.appendLine(`Project removed: ${wsPath}`);\r\n void teardown(agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n });\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.restartBackend', async () => {\r\n log.appendLine('Restart backend command invoked.');\r\n await teardown(agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.openBoard', () => {\r\n kanbanProvider.openEditor();\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.openGlobalTemplatesFolder', async () => {\r\n const settings = getSettings();\r\n const globalDir = getGlobalTemplateRoot(settings.templatesGlobalPath, context);\r\n fs.mkdirSync(globalDir, { recursive: true });\r\n await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(globalDir));\r\n log.appendLine(`Opened global templates folder: ${globalDir}`);\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.workspace.onDidChangeWorkspaceFolders(e => {\r\n log.appendLine(`Workspace folders changed: +${e.added.length} -${e.removed.length}`);\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n }),\r\n );\r\n\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n}\r\n\r\nfunction scanWorkspace(\r\n context: vscode.ExtensionContext,\r\n detector: WorkspaceDetector,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): void {\r\n const settings = getSettings();\r\n const folders = vscode.workspace.workspaceFolders ?? [];\r\n log.appendLine(`Scanning ${folders.length} folder(s): ${folders.map(f => f.uri.fsPath).join(', ') || '(none \u2014 open a folder containing .ai-dev/project.json)'}`);\r\n\r\n if (folders.length === 0) {\r\n setDisconnectedPlaceholder('No folder opened.', agentsProvider, messagesProvider, decisionsProvider);\r\n detector.start([]);\r\n return;\r\n }\r\n\r\n let validConfigs = 0;\r\n let createFailures = 0;\r\n\r\n for (const folder of folders) {\r\n const ensured = ensureProjectConfig(context, settings, folder.uri.fsPath);\r\n if (!ensured.ok) {\r\n createFailures++;\r\n continue;\r\n }\r\n\r\n validConfigs++;\r\n }\r\n\r\n if (validConfigs === 0) {\r\n setDisconnectedPlaceholder('No .ai-dev folder created.', agentsProvider, messagesProvider, decisionsProvider);\r\n log.warn('No valid .ai-dev/project.json found in opened folder(s). Backend connection requires projectSlug and apiPort.');\r\n if (createFailures > 0) {\r\n log.warn(`Failed to initialize .ai-dev in ${createFailures} folder(s).`);\r\n }\r\n } else {\r\n setDisconnectedPlaceholder(DEFAULT_PLACEHOLDER, agentsProvider, messagesProvider, decisionsProvider);\r\n }\r\n\r\n detector.start(folders.map(f => f.uri.fsPath));\r\n}\r\n\r\nfunction ensureProjectConfig(\r\n context: vscode.ExtensionContext,\r\n settings: ExtensionSettings,\r\n workspaceFolderPath: string,\r\n): { ok: true; configPath: string } | { ok: false } {\r\n const aiDevDir = path.join(workspaceFolderPath, '.ai-dev');\r\n const configPath = path.join(aiDevDir, 'project.json');\r\n const folderName = path.basename(workspaceFolderPath);\r\n\r\n try {\r\n if (!settings.bootstrapEnabled) {\r\n if (fs.existsSync(configPath)) {\r\n return { ok: true, configPath };\r\n }\r\n log.warn(`Bootstrap disabled and no project config found at ${configPath}`);\r\n return { ok: false };\r\n }\r\n\r\n if (!fs.existsSync(aiDevDir)) {\r\n fs.mkdirSync(aiDevDir, { recursive: true });\r\n log.appendLine(`Created ${aiDevDir}`);\r\n }\r\n\r\n if (!fs.existsSync(configPath)) {\r\n const projectSlug = slugifyFolderName(folderName);\r\n const initialConfig: Record = {\r\n projectSlug,\r\n apiPort: settings.bootstrapApiPort,\r\n name: folderName,\r\n description: '',\r\n createdAt: new Date().toISOString(),\r\n };\r\n fs.writeFileSync(configPath, JSON.stringify(initialConfig, null, 2), 'utf8');\r\n log.appendLine(`Created default project config at ${configPath} (slug=${projectSlug}, port=${settings.bootstrapApiPort})`);\r\n }\r\n\r\n if (!repairProjectConfig(configPath, folderName, settings.bootstrapApiPort)) {\r\n log.warn(`Invalid project config at ${configPath} \u2014 requires projectSlug and apiPort.`);\r\n return { ok: false };\r\n }\r\n\r\n ensureDefaultAgents(context, settings, aiDevDir);\r\n\r\n return { ok: true, configPath };\r\n } catch (e) {\r\n log.warn(`Failed to initialize .ai-dev for ${workspaceFolderPath}: ${e}`);\r\n return { ok: false };\r\n }\r\n}\r\n\r\nfunction slugifyFolderName(name: string): string {\r\n const slug = name\r\n .toLowerCase()\r\n .replace(/[^a-z0-9]+/g, '-')\r\n .replace(/^-+|-+$/g, '');\r\n return slug || 'ai-dev-project';\r\n}\r\n\r\nfunction repairProjectConfig(configPath: string, folderName: string, defaultPort: number): boolean {\r\n const fallbackSlug = slugifyFolderName(folderName);\r\n\r\n let parsed: Record;\r\n try {\r\n const raw = fs.readFileSync(configPath, 'utf8');\r\n parsed = JSON.parse(raw) as Record;\r\n } catch {\r\n parsed = {};\r\n }\r\n\r\n const normalized = normalizeProjectConfig(parsed, fallbackSlug, defaultPort);\r\n if (!normalized) {\r\n return false;\r\n }\r\n\r\n const currentSlug = typeof parsed.projectSlug === 'string' ? parsed.projectSlug : undefined;\r\n const currentPort = typeof parsed.apiPort === 'number'\r\n ? parsed.apiPort\r\n : (typeof parsed.apiPort === 'string' ? Number(parsed.apiPort) : undefined);\r\n\r\n const needsWrite = currentSlug !== normalized.projectSlug || currentPort !== normalized.apiPort;\r\n if (needsWrite) {\r\n const repaired: Record = {\r\n ...parsed,\r\n projectSlug: normalized.projectSlug,\r\n apiPort: normalized.apiPort,\r\n };\r\n fs.writeFileSync(configPath, JSON.stringify(repaired, null, 2), 'utf8');\r\n log.appendLine(`Repaired project config at ${configPath} (slug=${normalized.projectSlug}, port=${normalized.apiPort})`);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction normalizeProjectConfig(\r\n parsed: Record,\r\n fallbackSlug: string,\r\n defaultPort: number,\r\n): ProjectConfig | undefined {\r\n const projectSlug =\r\n firstNonEmptyString(parsed.projectSlug, parsed.slug, parsed.projectId) ?? fallbackSlug;\r\n\r\n const apiPort =\r\n firstPositiveNumber(parsed.apiPort, parsed.port) ?? defaultPort;\r\n\r\n if (!projectSlug || !apiPort) {\r\n return undefined;\r\n }\r\n\r\n return { projectSlug, apiPort };\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value !== 'string') continue;\r\n const trimmed = value.trim();\r\n if (trimmed) return trimmed;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction firstPositiveNumber(...values: unknown[]): number | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === 'string') {\r\n const candidate = Number(value.trim());\r\n if (Number.isFinite(candidate) && candidate > 0) {\r\n return Math.trunc(candidate);\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\ntype AgentTemplateSeed = {\r\n slug?: string;\r\n name?: string;\r\n role?: string;\r\n model?: string;\r\n executor?: string;\r\n description?: string;\r\n skills?: string[];\r\n thinking?: string;\r\n thinkingLevel?: string;\r\n};\r\n\r\nfunction ensureDefaultAgents(\r\n context: vscode.ExtensionContext,\r\n settings: ExtensionSettings,\r\n aiDevDir: string,\r\n): void {\r\n const globalTemplateRoot = getGlobalTemplateRoot(settings.templatesGlobalPath, context);\r\n const templateRoots = getTemplateRoots(globalTemplateRoot, context.extensionPath, settings.templatesPrecedence);\r\n const discovered = discoverTemplates(templateRoots);\r\n if (discovered.length === 0) {\r\n log.warn('No agent templates discovered. Skipping default agent bootstrap.');\r\n return;\r\n }\r\n\r\n const partialsCache = new Map>();\r\n const agentsDir = path.join(aiDevDir, 'agents');\r\n fs.mkdirSync(agentsDir, { recursive: true });\r\n\r\n let created = 0;\r\n for (const discoveredTemplate of discovered) {\r\n const targetAgentDir = path.join(agentsDir, discoveredTemplate.slug);\r\n if (fs.existsSync(targetAgentDir)) continue;\r\n\r\n let template: AgentTemplateSeed;\r\n try {\r\n template = JSON.parse(fs.readFileSync(discoveredTemplate.jsonPath, 'utf8')) as AgentTemplateSeed;\r\n } catch (e) {\r\n log.warn(`Failed to parse template ${discoveredTemplate.jsonPath}: ${e}`);\r\n continue;\r\n }\r\n\r\n const slug = typeof template.slug === 'string' && template.slug.length > 0 ? template.slug : discoveredTemplate.slug;\r\n const name = typeof template.name === 'string' && template.name.length > 0 ? template.name : discoveredTemplate.slug;\r\n\r\n const partials = partialsCache.get(discoveredTemplate.root) ?? loadTemplatePartials(discoveredTemplate.root);\r\n partialsCache.set(discoveredTemplate.root, partials);\r\n\r\n const content = fs.existsSync(discoveredTemplate.mdPath)\r\n ? renderTemplate(readComposedTemplate(discoveredTemplate.mdPath, partials, discoveredTemplate.slug), name, slug)\r\n : `# ${name}\\n\\nYou are ${name}.\\n`;\r\n const compactContent = discoveredTemplate.compactMdPath && fs.existsSync(discoveredTemplate.compactMdPath)\r\n ? renderTemplate(readComposedTemplate(discoveredTemplate.compactMdPath, partials, discoveredTemplate.slug), name, slug)\r\n : '';\r\n\r\n fs.mkdirSync(targetAgentDir, { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'inbox'), { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'outbox'), { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'journal'), { recursive: true });\r\n\r\n const agentJson: Record = {\r\n slug,\r\n name,\r\n role: template.role ?? '',\r\n model: template.model ?? 'claude-sonnet-4-6',\r\n executor: template.executor ?? 'claude',\r\n status: 'idle',\r\n description: template.description ?? '',\r\n };\r\n if (Array.isArray(template.skills) && template.skills.length > 0) {\r\n agentJson.skills = template.skills;\r\n }\r\n const thinking = typeof template.thinking === 'string'\r\n ? template.thinking\r\n : typeof template.thinkingLevel === 'string'\r\n ? template.thinkingLevel\r\n : '';\r\n if (thinking && thinking !== 'off') {\r\n agentJson.thinking = thinking;\r\n }\r\n\r\n fs.writeFileSync(path.join(targetAgentDir, 'agent.json'), JSON.stringify(agentJson, null, 2), 'utf8');\r\n fs.writeFileSync(path.join(targetAgentDir, 'CLAUDE.md'), content, 'utf8');\r\n if (compactContent) {\r\n fs.writeFileSync(path.join(targetAgentDir, 'CLAUDE.compact.md'), compactContent, 'utf8');\r\n }\r\n created++;\r\n }\r\n\r\n log.appendLine(`Created ${created} default agent(s) from templates.`);\r\n}\r\n\r\ntype DiscoveredTemplate = {\r\n slug: string;\r\n root: string;\r\n jsonPath: string;\r\n mdPath: string;\r\n compactMdPath?: string;\r\n};\r\n\r\nfunction discoverTemplates(templateRoots: string[]): DiscoveredTemplate[] {\r\n const discovered = new Map();\r\n for (const root of templateRoots) {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(root, { withFileTypes: true });\r\n } catch {\r\n continue;\r\n }\r\n\r\n for (const entry of entries) {\r\n if (!entry.isFile() || !entry.name.endsWith('.json')) continue;\r\n const slug = entry.name.replace(/\\.json$/i, '');\r\n if (discovered.has(slug)) continue;\r\n\r\n const jsonPath = path.join(root, `${slug}.json`);\r\n const mdPath = path.join(root, `${slug}.md`);\r\n if (!fs.existsSync(mdPath)) continue;\r\n\r\n const compactMdPath = path.join(root, `${slug}.compact.md`);\r\n discovered.set(slug, {\r\n slug,\r\n root,\r\n jsonPath,\r\n mdPath,\r\n compactMdPath: fs.existsSync(compactMdPath) ? compactMdPath : undefined,\r\n });\r\n }\r\n }\r\n\r\n return [...discovered.values()].sort((a, b) => a.slug.localeCompare(b.slug));\r\n}\r\n\r\nfunction getTemplateRoots(\r\n globalTemplateRoot: string,\r\n extensionPath: string,\r\n precedence: TemplatePrecedence,\r\n): string[] {\r\n const packaged = path.join(extensionPath, 'assets', 'agent-templates');\r\n const devFallback = path.resolve(extensionPath, '..', 'workspaces', 'agent-templates');\r\n const packagedRoot = fs.existsSync(packaged) ? packaged : fs.existsSync(devFallback) ? devFallback : undefined;\r\n\r\n const roots: string[] = [];\r\n if (precedence === 'global-first') {\r\n roots.push(globalTemplateRoot);\r\n if (packagedRoot) roots.push(packagedRoot);\r\n } else {\r\n if (packagedRoot) roots.push(packagedRoot);\r\n roots.push(globalTemplateRoot);\r\n }\r\n\r\n return roots.filter((value, index, arr) => arr.indexOf(value) === index);\r\n}\r\n\r\nfunction getGlobalTemplateRoot(configuredPath: string | undefined, context: vscode.ExtensionContext): string {\r\n if (configuredPath && configuredPath.trim().length > 0) {\r\n if (path.isAbsolute(configuredPath)) return configuredPath;\r\n const firstWorkspace = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;\r\n if (firstWorkspace) return path.resolve(firstWorkspace, configuredPath);\r\n return path.resolve(os.homedir(), configuredPath);\r\n }\r\n\r\n return path.join(context.globalStorageUri.fsPath, 'agent-templates');\r\n}\r\n\r\nfunction getSettings(): ExtensionSettings {\r\n const config = vscode.workspace.getConfiguration('aidev');\r\n const bootstrapApiPort = clampInt(config.get('bootstrap.apiPort', 5191), 1, 65535, 5191);\r\n const backendMaxAttempts = clampInt(config.get('backend.health.maxAttempts', 120), 1, 3600, 120);\r\n const backendRetryDelayMs = clampInt(config.get('backend.health.retryDelayMs', 1000), 100, 60000, 1000);\r\n const templatesPrecedenceRaw = config.get('templates.precedence', 'global-first');\r\n const templatesPrecedence: TemplatePrecedence = templatesPrecedenceRaw === 'packaged-first'\r\n ? 'packaged-first'\r\n : 'global-first';\r\n\r\n return {\r\n bootstrapEnabled: config.get('bootstrap.enabled', true),\r\n bootstrapApiPort,\r\n backendMaxAttempts,\r\n backendRetryDelayMs,\r\n templatesGlobalPath: config.get('templates.globalPath'),\r\n templatesPrecedence,\r\n };\r\n}\r\n\r\n\r\nfunction clampInt(value: number, min: number, max: number, fallback: number): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n return Math.min(max, Math.max(min, Math.round(value)));\r\n}\r\n\r\nfunction loadTemplatePartials(templateRoot: string): Record {\r\n const partials: Record = {};\r\n const sharedDir = path.join(templateRoot, 'shared');\r\n if (!fs.existsSync(sharedDir)) return partials;\r\n\r\n const files = fs.readdirSync(sharedDir, { withFileTypes: true });\r\n for (const entry of files) {\r\n if (!entry.isFile() || !entry.name.endsWith('.md')) continue;\r\n const key = `shared/${entry.name.replace(/\\.md$/i, '')}`;\r\n partials[key] = fs.readFileSync(path.join(sharedDir, entry.name), 'utf8');\r\n }\r\n return partials;\r\n}\r\n\r\nfunction readComposedTemplate(templatePath: string, partials: Record, templateSlug: string): string {\r\n const raw = fs.readFileSync(templatePath, 'utf8');\r\n return raw.replace(/\\{\\{>\\s*([^\\s}]+)\\s*\\}\\}/g, (_match, partialKey: string) => {\r\n const partial = partials[partialKey];\r\n if (partial === undefined) {\r\n log.warn(`Template '${templateSlug}' references unknown partial '${partialKey}'.`);\r\n return '';\r\n }\r\n return partial;\r\n });\r\n}\r\n\r\nfunction renderTemplate(content: string, name: string, slug: string): string {\r\n return content\r\n .replace(/\\{\\{\\s*name\\s*\\}\\}/g, name)\r\n .replace(/\\{\\{\\s*slug\\s*\\}\\}/g, slug);\r\n}\r\n\r\nfunction setDisconnectedPlaceholder(\r\n message: string,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n): void {\r\n agentsProvider.setPlaceholderMessage(message);\r\n messagesProvider.setPlaceholderMessage(message);\r\n decisionsProvider.setPlaceholderMessage(message);\r\n}\r\n\r\nfunction getActiveApiContext(): { api: StudioApiClient; projectSlug: string } | undefined {\r\n if (!activeApiClient || !activeProjectSlug) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n api: activeApiClient,\r\n projectSlug: activeProjectSlug,\r\n };\r\n}\r\n\r\nfunction detectGitHubRepo(workspaceFolderPath: string): GitHubRepoInfo | undefined {\r\n try {\r\n const raw = fs.readFileSync(path.join(workspaceFolderPath, '.git', 'config'), 'utf8');\r\n // Capture both the remote name and its URL\r\n const remotePattern = /\\[remote\\s+\"([^\"]+)\"\\][\\s\\S]*?url\\s*=\\s*([^\\r\\n]+)/g;\r\n const remotes = new Map();\r\n let match: RegExpExecArray | null;\r\n while ((match = remotePattern.exec(raw)) !== null) {\r\n const name = match[1].trim();\r\n const url = match[2].trim();\r\n const parsed = parseGitHubUrl(url);\r\n if (parsed) remotes.set(name, parsed);\r\n }\r\n // Prefer upstream (parent of a fork) so issues resolve to the canonical repo\r\n return remotes.get('upstream') ?? remotes.get('origin') ?? remotes.values().next().value;\r\n } catch {\r\n // no .git/config or not readable \u2014 not a git repo\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction parseGitHubUrl(url: string): GitHubRepoInfo | undefined {\r\n // HTTPS: https://github.com/owner/repo.git or https://github.com/owner/repo\r\n // SSH: git@github.com:owner/repo.git\r\n const m = /github\\.com[/:]([^/\\s]+)\\/([^/\\s.]+?)(?:\\.git)?$/.exec(url);\r\n if (m) return { owner: m[1], repo: m[2] };\r\n return undefined;\r\n}\r\n\r\nasync function connectBackend(\r\n context: vscode.ExtensionContext,\r\n config: ProjectConfig,\r\n workspaceFolderPath: string,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): Promise {\r\n const settings = getSettings();\r\n const binaryName = process.platform === 'win32' ? 'ai-dev-api.exe' : 'ai-dev-api';\r\n const binaryPath = path.join(context.extensionPath, 'bin', binaryName);\r\n const hasBundledBinary = fs.existsSync(binaryPath);\r\n const repoRoot = path.resolve(context.extensionPath, '..');\r\n const devApiProject = path.join(repoRoot, 'ai-dev.api', 'ai-dev.api.csproj');\r\n const useDevDotnetFallback = !hasBundledBinary && fs.existsSync(devApiProject);\r\n\r\n log.appendLine(`Binary: ${binaryPath} (exists: ${hasBundledBinary})`);\r\n if (useDevDotnetFallback) {\r\n log.appendLine(`Using dev backend fallback: dotnet run --project ${devApiProject} --no-launch-profile`);\r\n } else if (!hasBundledBinary) {\r\n log.warn('Bundled backend missing and no local ai-dev.api project found. Expecting external backend on configured port.');\r\n }\r\n\r\n backendManager = new BackendProcessManager(\r\n {\r\n binaryPath,\r\n port: config.apiPort,\r\n maxAttempts: settings.backendMaxAttempts,\r\n retryDelayMs: settings.backendRetryDelayMs,\r\n fallbackCommand: useDevDotnetFallback\r\n ? {\r\n binary: 'dotnet',\r\n args: ['run', '--project', devApiProject, '--no-launch-profile'],\r\n cwd: repoRoot,\r\n }\r\n : undefined,\r\n onOutput: (line, source) => {\r\n const msg = `[backend:${source}] ${line}`;\r\n if (source === 'stderr') log.warn(msg);\r\n else log.info(msg);\r\n },\r\n },\r\n (binary, args, options) => spawn(binary, args, {\r\n ...options,\r\n stdio: 'pipe',\r\n env: {\r\n ...process.env,\r\n WORKSPACE_ROOT: workspaceFolderPath,\r\n ASPNETCORE_URLS: `http://localhost:${config.apiPort}`,\r\n },\r\n }),\r\n async url => {\r\n const r = await fetch(url);\r\n log.appendLine(`Health check ${url} \u2192 ${r.status}`);\r\n return { ok: r.ok };\r\n },\r\n );\r\n\r\n statusBar?.setStarting();\r\n log.appendLine(`Waiting for backend on port ${config.apiPort}\u2026`);\r\n try {\r\n await backendManager.start();\r\n log.appendLine('Backend ready.');\r\n } catch (e) {\r\n log.appendLine(`Backend failed: ${e}`);\r\n statusBar?.setDisconnected();\r\n vscode.window.showErrorMessage('AI Dev Studio: backend failed to start. See Output > AI Dev Studio.');\r\n return;\r\n }\r\n\r\n const baseUrl = `http://localhost:${config.apiPort}`;\r\n const api = new StudioApiClient(baseUrl);\r\n activeApiClient = api;\r\n activeProjectSlug = config.projectSlug;\r\n\r\n signalRClient = new StudioSignalRClient(`${baseUrl}/hubs/project`);\r\n signalRClient.onConnectionStateChanged(state => {\r\n log.appendLine(`SignalR: ${state}`);\r\n if (state === 'connected') statusBar?.setRunning();\r\n else if (state === 'connecting') statusBar?.setStarting();\r\n else statusBar?.setDisconnected();\r\n });\r\n\r\n try {\r\n await signalRClient.start(config.projectSlug);\r\n log.appendLine('SignalR connected.');\r\n } catch (e) {\r\n log.appendLine(`SignalR failed (non-fatal, REST still works): ${e}`);\r\n }\r\n\r\n statusBar?.setRunning();\r\n\r\n // Wire up the already-registered providers with live API + SignalR\r\n const gitHubRepo = detectGitHubRepo(workspaceFolderPath);\r\n if (gitHubRepo) {\r\n log.appendLine(`GitHub repo detected: ${gitHubRepo.owner}/${gitHubRepo.repo}`);\r\n }\r\n\r\n agentsProvider.connect(config.projectSlug, api, signalRClient);\r\n messagesProvider.connect(config.projectSlug, api, signalRClient);\r\n decisionsProvider.connect(config.projectSlug, api, signalRClient);\r\n kanbanProvider.connect(config.projectSlug, api, signalRClient, workspaceFolderPath, gitHubRepo);\r\n log.appendLine('Panels connected.');\r\n}\r\n\r\nasync function teardown(\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): Promise {\r\n log?.appendLine('Tearing down.');\r\n await signalRClient?.stop();\r\n signalRClient = undefined;\r\n activeApiClient = undefined;\r\n activeProjectSlug = undefined;\r\n backendManager?.stop();\r\n backendManager = undefined;\r\n statusBar?.setDisconnected();\r\n agentsProvider.disconnect();\r\n messagesProvider.disconnect();\r\n decisionsProvider.disconnect();\r\n kanbanProvider.disconnect();\r\n}\r\n\r\nexport function deactivate(): void {\r\n log?.appendLine('Deactivating.');\r\n backendManager?.stop();\r\n void signalRClient?.stop();\r\n}\r\n", "import { EventEmitter } from 'events';\r\nimport * as path from 'path';\r\nimport { DetectedProject, ProjectConfig } from './types';\r\n\r\nexport interface FileWatcherLike {\r\n onCreated(handler: (filePath: string) => void): void;\r\n onDeleted(handler: (filePath: string) => void): void;\r\n dispose(): void;\r\n}\r\n\r\nexport type WatcherFactory = (glob: string) => FileWatcherLike;\r\nexport type FileReader = (filePath: string) => string | undefined;\r\n\r\nexport declare interface WorkspaceDetector {\r\n on(event: 'projectDetected', listener: (project: DetectedProject) => void): this;\r\n on(event: 'projectRemoved', listener: (workspaceFolderPath: string) => void): this;\r\n emit(event: 'projectDetected', project: DetectedProject): boolean;\r\n emit(event: 'projectRemoved', workspaceFolderPath: string): boolean;\r\n}\r\n\r\nexport class WorkspaceDetector extends EventEmitter {\r\n private watcher?: FileWatcherLike;\r\n\r\n constructor(\r\n private readonly createWatcher: WatcherFactory,\r\n private readonly readFile: FileReader,\r\n ) {\r\n super();\r\n }\r\n\r\n start(workspacePaths: string[]): void {\r\n for (const wsPath of workspacePaths) {\r\n const configPath = path.join(wsPath, '.ai-dev', 'project.json');\r\n this.tryEmitDetected(configPath, wsPath);\r\n }\r\n\r\n this.watcher = this.createWatcher('**/.ai-dev/project.json');\r\n this.watcher.onCreated(filePath => {\r\n const wsPath = this.resolveWorkspacePath(filePath, workspacePaths);\r\n if (wsPath) this.tryEmitDetected(filePath, wsPath);\r\n });\r\n this.watcher.onDeleted(filePath => {\r\n const wsPath = this.resolveWorkspacePath(filePath, workspacePaths);\r\n if (wsPath) this.emit('projectRemoved', wsPath);\r\n });\r\n }\r\n\r\n private tryEmitDetected(filePath: string, workspaceFolderPath: string): void {\r\n const raw = this.readFile(filePath);\r\n if (!raw) return;\r\n try {\r\n const config = parseProjectConfig(JSON.parse(raw) as Record);\r\n if (config) {\r\n this.emit('projectDetected', { config, workspaceFolderPath });\r\n }\r\n } catch {\r\n // malformed JSON \u2014 skip silently\r\n }\r\n }\r\n\r\n private resolveWorkspacePath(filePath: string, workspacePaths: string[]): string | undefined {\r\n const normalised = filePath.replace(/\\\\/g, '/');\r\n return workspacePaths.find(ws => {\r\n const normWs = ws.replace(/\\\\/g, '/');\r\n return normalised.startsWith(normWs + '/');\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.watcher?.dispose();\r\n }\r\n}\r\n\r\nfunction parseProjectConfig(parsed: Record): ProjectConfig | undefined {\r\n const projectSlug = firstNonEmptyString(parsed.projectSlug, parsed.slug, parsed.projectId);\r\n const apiPort = firstPositiveNumber(parsed.apiPort, parsed.port);\r\n\r\n if (!projectSlug || !apiPort) {\r\n return undefined;\r\n }\r\n\r\n return { projectSlug, apiPort };\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value !== 'string') continue;\r\n const trimmed = value.trim();\r\n if (trimmed) return trimmed;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction firstPositiveNumber(...values: unknown[]): number | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === 'string') {\r\n const candidate = Number(value.trim());\r\n if (Number.isFinite(candidate) && candidate > 0) {\r\n return Math.trunc(candidate);\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n", "export type FileExistsFn = (path: string) => boolean;\r\n\r\nexport type ProcessLike = {\r\n kill(): void;\r\n on(event: 'exit', handler: (code: number | null) => void): void;\r\n on(event: 'error', handler: (err: Error) => void): void;\r\n stdout?: NodeJS.ReadableStream | null;\r\n stderr?: NodeJS.ReadableStream | null;\r\n};\r\n\r\nexport type Spawner = (\r\n binary: string,\r\n args: string[],\r\n options: { env?: NodeJS.ProcessEnv; cwd?: string },\r\n) => ProcessLike;\r\n\r\nexport type Fetcher = (url: string) => Promise<{ ok: boolean }>;\r\n\r\nexport type BackendState = 'not-started' | 'starting' | 'ready' | 'stopped';\r\n\r\nexport interface BackendProcessManagerOptions {\r\n binaryPath: string;\r\n port: number;\r\n maxAttempts: number;\r\n retryDelayMs: number;\r\n onOutput?: (line: string, source: 'stdout' | 'stderr') => void;\r\n fallbackCommand?: {\r\n binary: string;\r\n args: string[];\r\n cwd?: string;\r\n };\r\n}\r\n\r\nexport class BackendProcessManager {\r\n private _state: BackendState = 'not-started';\r\n private _process?: ProcessLike;\r\n\r\n constructor(\r\n private readonly options: BackendProcessManagerOptions,\r\n private readonly spawner: Spawner,\r\n private readonly fetcher: Fetcher,\r\n private readonly delay: (ms: number) => Promise = ms =>\r\n new Promise(resolve => setTimeout(resolve, ms)),\r\n private readonly fileExists: FileExistsFn = p => {\r\n try { require('fs').accessSync(p); return true; } catch { return false; }\r\n },\r\n ) {}\r\n\r\n get state(): BackendState {\r\n return this._state;\r\n }\r\n\r\n async start(): Promise {\r\n if (this._state !== 'not-started') return;\r\n this._state = 'starting';\r\n\r\n const hasBundledBinary = this.fileExists(this.options.binaryPath);\r\n if (hasBundledBinary) {\r\n this._process = this.spawner(this.options.binaryPath, [], {});\r\n } else if (this.options.fallbackCommand) {\r\n this._process = this.spawner(\r\n this.options.fallbackCommand.binary,\r\n this.options.fallbackCommand.args,\r\n { cwd: this.options.fallbackCommand.cwd },\r\n );\r\n }\r\n\r\n if (this._process) {\r\n this._process.on('exit', () => {\r\n if (this._state !== 'stopped') this._state = 'stopped';\r\n });\r\n this._process.on('error', () => {\r\n if (this._state !== 'stopped') this._state = 'stopped';\r\n });\r\n\r\n if (this.options.onOutput) {\r\n const { createInterface } = require('readline') as typeof import('readline');\r\n if (this._process.stdout) {\r\n createInterface({ input: this._process.stdout }).on('line', (line: string) => {\r\n this.options.onOutput!(line, 'stdout');\r\n });\r\n }\r\n if (this._process.stderr) {\r\n createInterface({ input: this._process.stderr }).on('line', (line: string) => {\r\n this.options.onOutput!(line, 'stderr');\r\n });\r\n }\r\n }\r\n }\r\n\r\n const healthUrl = `http://localhost:${this.options.port}/api/health`;\r\n for (let attempt = 0; attempt < this.options.maxAttempts; attempt++) {\r\n try {\r\n const res = await this.fetcher(healthUrl);\r\n if (res.ok) {\r\n this._state = 'ready';\r\n return;\r\n }\r\n } catch {\r\n // backend not ready yet\r\n }\r\n await this.delay(this.options.retryDelayMs);\r\n }\r\n\r\n if (this._process) {\r\n try { this._process.kill(); } catch { }\r\n }\r\n this._state = 'stopped';\r\n throw new Error(\r\n `AI Dev backend did not become healthy after ${this.options.maxAttempts} attempts`,\r\n );\r\n }\r\n\r\n stop(): void {\r\n if (this._state === 'stopped' || this._state === 'not-started') return;\r\n if (this._process) {\r\n try { this._process.kill(); } catch { }\r\n }\r\n this._state = 'stopped';\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\n\r\nexport class StatusBarManager {\r\n private readonly item: vscode.StatusBarItem;\r\n\r\n constructor() {\r\n this.item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);\r\n this.item.command = 'aidev.restartBackend';\r\n this.setDisconnected();\r\n this.item.show();\r\n }\r\n\r\n setRunning(): void {\r\n this.item.text = '$(check) AI Dev: Running';\r\n this.item.tooltip = 'AI Dev Studio backend is running. Click to restart.';\r\n this.item.backgroundColor = undefined;\r\n }\r\n\r\n setStarting(): void {\r\n this.item.text = '$(loading~spin) AI Dev: Starting';\r\n this.item.tooltip = 'AI Dev Studio backend is starting...';\r\n this.item.backgroundColor = undefined;\r\n }\r\n\r\n setDisconnected(): void {\r\n this.item.text = '$(x) AI Dev: Disconnected';\r\n this.item.tooltip = 'AI Dev Studio backend is not running. Click to retry.';\r\n this.item.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');\r\n }\r\n\r\n dispose(): void {\r\n this.item.dispose();\r\n }\r\n}\r\n", "export type { AgentSummary, MessageItem, DecisionItem, BoardData, BoardTaskItem } from './types';\r\nimport type { AgentSummary, MessageItem, DecisionItem, BoardData, BoardTaskItem } from './types';\r\n\r\nexport type Fetcher = (url: string, init?: RequestInit) => Promise;\r\n\r\nexport class StudioApiClient {\r\n constructor(\r\n private readonly baseUrl: string,\r\n private readonly fetcher: Fetcher = (url, init) => fetch(url, init),\r\n ) {}\r\n\r\n // \u2500\u2500 Agents \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listAgents(projectSlug: string): Promise {\r\n return this.get(`/api/agents?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async runAgent(projectSlug: string, agentSlug: string): Promise {\r\n await this.post(`/api/agents/${enc(agentSlug)}/run?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async stopAgent(projectSlug: string, agentSlug: string): Promise {\r\n await this.post(`/api/agents/${enc(agentSlug)}/stop?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n // \u2500\u2500 Messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listMessages(projectSlug: string, agentSlug?: string, processed?: boolean): Promise {\r\n let url = `/api/messages?projectSlug=${enc(projectSlug)}`;\r\n if (agentSlug) url += `&agentSlug=${enc(agentSlug)}`;\r\n if (processed !== undefined) url += `&processed=${processed}`;\r\n return this.get(url);\r\n }\r\n\r\n async listAllMessages(projectSlug: string): Promise {\r\n const agents = await this.listAgents(projectSlug);\r\n const perAgent = await Promise.all(\r\n agents.map(a =>\r\n this.listMessages(projectSlug, a.slug, false)\r\n .then(msgs => msgs.map(m => ({ ...m, agentSlug: a.slug }))),\r\n ),\r\n );\r\n return perAgent.flat();\r\n }\r\n\r\n async processMessage(projectSlug: string, agentSlug: string, fileName: string): Promise {\r\n await this.post(\r\n `/api/messages/${enc(fileName)}/process?projectSlug=${enc(projectSlug)}&agentSlug=${enc(agentSlug)}`,\r\n );\r\n }\r\n\r\n // \u2500\u2500 Decisions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listDecisions(projectSlug: string, status?: string): Promise {\r\n let url = `/api/decisions?projectSlug=${enc(projectSlug)}`;\r\n if (status) url += `&status=${enc(status)}`;\r\n return this.get(url);\r\n }\r\n\r\n async resolveDecision(projectSlug: string, decisionId: string, resolution: string): Promise {\r\n await this.post(`/api/decisions/${enc(decisionId)}/resolve?projectSlug=${enc(projectSlug)}`, {\r\n resolution,\r\n });\r\n }\r\n\r\n // \u2500\u2500 Board \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async getBoard(projectSlug: string): Promise {\r\n return this.get(`/api/board?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async createBoardTask(\r\n projectSlug: string,\r\n request: {\r\n columnId: string;\r\n title: string;\r\n description?: string;\r\n priority?: string;\r\n assignee?: string;\r\n tags?: string[];\r\n },\r\n ): Promise {\r\n return this.postJson(`/api/board/tasks?projectSlug=${enc(projectSlug)}`, request);\r\n }\r\n\r\n async updateBoardTask(\r\n projectSlug: string,\r\n taskId: string,\r\n request: {\r\n columnId: string;\r\n title: string;\r\n description?: string;\r\n priority?: string;\r\n assignee?: string;\r\n tags?: string[];\r\n },\r\n ): Promise {\r\n return this.postJson(`/api/board/tasks/${enc(taskId)}?projectSlug=${enc(projectSlug)}`, request);\r\n }\r\n\r\n async deleteBoardTask(projectSlug: string, taskId: string): Promise {\r\n await this.del(`/api/board/tasks/${enc(taskId)}?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n // \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async get(path: string): Promise {\r\n const res = await this.fetcher(this.baseUrl + path);\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n return res.json() as Promise;\r\n }\r\n\r\n private async post(path: string, body?: unknown): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'POST',\r\n headers: body ? { 'Content-Type': 'application/json' } : undefined,\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n }\r\n\r\n private async postJson(path: string, body: unknown): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n return res.json() as Promise;\r\n }\r\n\r\n private async del(path: string): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'DELETE',\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n }\r\n}\r\n\r\nfunction enc(value: string): string {\r\n return encodeURIComponent(value);\r\n}\r\n\r\nexport class ApiError extends Error {\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly path: string,\r\n ) {\r\n super(`API error ${statusCode} for ${path}`);\r\n this.name = 'ApiError';\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport {\r\n HubConnection,\r\n HubConnectionBuilder,\r\n HubConnectionState,\r\n LogLevel,\r\n} from '@microsoft/signalr';\r\n\r\nexport type ConnectionState = 'disconnected' | 'connecting' | 'connected';\r\n\r\nexport interface StateChangedMessage {\r\n projectSlug: string;\r\n kinds: string[];\r\n}\r\n\r\nexport interface HubConnectionFactory {\r\n build(url: string): HubConnection;\r\n}\r\n\r\nconst defaultFactory: HubConnectionFactory = {\r\n build: url =>\r\n new HubConnectionBuilder()\r\n .withUrl(url)\r\n .withAutomaticReconnect({\r\n nextRetryDelayInMilliseconds: ctx => {\r\n const base = Math.min(1000 * 2 ** ctx.previousRetryCount, 30_000);\r\n return base + Math.random() * 1000;\r\n },\r\n })\r\n .configureLogging(LogLevel.Warning)\r\n .build(),\r\n};\r\n\r\nexport class StudioSignalRClient {\r\n private connection?: HubConnection;\r\n private projectSlug?: string;\r\n\r\n private readonly _onConnectionStateChanged = new vscode.EventEmitter();\r\n private readonly _onAgentsChanged = new vscode.EventEmitter();\r\n private readonly _onMessagesChanged = new vscode.EventEmitter();\r\n private readonly _onDecisionsChanged = new vscode.EventEmitter();\r\n private readonly _onBoardChanged = new vscode.EventEmitter();\r\n\r\n readonly onConnectionStateChanged = this._onConnectionStateChanged.event;\r\n readonly onAgentsChanged = this._onAgentsChanged.event;\r\n readonly onMessagesChanged = this._onMessagesChanged.event;\r\n readonly onDecisionsChanged = this._onDecisionsChanged.event;\r\n readonly onBoardChanged = this._onBoardChanged.event;\r\n\r\n private _connectionState: ConnectionState = 'disconnected';\r\n\r\n constructor(\r\n private readonly hubUrl: string,\r\n private readonly factory: HubConnectionFactory = defaultFactory,\r\n ) {}\r\n\r\n get connectionState(): ConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n async start(projectSlug: string): Promise {\r\n this.projectSlug = projectSlug;\r\n this.connection = this.factory.build(this.hubUrl);\r\n\r\n this.connection.onreconnecting(() => this.setState('connecting'));\r\n this.connection.onreconnected(() => this.setState('connected'));\r\n this.connection.onclose(() => this.setState('disconnected'));\r\n\r\n this.connection.on('StateChanged', (msg: StateChangedMessage) => {\r\n if (msg.projectSlug !== this.projectSlug) return;\r\n const kinds = msg.kinds.map(k => k.toLowerCase());\r\n if (kinds.includes('agents')) this._onAgentsChanged.fire();\r\n if (kinds.includes('messages')) this._onMessagesChanged.fire();\r\n if (kinds.includes('decisions')) this._onDecisionsChanged.fire();\r\n if (kinds.includes('board')) {\r\n this._onBoardChanged.fire();\r\n this._onAgentsChanged.fire(); // board changes affect agent views\r\n }\r\n });\r\n\r\n this.setState('connecting');\r\n await this.connection.start();\r\n await this.connection.invoke('JoinProject', projectSlug);\r\n this.setState('connected');\r\n }\r\n\r\n async stop(): Promise {\r\n if (this.connection?.state === HubConnectionState.Connected) {\r\n try { await this.connection.invoke('LeaveProject', this.projectSlug); } catch { }\r\n }\r\n await this.connection?.stop();\r\n this.setState('disconnected');\r\n }\r\n\r\n dispose(): void {\r\n this._onConnectionStateChanged.dispose();\r\n this._onAgentsChanged.dispose();\r\n this._onMessagesChanged.dispose();\r\n this._onDecisionsChanged.dispose();\r\n this._onBoardChanged.dispose();\r\n void this.connection?.stop();\r\n }\r\n\r\n private setState(state: ConnectionState): void {\r\n if (this._connectionState === state) return;\r\n this._connectionState = state;\r\n this._onConnectionStateChanged.fire(state);\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport * as crypto from 'crypto';\r\nimport { StudioApiClient } from '../StudioApiClient';\r\nimport { StudioSignalRClient } from '../StudioSignalRClient';\r\n\r\nexport abstract class BasePanelProvider implements vscode.WebviewViewProvider {\r\n protected view?: vscode.WebviewView;\r\n protected projectSlug?: string;\r\n protected workspaceFolderPath?: string;\r\n protected api?: StudioApiClient;\r\n protected signalR?: StudioSignalRClient;\r\n private connectionDisposables: vscode.Disposable[] = [];\r\n private placeholderMessage = 'Waiting for AI Dev Studio backend...';\r\n\r\n constructor(\r\n protected readonly viewId: string,\r\n protected readonly extensionUri: vscode.Uri,\r\n protected readonly webviewScript: string,\r\n ) {}\r\n\r\n resolveWebviewView(webviewView: vscode.WebviewView): void {\r\n this.view = webviewView;\r\n if (this.api) {\r\n this.enableScripts(webviewView);\r\n this.wireUp(webviewView);\r\n } else {\r\n webviewView.webview.options = { enableScripts: false };\r\n webviewView.webview.html = this.buildPlaceholderHtml();\r\n }\r\n }\r\n\r\n connect(projectSlug: string, api: StudioApiClient, signalR: StudioSignalRClient, workspaceFolderPath?: string): void {\r\n this.projectSlug = projectSlug;\r\n this.workspaceFolderPath = workspaceFolderPath;\r\n this.api = api;\r\n this.signalR = signalR;\r\n if (this.view) {\r\n this.enableScripts(this.view);\r\n this.wireUp(this.view);\r\n }\r\n }\r\n\r\n setPlaceholderMessage(message: string): void {\r\n this.placeholderMessage = message;\r\n if (this.view && !this.api) {\r\n this.view.webview.options = { enableScripts: false };\r\n this.view.webview.html = this.buildPlaceholderHtml();\r\n }\r\n }\r\n\r\n private enableScripts(webviewView: vscode.WebviewView): void {\r\n webviewView.webview.options = {\r\n enableScripts: true,\r\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\r\n };\r\n webviewView.webview.html = this.buildHtml(webviewView.webview);\r\n }\r\n\r\n disconnect(): void {\r\n for (const d of this.connectionDisposables) d.dispose();\r\n this.connectionDisposables = [];\r\n this.projectSlug = undefined;\r\n this.workspaceFolderPath = undefined;\r\n this.api = undefined;\r\n this.signalR = undefined;\r\n this.send({ type: 'loading' });\r\n }\r\n\r\n protected send(message: unknown): void {\r\n this.view?.webview.postMessage(message);\r\n }\r\n\r\n private wireUp(view: vscode.WebviewView): void {\r\n for (const d of this.connectionDisposables) d.dispose();\r\n this.connectionDisposables = [];\r\n this.onConnected(view, this.connectionDisposables);\r\n }\r\n\r\n protected abstract onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void;\r\n\r\n private buildPlaceholderHtml(): string {\r\n return `\r\n\r\n

${this.placeholderMessage}

`;\r\n }\r\n\r\n private buildHtml(webview: vscode.Webview): string {\r\n const nonce = crypto.randomBytes(16).toString('hex');\r\n const scriptUri = webview.asWebviewUri(\r\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', this.webviewScript),\r\n );\r\n return `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n\r\n`;\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromAgentsWebview } from '../webviews/shared/protocol';\r\n\r\nexport class AgentsPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.agents', extensionUri, 'agents/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onAgentsChanged(() => {\r\n if (webviewReady) void this.refresh();\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromAgentsWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh();\r\n } else if (msg.type === 'run') {\r\n await this.api!.runAgent(this.projectSlug!, msg.agentSlug);\r\n } else if (msg.type === 'stop') {\r\n await this.api!.stopAgent(this.projectSlug!, msg.agentSlug);\r\n }\r\n if (msg.type !== 'ready') {\r\n await this.refresh();\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listAgents(this.projectSlug!);\r\n this.send({ type: 'agents', data });\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load agents: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromMessagesWebview } from '../webviews/shared/protocol';\r\n\r\nexport class MessagesPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.messages', extensionUri, 'messages/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onMessagesChanged(() => {\r\n if (webviewReady) void this.refresh(view);\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromMessagesWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh(view);\r\n } else if (msg.type === 'process') {\r\n await this.api!.processMessage(this.projectSlug!, msg.agentSlug, msg.fileName);\r\n await this.refresh(view);\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(view: vscode.WebviewView): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listAllMessages(this.projectSlug!);\r\n this.send({ type: 'messages', data });\r\n view.badge = data.length > 0\r\n ? { value: data.length, tooltip: `${data.length} unprocessed message(s)` }\r\n : undefined;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load messages: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromDecisionsWebview } from '../webviews/shared/protocol';\r\n\r\nexport class DecisionsPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.decisions', extensionUri, 'decisions/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onDecisionsChanged(() => {\r\n if (webviewReady) void this.refresh(view);\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromDecisionsWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh(view);\r\n } else if (msg.type === 'resolve') {\r\n await this.api!.resolveDecision(this.projectSlug!, msg.decisionId, msg.resolution);\r\n await this.refresh(view);\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(view: vscode.WebviewView): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listDecisions(this.projectSlug!, 'pending');\r\n this.send({ type: 'decisions', data });\r\n view.badge = data.length > 0\r\n ? { value: data.length, tooltip: `${data.length} pending decision(s)` }\r\n : undefined;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load decisions: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport * as crypto from 'crypto';\r\nimport type { Logger } from '../Logger';\r\n\r\nexport class LogsPanelProvider implements vscode.WebviewViewProvider, vscode.Disposable {\r\n private view?: vscode.WebviewView;\r\n private readonly disposables: vscode.Disposable[] = [];\r\n\r\n constructor(\r\n private readonly extensionUri: vscode.Uri,\r\n private readonly logger: Logger,\r\n ) {}\r\n\r\n resolveWebviewView(webviewView: vscode.WebviewView): void {\r\n this.view = webviewView;\r\n\r\n webviewView.webview.options = {\r\n enableScripts: true,\r\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\r\n };\r\n webviewView.webview.html = this.buildHtml(webviewView.webview);\r\n\r\n // Send buffered history when the view first opens or becomes visible again.\r\n webviewView.onDidChangeVisibility(() => {\r\n if (webviewView.visible) this.sendHistory();\r\n }, undefined, this.disposables);\r\n\r\n this.sendHistory();\r\n\r\n // Stream new log entries to the webview.\r\n this.disposables.push(\r\n this.logger.subscribe(entry => {\r\n webviewView.webview.postMessage({ type: 'entry', entry });\r\n }),\r\n );\r\n\r\n // When logger buffer is cleared, notify the webview.\r\n this.disposables.push(\r\n this.logger.onCleared(() => {\r\n webviewView.webview.postMessage({ type: 'cleared' });\r\n }),\r\n );\r\n\r\n // Handle clear command from the webview.\r\n this.disposables.push(\r\n webviewView.webview.onDidReceiveMessage(msg => {\r\n if (msg.type === 'clear') this.logger.clearBuffer();\r\n if (msg.type === 'ready') this.sendHistory();\r\n }),\r\n );\r\n }\r\n\r\n private sendHistory(): void {\r\n this.view?.webview.postMessage({ type: 'history', entries: this.logger.getHistory() });\r\n }\r\n\r\n dispose(): void {\r\n for (const d of this.disposables) d.dispose();\r\n }\r\n\r\n private buildHtml(webview: vscode.Webview): string {\r\n const nonce = crypto.randomBytes(16).toString('hex');\r\n const scriptUri = webview.asWebviewUri(\r\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', 'logs/main.js'),\r\n );\r\n return `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n\r\n`;\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\nimport * as crypto from 'crypto';\nimport { BasePanelProvider } from './BasePanelProvider';\nimport { StudioApiClient } from '../StudioApiClient';\nimport { StudioSignalRClient } from '../StudioSignalRClient';\nimport { GitHubBoardClient } from '../GitHubBoardClient';\nimport type { BoardData, GitHubRepoInfo } from '../types';\nimport type { FromKanbanWebview } from '../webviews/shared/protocol';\n\nconst SCOPES_ISSUES_ONLY = ['repo'];\nconst SCOPES_WITH_PROJECTS = ['repo', 'project'];\n\nexport class KanbanPanelProvider extends BasePanelProvider {\n private static readonly backlogColumnId = 'backlog';\n private editorPanel?: vscode.WebviewPanel;\n private editorDisposables: vscode.Disposable[] = [];\n private currentBoard?: BoardData;\n private gitHubRepo?: GitHubRepoInfo;\n private cachedGitHubClient?: GitHubBoardClient;\n\n constructor(extensionUri: vscode.Uri) {\n super('ai-dev-studio.kanban', extensionUri, 'kanban/main.js');\n }\n\n openEditor(): void {\n if (this.editorPanel) {\n this.editorPanel.reveal(vscode.ViewColumn.Active, true);\n return;\n }\n\n const panel = vscode.window.createWebviewPanel(\n 'aidev.boardEditor',\n 'AI Dev Board',\n { viewColumn: vscode.ViewColumn.Active, preserveFocus: false },\n {\n enableScripts: true,\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\n retainContextWhenHidden: true,\n },\n );\n\n this.editorPanel = panel;\n panel.webview.html = this.buildPanelHtml(panel.webview);\n\n const onDispose = panel.onDidDispose(() => {\n onDispose.dispose();\n this.disposeEditorConnections();\n this.editorPanel = undefined;\n });\n\n if (this.api) {\n this.wireEditorPanel(panel);\n } else {\n panel.webview.html = this.buildPlaceholderHtml();\n }\n }\n\n override connect(\n projectSlug: string,\n api: StudioApiClient,\n signalR: StudioSignalRClient,\n workspaceFolderPath?: string,\n gitHubRepo?: GitHubRepoInfo,\n ): void {\n this.gitHubRepo = gitHubRepo;\n this.cachedGitHubClient = undefined; // reset on reconnect\n super.connect(projectSlug, api, signalR, workspaceFolderPath);\n if (this.editorPanel) {\n this.editorPanel.webview.html = this.buildPanelHtml(this.editorPanel.webview);\n this.wireEditorPanel(this.editorPanel);\n }\n }\n\n override disconnect(): void {\n this.gitHubRepo = undefined;\n this.cachedGitHubClient = undefined;\n this.disposeEditorConnections();\n if (this.editorPanel) {\n this.editorPanel.webview.html = this.buildPlaceholderHtml();\n }\n super.disconnect();\n }\n\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\n let webviewReady = false;\n\n disposables.push(this.signalR!.onBoardChanged(() => {\n if (webviewReady) {\n void this.refresh(view);\n }\n }));\n\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromKanbanWebview) => {\n try {\n if (msg.type === 'ready') {\n webviewReady = true;\n await this.refresh(view);\n return;\n }\n\n if (msg.type === 'refresh') {\n await this.refresh(view);\n return;\n }\n\n if (msg.type === 'githubSignIn') {\n this.cachedGitHubClient = undefined;\n await this.refreshWithGitHubAuth(view, true);\n return;\n }\n\n await this.handleAction(msg);\n await this.refresh(view);\n } catch (e) {\n this.send({ type: 'error', message: String(e) });\n }\n }));\n }\n\n protected override send(message: unknown): void {\n super.send(message);\n this.editorPanel?.webview.postMessage(message);\n }\n\n private wireEditorPanel(panel: vscode.WebviewPanel): void {\n this.disposeEditorConnections();\n\n let webviewReady = false;\n\n this.editorDisposables.push(this.signalR!.onBoardChanged(() => {\n if (webviewReady) {\n void this.refreshPanel(panel);\n }\n }));\n\n this.editorDisposables.push(panel.webview.onDidReceiveMessage(async (msg: FromKanbanWebview) => {\n try {\n if (msg.type === 'ready') {\n webviewReady = true;\n await this.refreshPanel(panel);\n return;\n }\n\n if (msg.type === 'refresh') {\n await this.refreshPanel(panel);\n return;\n }\n\n if (msg.type === 'githubSignIn') {\n this.cachedGitHubClient = undefined;\n await this.refreshPanelWithGitHubAuth(panel, true);\n return;\n }\n\n await this.handleAction(msg);\n await this.refreshPanel(panel);\n } catch (e) {\n this.send({ type: 'error', message: String(e) });\n }\n }));\n }\n\n private async refresh(view: vscode.WebviewView): Promise {\n if (this.gitHubRepo) {\n await this.refreshWithGitHubAuth(view, false);\n return;\n }\n\n this.send({ type: 'loading' });\n try {\n const board = await this.loadLocalBoard();\n this.send({ type: 'board', data: board });\n view.badge = board.columns.length > 0\n ? { value: Object.keys(board.tasks).length, tooltip: 'Board task count' }\n : undefined;\n } catch (e) {\n this.send({ type: 'error', message: `Failed to load board: ${e}` });\n }\n }\n\n private async refreshWithGitHubAuth(view: vscode.WebviewView, forcePrompt: boolean): Promise {\n if (!this.gitHubRepo) return;\n\n this.send({ type: 'loading' });\n try {\n const client = await this.getGitHubClient(forcePrompt);\n if (!client) {\n this.send({\n type: 'github-sign-in-required',\n owner: this.gitHubRepo.owner,\n repo: this.gitHubRepo.repo,\n });\n return;\n }\n\n const board = await client.getBoard();\n this.currentBoard = board;\n this.send({ type: 'board', data: board, githubRepo: `${this.gitHubRepo.owner}/${this.gitHubRepo.repo}` });\n view.badge = { value: Object.keys(board.tasks).length, tooltip: 'GitHub Issues' };\n } catch (e) {\n this.send({ type: 'error', message: `Failed to load GitHub Issues: ${e}` });\n }\n }\n\n private async refreshPanel(panel: vscode.WebviewPanel): Promise {\n if (this.gitHubRepo) {\n await this.refreshPanelWithGitHubAuth(panel, false);\n return;\n }\n\n this.send({ type: 'loading' });\n try {\n const board = await this.loadLocalBoard();\n this.send({ type: 'board', data: board });\n panel.title = `AI Dev Board (${Object.keys(board.tasks).length})`;\n } catch (e) {\n this.send({ type: 'error', message: `Failed to load board: ${e}` });\n }\n }\n\n private async refreshPanelWithGitHubAuth(panel: vscode.WebviewPanel, forcePrompt: boolean): Promise {\n if (!this.gitHubRepo) return;\n\n this.send({ type: 'loading' });\n try {\n const client = await this.getGitHubClient(forcePrompt);\n if (!client) {\n this.send({\n type: 'github-sign-in-required',\n owner: this.gitHubRepo.owner,\n repo: this.gitHubRepo.repo,\n });\n return;\n }\n\n const board = await client.getBoard();\n this.currentBoard = board;\n this.send({ type: 'board', data: board, githubRepo: `${this.gitHubRepo.owner}/${this.gitHubRepo.repo}` });\n panel.title = `AI Dev Board \u2014 ${this.gitHubRepo.owner}/${this.gitHubRepo.repo} (${Object.keys(board.tasks).length})`;\n } catch (e) {\n this.send({ type: 'error', message: `Failed to load GitHub Issues: ${e}` });\n }\n }\n\n private async getGitHubClient(createIfNone: boolean): Promise {\n if (!this.gitHubRepo) return undefined;\n if (this.cachedGitHubClient) return this.cachedGitHubClient;\n\n let session: vscode.AuthenticationSession | undefined;\n\n try {\n // Try with project scopes silently first \u2014 enables linked-project auto-discovery\n session = await vscode.authentication.getSession('github', SCOPES_WITH_PROJECTS, { silent: true }) ?? undefined;\n if (!session) {\n // Fall back to repo-only \u2014 issues still load, project status sync skipped\n session = await vscode.authentication.getSession('github', SCOPES_ISSUES_ONLY, { silent: true }) ?? undefined;\n }\n if (!session && createIfNone) {\n session = await vscode.authentication.getSession('github', SCOPES_WITH_PROJECTS, { createIfNone: true }) ?? undefined;\n }\n if (!session) return undefined;\n\n this.cachedGitHubClient = new GitHubBoardClient(\n this.gitHubRepo.owner,\n this.gitHubRepo.repo,\n session.accessToken,\n );\n return this.cachedGitHubClient;\n } catch {\n return undefined;\n }\n }\n\n private disposeEditorConnections(): void {\n for (const disposable of this.editorDisposables) {\n disposable.dispose();\n }\n this.editorDisposables = [];\n }\n\n private buildPlaceholderHtml(): string {\n return `\n\n

Waiting for AI Dev Studio backend...

`;\n }\n\n private buildPanelHtml(webview: vscode.Webview): string {\n const nonce = crypto.randomBytes(16).toString('hex');\n const scriptUri = webview.asWebviewUri(\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', 'kanban/main.js'),\n );\n\n return `\n\n\n \n \n \n \n\n\n
\n \n\n`;\n }\n\n private async loadLocalBoard(): Promise {\n if (!this.api || !this.projectSlug) {\n throw new Error('Board API is not connected.');\n }\n\n const board = await this.api.getBoard(this.projectSlug);\n this.currentBoard = board;\n return board;\n }\n\n private async handleAction(msg: Exclude): Promise {\n if (this.gitHubRepo) {\n await this.handleGitHubAction(msg);\n return;\n }\n\n await this.handleLocalAction(msg);\n }\n\n private async handleGitHubAction(\n msg: Exclude,\n ): Promise {\n const client = await this.getGitHubClient(false);\n if (!client) {\n throw new Error('GitHub is not authenticated.');\n }\n\n if (msg.type === 'createTask') {\n const task = await client.createIssue(\n msg.columnId ?? KanbanPanelProvider.backlogColumnId,\n msg.title.trim(),\n msg.description,\n );\n this.currentBoard = undefined;\n return;\n }\n\n if (msg.type === 'updateTask') {\n await client.updateIssue(msg.taskId, msg.columnId, msg.title.trim(), msg.description);\n this.currentBoard = undefined;\n return;\n }\n\n if (msg.type === 'moveTask') {\n const board = this.currentBoard ?? await (async () => {\n const b = await client.getBoard();\n this.currentBoard = b;\n return b;\n })();\n const task = board.tasks[msg.taskId];\n if (!task) throw new Error(`Task '${msg.taskId}' not found.`);\n await client.updateIssue(msg.taskId, msg.toColumnId, task.title, task.description);\n this.currentBoard = undefined;\n return;\n }\n\n if (msg.type === 'deleteTask') {\n await client.closeIssue(msg.taskId);\n this.currentBoard = undefined;\n }\n }\n\n private async handleLocalAction(\n msg: Exclude,\n ): Promise {\n if (!this.api || !this.projectSlug) {\n throw new Error('Board API is not connected.');\n }\n\n if (msg.type === 'createTask') {\n const board = this.currentBoard ?? await this.loadLocalBoard();\n const targetColumnId = this.resolveBacklogColumnId(board) ?? msg.columnId;\n await this.api.createBoardTask(this.projectSlug, {\n columnId: targetColumnId,\n title: msg.title.trim(),\n description: this.normalizeOptional(msg.description),\n assignee: this.normalizeOptional(msg.assignee),\n priority: this.normalizePriority(msg.priority),\n tags: this.normalizeTags(msg.tags),\n });\n return;\n }\n\n if (msg.type === 'updateTask') {\n await this.api.updateBoardTask(this.projectSlug, msg.taskId, {\n columnId: msg.columnId,\n title: msg.title.trim(),\n description: this.normalizeOptional(msg.description),\n assignee: this.normalizeOptional(msg.assignee),\n priority: this.normalizePriority(msg.priority),\n tags: this.normalizeTags(msg.tags),\n });\n return;\n }\n\n if (msg.type === 'moveTask') {\n const board = this.currentBoard ?? await this.loadLocalBoard();\n const task = board.tasks[msg.taskId];\n if (!task) {\n throw new Error(`Task '${msg.taskId}' was not found.`);\n }\n\n await this.api.updateBoardTask(this.projectSlug, msg.taskId, {\n columnId: msg.toColumnId,\n title: task.title,\n description: task.description,\n assignee: task.assignee,\n priority: this.normalizePriority(task.priority),\n tags: this.normalizeTags(task.tags),\n });\n return;\n }\n\n if (msg.type === 'deleteTask') {\n await this.api.deleteBoardTask(this.projectSlug, msg.taskId);\n }\n }\n\n private normalizePriority(priority?: string): string {\n const trimmed = priority?.trim().toLowerCase();\n if (!trimmed) return 'normal';\n return trimmed;\n }\n\n private normalizeOptional(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? trimmed : undefined;\n }\n\n private normalizeTags(tags?: string[]): string[] {\n if (!Array.isArray(tags)) {\n return [];\n }\n\n const seen = new Set();\n const normalized: string[] = [];\n for (const tag of tags) {\n const clean = tag.trim();\n const key = clean.toLowerCase();\n if (clean && !seen.has(key)) {\n seen.add(key);\n normalized.push(clean);\n }\n }\n return normalized;\n }\n\n private resolveBacklogColumnId(board: BoardData): string | undefined {\n return board.columns.find(column => column.id === KanbanPanelProvider.backlogColumnId)?.id;\n }\n}\n", "import type { BoardColumnItem, BoardData, BoardTaskItem } from './types';\n\nconst GITHUB_API = 'https://api.github.com';\nconst GITHUB_GRAPHQL = 'https://api.github.com/graphql';\n\nconst COL_BACKLOG = 'backlog';\nconst COL_IN_PROGRESS = 'in-progress';\nconst COL_REVIEW = 'review';\nconst COL_DONE = 'done';\n\nconst COLUMN_LABEL: Partial> = {\n [COL_IN_PROGRESS]: 'in-progress',\n [COL_REVIEW]: 'review',\n};\n\n// \u2500\u2500 REST types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface GitHubIssue {\n number: number;\n node_id: string;\n title: string;\n body: string | null;\n state: string;\n labels: Array<{ name: string }>;\n assignees: Array<{ login: string }>;\n created_at: string;\n closed_at: string | null;\n pull_request?: unknown;\n}\n\n// \u2500\u2500 GraphQL types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface GqlFieldValue {\n name?: string;\n field?: { name?: string };\n}\n\ninterface GqlProjectItem {\n id: string;\n fieldValues: { nodes: GqlFieldValue[] };\n content: {\n id?: string;\n number?: number;\n title?: string;\n body?: string | null;\n state?: string;\n createdAt?: string;\n closedAt?: string | null;\n assignees?: { nodes: Array<{ login: string }> };\n labels?: { nodes: Array<{ name: string }> };\n } | null;\n}\n\ninterface GqlStatusField {\n id: string;\n name: string;\n options: Array<{ id: string; name: string }>;\n}\n\ninterface GqlProjectV2 {\n id: string;\n fields: { nodes: Array> };\n items: { nodes: GqlProjectItem[] };\n}\n\n// \u2500\u2500 Project cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface ProjectCache {\n projectId: string;\n statusFieldId: string;\n /** column id \u2192 status option id */\n optionByColumn: Map;\n /** issue number \u2192 project item id */\n itemIdByIssue: Map;\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction mapStatusToColumn(statusName: string): string {\n const s = statusName.toLowerCase().trim();\n if (s.includes('progress') || s === 'doing' || s === 'wip' || s === 'started') return COL_IN_PROGRESS;\n if (s.includes('review') || s === 'pr open' || s.includes('pr')) return COL_REVIEW;\n if (s === 'done' || s.includes('done') || s.includes('complet') || s.includes('shipped') || s.includes('closed') || s.includes('finish')) return COL_DONE;\n return COL_BACKLOG;\n}\n\nfunction buildProjectCache(project: GqlProjectV2): ProjectCache {\n const statusField = project.fields.nodes.find(\n f => f.id && f.name?.toLowerCase() === 'status' && f.options,\n ) as GqlStatusField | undefined;\n\n if (!statusField) {\n throw new Error('Project has no \"Status\" single-select field.');\n }\n\n const optionByColumn = new Map();\n for (const opt of statusField.options) {\n const col = mapStatusToColumn(opt.name);\n if (!optionByColumn.has(col)) {\n optionByColumn.set(col, opt.id);\n }\n }\n\n const itemIdByIssue = new Map();\n for (const item of project.items.nodes) {\n if (item.content?.number) {\n itemIdByIssue.set(item.content.number, item.id);\n }\n }\n\n return { projectId: project.id, statusFieldId: statusField.id, optionByColumn, itemIdByIssue };\n}\n\nfunction resolveColumnFromLabels(issue: GitHubIssue): string {\n if (issue.state === 'closed') return COL_DONE;\n const names = new Set(issue.labels.map(l => l.name.toLowerCase()));\n if (names.has('in-progress')) return COL_IN_PROGRESS;\n if (names.has('review')) return COL_REVIEW;\n return COL_BACKLOG;\n}\n\nfunction toTask(issue: Partial & { number: number; title: string }): BoardTaskItem {\n return {\n id: String(issue.number),\n title: issue.title,\n priority: 'normal',\n description: issue.body ?? undefined,\n assignee: issue.assignees?.[0]?.login,\n tags: (issue.labels ?? [])\n .map(l => l.name)\n .filter(n => n !== 'in-progress' && n !== 'review'),\n createdAt: issue.created_at,\n completedAt: issue.closed_at ?? undefined,\n };\n}\n\n// \u2500\u2500 GraphQL query/mutation strings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Fetches the first Projects v2 linked to this repository (requires 'project' OAuth scope)\nconst AUTO_DISCOVER_PROJECT_QUERY = `\nquery AutoDiscoverProject($owner: String!, $repo: String!) {\n repository(owner: $owner, name: $repo) {\n projectsV2(first: 1) {\n nodes {\n id\n fields(first: 20) {\n nodes {\n ... on ProjectV2SingleSelectField { id name options { id name } }\n }\n }\n items(first: 100) {\n nodes {\n id\n fieldValues(first: 8) {\n nodes {\n ... on ProjectV2ItemFieldSingleSelectValue {\n name\n field { ... on ProjectV2SingleSelectField { name } }\n }\n }\n }\n content {\n ... on Issue {\n id number title body state createdAt closedAt\n assignees(first: 5) { nodes { login } }\n labels(first: 10) { nodes { name } }\n }\n }\n }\n }\n }\n }\n }\n}`;\n\nconst ADD_TO_PROJECT_MUTATION = `\nmutation AddToProject($projectId: ID!, $contentId: ID!) {\n addProjectV2ItemById(input: { projectId: $projectId contentId: $contentId }) {\n item { id }\n }\n}`;\n\nconst SET_STATUS_MUTATION = `\nmutation SetStatus($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {\n updateProjectV2ItemFieldValue(input: {\n projectId: $projectId\n itemId: $itemId\n fieldId: $fieldId\n value: { singleSelectOptionId: $optionId }\n }) {\n projectV2Item { id }\n }\n}`;\n\n// \u2500\u2500 GitHubBoardClient \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class GitHubBoardClient {\n private projectCache?: ProjectCache;\n\n constructor(\n private readonly owner: string,\n private readonly repo: string,\n private readonly token: string,\n ) {}\n\n // \u2500\u2500 Public board API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n async getBoard(): Promise {\n const [open, closed] = await Promise.all([\n this.listIssues('open'),\n this.listIssues('closed'),\n ]);\n const issues = [...open, ...closed].filter(i => !i.pull_request);\n\n const columns: BoardColumnItem[] = [\n { id: COL_BACKLOG, title: 'Backlog', taskIds: [] },\n { id: COL_IN_PROGRESS, title: 'In Progress', taskIds: [] },\n { id: COL_REVIEW, title: 'Review', taskIds: [] },\n { id: COL_DONE, title: 'Done', taskIds: [] },\n ];\n const colMap = new Map(columns.map(c => [c.id, c]));\n const tasks: Record = {};\n\n const project = await this.tryAutoDiscoverProject();\n if (project) {\n this.projectCache = buildProjectCache(project);\n\n const columnByIssue = new Map();\n for (const item of project.items.nodes) {\n if (!item.content?.number) continue;\n const statusValue = item.fieldValues.nodes.find(\n fv => fv.field?.name?.toLowerCase() === 'status',\n );\n if (statusValue?.name) {\n columnByIssue.set(item.content.number, mapStatusToColumn(statusValue.name));\n }\n }\n\n for (const issue of issues) {\n const task = toTask(issue);\n const columnId = columnByIssue.get(issue.number) ?? resolveColumnFromLabels(issue);\n colMap.get(columnId)?.taskIds.push(task.id);\n tasks[task.id] = task;\n }\n } else {\n for (const issue of issues) {\n const task = toTask(issue);\n colMap.get(resolveColumnFromLabels(issue))?.taskIds.push(task.id);\n tasks[task.id] = task;\n }\n }\n\n return { columns, tasks };\n }\n\n async createIssue(columnId: string, title: string, description?: string): Promise {\n const issue = await this.callRest(\n 'POST',\n `/repos/${this.owner}/${this.repo}/issues`,\n { title, body: description ?? '' },\n );\n\n if (this.projectCache) {\n await this.addIssueToProjectAndSetStatus(issue.node_id, issue.number, columnId);\n } else {\n const colLabel = COLUMN_LABEL[columnId];\n if (colLabel) {\n await this.callRest('PUT', `/repos/${this.owner}/${this.repo}/issues/${issue.number}/labels`, {\n labels: [colLabel],\n });\n }\n }\n\n return toTask(issue);\n }\n\n async updateIssue(\n issueNumber: string,\n columnId: string,\n title: string,\n description?: string,\n ): Promise {\n const num = parseInt(issueNumber, 10);\n const state = columnId === COL_DONE ? 'closed' : 'open';\n\n const issue = await this.callRest(\n 'PATCH',\n `/repos/${this.owner}/${this.repo}/issues/${num}`,\n { title, body: description ?? '', state },\n );\n\n if (this.projectCache) {\n await this.setProjectItemStatus(num, columnId);\n } else {\n const baseLabels = issue.labels.map(l => l.name).filter(n => n !== 'in-progress' && n !== 'review');\n const colLabel = state !== 'closed' ? COLUMN_LABEL[columnId] : undefined;\n const newLabels = colLabel ? [...baseLabels, colLabel] : baseLabels;\n await this.callRest('PUT', `/repos/${this.owner}/${this.repo}/issues/${num}/labels`, {\n labels: newLabels,\n });\n return toTask({ ...issue, state, labels: newLabels.map(n => ({ name: n })) });\n }\n\n return toTask({ ...issue, state });\n }\n\n async closeIssue(issueNumber: string): Promise {\n const num = parseInt(issueNumber, 10);\n await this.callRest('PATCH', `/repos/${this.owner}/${this.repo}/issues/${num}`, {\n state: 'closed',\n });\n if (this.projectCache) {\n await this.setProjectItemStatus(num, COL_DONE);\n }\n }\n\n // \u2500\u2500 Project auto-discovery \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private async tryAutoDiscoverProject(): Promise {\n try {\n const result = await this.callGraphQL<{\n repository?: { projectsV2?: { nodes: GqlProjectV2[] } };\n }>(AUTO_DISCOVER_PROJECT_QUERY, { owner: this.owner, repo: this.repo });\n return result.repository?.projectsV2?.nodes?.[0] ?? null;\n } catch {\n // No 'project' OAuth scope, no linked projects, or network error \u2014 fall back to labels\n return null;\n }\n }\n\n // \u2500\u2500 Project operations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private async addIssueToProjectAndSetStatus(\n nodeId: string,\n issueNumber: number,\n columnId: string,\n ): Promise {\n if (!this.projectCache) return;\n\n const addResult = await this.callGraphQL<{\n addProjectV2ItemById: { item: { id: string } };\n }>(ADD_TO_PROJECT_MUTATION, {\n projectId: this.projectCache.projectId,\n contentId: nodeId,\n });\n\n const itemId = addResult.addProjectV2ItemById.item.id;\n this.projectCache.itemIdByIssue.set(issueNumber, itemId);\n await this.setProjectItemStatusById(itemId, columnId);\n }\n\n private async setProjectItemStatus(issueNumber: number, columnId: string): Promise {\n if (!this.projectCache) return;\n const itemId = this.projectCache.itemIdByIssue.get(issueNumber);\n if (!itemId) return;\n await this.setProjectItemStatusById(itemId, columnId);\n }\n\n private async setProjectItemStatusById(itemId: string, columnId: string): Promise {\n if (!this.projectCache) return;\n const optionId = this.projectCache.optionByColumn.get(columnId);\n if (!optionId) return;\n\n await this.callGraphQL(SET_STATUS_MUTATION, {\n projectId: this.projectCache.projectId,\n itemId,\n fieldId: this.projectCache.statusFieldId,\n optionId,\n });\n }\n\n // \u2500\u2500 REST helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n private async listIssues(state: 'open' | 'closed'): Promise {\n return this.callRest(\n 'GET',\n `/repos/${this.owner}/${this.repo}/issues?state=${state}&per_page=100&sort=created&direction=desc`,\n );\n }\n\n private async callRest(method: string, path: string, body?: unknown): Promise {\n const res = await fetch(`${GITHUB_API}${path}`, {\n method,\n headers: {\n Authorization: `Bearer ${this.token}`,\n Accept: 'application/vnd.github+json',\n 'X-GitHub-Api-Version': '2022-11-28',\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\n },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`GitHub REST ${method} ${path} \u2192 ${res.status}: ${text}`);\n }\n if (res.status === 204) return undefined as T;\n return res.json() as Promise;\n }\n\n private async callGraphQL(query: string, variables: Record): Promise {\n const res = await fetch(GITHUB_GRAPHQL, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ query, variables }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`GitHub GraphQL error ${res.status}: ${text}`);\n }\n\n const data = await res.json() as { data?: T; errors?: Array<{ message: string }> };\n if (data.errors?.length) {\n throw new Error(`GitHub GraphQL: ${data.errors.map(e => e.message).join('; ')}`);\n }\n return data.data as T;\n }\n}\n", "import * as vscode from 'vscode';\r\n\r\nexport type LogLevel = 'info' | 'warn' | 'error';\r\n\r\nexport interface LogEntry {\r\n timestamp: string;\r\n level: LogLevel;\r\n message: string;\r\n}\r\n\r\ntype LogSubscriber = (entry: LogEntry) => void;\r\ntype ClearSubscriber = () => void;\r\n\r\nconst MAX_BUFFER = 1000;\r\n\r\nexport class Logger implements vscode.Disposable {\r\n private readonly channel: vscode.OutputChannel;\r\n private readonly buffer: LogEntry[] = [];\r\n private readonly subscribers: LogSubscriber[] = [];\r\n private readonly clearSubscribers: ClearSubscriber[] = [];\r\n\r\n constructor(channelName: string) {\r\n this.channel = vscode.window.createOutputChannel(channelName);\r\n }\r\n\r\n /** Backward-compatible alias for info(). */\r\n appendLine(message: string): void {\r\n this.info(message);\r\n }\r\n\r\n info(message: string): void {\r\n this.emit('info', message);\r\n }\r\n\r\n warn(message: string): void {\r\n this.emit('warn', message);\r\n }\r\n\r\n error(message: string): void {\r\n this.emit('error', message);\r\n }\r\n\r\n private emit(level: LogLevel, message: string): void {\r\n const entry: LogEntry = { timestamp: new Date().toISOString(), level, message };\r\n const formatted = `[${entry.timestamp}] [${level.toUpperCase().padEnd(5)}] ${message}`;\r\n this.channel.appendLine(formatted);\r\n this.buffer.push(entry);\r\n if (this.buffer.length > MAX_BUFFER) this.buffer.shift();\r\n for (const sub of this.subscribers) sub(entry);\r\n }\r\n\r\n subscribe(fn: LogSubscriber): vscode.Disposable {\r\n this.subscribers.push(fn);\r\n return new vscode.Disposable(() => {\r\n const idx = this.subscribers.indexOf(fn);\r\n if (idx >= 0) this.subscribers.splice(idx, 1);\r\n });\r\n }\r\n\r\n onCleared(fn: ClearSubscriber): vscode.Disposable {\r\n this.clearSubscribers.push(fn);\r\n return new vscode.Disposable(() => {\r\n const idx = this.clearSubscribers.indexOf(fn);\r\n if (idx >= 0) this.clearSubscribers.splice(idx, 1);\r\n });\r\n }\r\n\r\n getHistory(): LogEntry[] {\r\n return [...this.buffer];\r\n }\r\n\r\n clearBuffer(): void {\r\n this.buffer.length = 0;\r\n for (const sub of this.clearSubscribers) sub();\r\n }\r\n\r\n dispose(): void {\r\n this.channel.dispose();\r\n }\r\n}\r\n"], - "mappings": "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", - "names": ["HttpError", "errorMessage", "statusCode", "trueProto", "exports", "TimeoutError", "AbortError", "UnsupportedTransportError", "message", "transport", "DisabledTransportError", "FailedToStartTransportError", "FailedToNegotiateWithServerError", "AggregateErrors", "innerErrors", "HttpResponse", "statusCode", "statusText", "content", "exports", "HttpClient", "url", "options", "LogLevel", "exports", "NullLogger", "_logLevel", "_message", "exports", "exports", "ILogger_1", "Loggers_1", "pkg_version_1", "exports", "Arg", "val", "name", "values", "Platform", "_Platform", "getDataDetail", "data", "includeContent", "detail", "isArrayBuffer", "formatArrayBuffer", "view", "str", "num", "pad", "sendMessage", "logger", "transportName", "httpClient", "url", "content", "options", "headers", "value", "getUserAgentHeader", "responseType", "response", "createLogger", "ConsoleLogger", "SubjectSubscription", "subject", "observer", "index", "_", "minimumLogLevel", "logLevel", "message", "msg", "userAgentHeaderName", "constructUserAgent", "getOsName", "getRuntime", "getRuntimeVersion", "version", "os", "runtime", "runtimeVersion", "userAgent", "majorAndMinor", "getErrorString", "e", "getGlobalThis", "Errors_1", "HttpClient_1", "ILogger_1", "Utils_1", "FetchHttpClient", "logger", "requireFunc", "request", "abortController", "error", "timeoutId", "msTimeout", "response", "e", "errorMessage", "deserializeContent", "payload", "url", "cookies", "c", "exports", "responseType", "content", "Errors_1", "HttpClient_1", "ILogger_1", "Utils_1", "XhrHttpClient", "logger", "request", "resolve", "reject", "xhr", "headers", "header", "exports", "Errors_1", "FetchHttpClient_1", "HttpClient_1", "Utils_1", "XhrHttpClient_1", "DefaultHttpClient", "logger", "request", "url", "exports", "TextMessageFormat", "_TextMessageFormat", "output", "input", "messages", "exports", "TextMessageFormat_1", "Utils_1", "HandshakeProtocol", "handshakeRequest", "data", "messageData", "remainingData", "binaryData", "separatorIndex", "responseLength", "textData", "messages", "response", "exports", "MessageType", "exports", "Utils_1", "Subject", "item", "observer", "err", "exports", "IHubProtocol_1", "Utils_1", "MessageBuffer", "protocol", "connection", "bufferSize", "message", "serializedMessage", "backpressurePromise", "backpressurePromiseResolver", "backpressurePromiseRejector", "resolve", "reject", "BufferedItem", "ackMessage", "newestAckedMessage", "index", "element", "currentId", "sequenceId", "messages", "error", "exports", "id", "resolver", "rejector", "HandshakeProtocol_1", "Errors_1", "IHubProtocol_1", "ILogger_1", "Subject_1", "Utils_1", "MessageBuffer_1", "DEFAULT_TIMEOUT_IN_MS", "DEFAULT_PING_INTERVAL_IN_MS", "DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE", "HubConnectionState", "exports", "HubConnection", "_HubConnection", "connection", "logger", "protocol", "reconnectPolicy", "serverTimeoutInMilliseconds", "keepAliveIntervalInMilliseconds", "statefulReconnectBufferSize", "data", "error", "url", "handshakePromise", "resolve", "reject", "version", "handshakeRequest", "e", "startPromise", "state", "methodName", "args", "streams", "streamIds", "invocationDescriptor", "promiseQueue", "subject", "cancelInvocation", "invocationEvent", "message", "sendPromise", "newMethod", "method", "handlers", "removeIdx", "callback", "messages", "responseMessage", "remainingData", "nextPing", "invocationMessage", "methods", "methodsCopy", "expectsResponse", "res", "exception", "completionMessage", "m", "prevRes", "c", "reconnectStartTime", "previousReconnectAttempts", "retryError", "nextRetryDelay", "previousRetryCount", "elapsedMilliseconds", "retryReason", "callbacks", "key", "nonblocking", "invocationId", "streamId", "err", "item", "i", "argument", "arg", "id", "result", "DEFAULT_RETRY_DELAYS_IN_MILLISECONDS", "DefaultReconnectPolicy", "retryDelays", "retryContext", "exports", "HeaderNames", "exports", "HeaderNames_1", "HttpClient_1", "AccessTokenHttpClient", "innerClient", "accessTokenFactory", "request", "allowRetry", "response", "url", "exports", "HttpTransportType", "exports", "TransferFormat", "AbortController", "exports", "AbortController_1", "Errors_1", "ILogger_1", "ITransport_1", "Utils_1", "LongPollingTransport", "httpClient", "logger", "options", "url", "transferFormat", "name", "value", "headers", "pollOptions", "pollUrl", "response", "e", "data", "deleteOptions", "error", "err", "logMessage", "exports", "ILogger_1", "ITransport_1", "Utils_1", "ServerSentEventsTransport", "httpClient", "accessToken", "logger", "options", "url", "transferFormat", "resolve", "reject", "opened", "eventSource", "cookies", "headers", "name", "value", "e", "error", "data", "exports", "HeaderNames_1", "ILogger_1", "ITransport_1", "Utils_1", "WebSocketTransport", "httpClient", "accessTokenFactory", "logger", "logMessageContent", "webSocketConstructor", "headers", "url", "transferFormat", "token", "resolve", "reject", "webSocket", "cookies", "opened", "name", "value", "_event", "event", "error", "message", "data", "exports", "AccessTokenHttpClient_1", "DefaultHttpClient_1", "Errors_1", "ILogger_1", "ITransport_1", "LongPollingTransport_1", "ServerSentEventsTransport_1", "Utils_1", "WebSocketTransport_1", "MAX_REDIRECTS", "HttpConnection", "url", "options", "webSocketModule", "eventSourceModule", "requireFunc", "transferFormat", "message", "data", "TransportSendQueue", "error", "resolve", "e", "negotiateResponse", "redirects", "accessToken", "headers", "name", "value", "negotiateUrl", "response", "errorMessage", "connectionToken", "requestedTransport", "requestedTransferFormat", "connectUrl", "transportExceptions", "transports", "negotiate", "endpoint", "transportOrError", "ex", "transport", "callStop", "useStatefulReconnect", "transportMatches", "s", "aTag", "searchParams", "exports", "actualTransport", "_TransportSendQueue", "_transport", "PromiseSource", "transportResult", "arrayBuffers", "totalLength", "b", "a", "result", "offset", "item", "reject", "reason", "IHubProtocol_1", "ILogger_1", "ITransport_1", "Loggers_1", "TextMessageFormat_1", "JSON_HUB_PROTOCOL_NAME", "JsonHubProtocol", "input", "logger", "messages", "hubMessages", "message", "parsedMessage", "value", "errorMessage", "exports", "DefaultReconnectPolicy_1", "HttpConnection_1", "HubConnection_1", "ILogger_1", "JsonHubProtocol_1", "Loggers_1", "Utils_1", "LogLevelNameMapping", "parseLogLevel", "name", "mapping", "HubConnectionBuilder", "logging", "isLogger", "logLevel", "url", "transportTypeOrOptions", "protocol", "retryDelaysOrReconnectPolicy", "milliseconds", "options", "httpConnectionOptions", "connection", "exports", "logger", "Errors_1", "exports", "HttpClient_1", "DefaultHttpClient_1", "HubConnection_1", "HubConnectionBuilder_1", "IHubProtocol_1", "ILogger_1", "ITransport_1", "Loggers_1", "JsonHubProtocol_1", "Subject_1", "Utils_1", "extension_exports", "__export", "activate", "deactivate", "log", "__toCommonJS", "vscode", "path", "fs", "os", "import_child_process", "import_events", "path", "WorkspaceDetector", "createWatcher", "readFile", "workspacePaths", "wsPath", "configPath", "filePath", "workspaceFolderPath", "raw", "config", "parseProjectConfig", "normalised", "ws", "normWs", "parsed", "projectSlug", "firstNonEmptyString", "apiPort", "firstPositiveNumber", "values", "value", "trimmed", "candidate", "BackendProcessManager", "options", "spawner", "fetcher", "delay", "ms", "resolve", "fileExists", "p", "createInterface", "line", "healthUrl", "attempt", "vscode", "StatusBarManager", "StudioApiClient", "baseUrl", "fetcher", "url", "init", "projectSlug", "enc", "agentSlug", "processed", "agents", "a", "msgs", "m", "fileName", "status", "decisionId", "resolution", "request", "taskId", "path", "res", "ApiError", "body", "value", "statusCode", "vscode", "import_signalr", "defaultFactory", "url", "ctx", "StudioSignalRClient", "hubUrl", "factory", "projectSlug", "msg", "kinds", "k", "state", "vscode", "crypto", "BasePanelProvider", "viewId", "extensionUri", "webviewScript", "webviewView", "projectSlug", "api", "signalR", "workspaceFolderPath", "message", "d", "view", "webview", "nonce", "scriptUri", "AgentsPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "MessagesPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "DecisionsPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "vscode", "crypto", "LogsPanelProvider", "extensionUri", "logger", "webviewView", "entry", "msg", "d", "webview", "nonce", "scriptUri", "vscode", "crypto", "GITHUB_API", "GITHUB_GRAPHQL", "COL_BACKLOG", "COL_IN_PROGRESS", "COL_REVIEW", "COL_DONE", "COLUMN_LABEL", "mapStatusToColumn", "statusName", "s", "buildProjectCache", "project", "statusField", "f", "optionByColumn", "opt", "col", "itemIdByIssue", "item", "resolveColumnFromLabels", "issue", "names", "l", "toTask", "n", "AUTO_DISCOVER_PROJECT_QUERY", "ADD_TO_PROJECT_MUTATION", "SET_STATUS_MUTATION", "GitHubBoardClient", "owner", "repo", "token", "open", "closed", "issues", "i", "columns", "colMap", "tasks", "columnByIssue", "statusValue", "fv", "task", "columnId", "title", "description", "colLabel", "issueNumber", "num", "state", "baseLabels", "newLabels", "nodeId", "itemId", "optionId", "method", "path", "body", "res", "text", "query", "variables", "data", "e", "SCOPES_ISSUES_ONLY", "SCOPES_WITH_PROJECTS", "KanbanPanelProvider", "_KanbanPanelProvider", "BasePanelProvider", "extensionUri", "panel", "onDispose", "projectSlug", "api", "signalR", "workspaceFolderPath", "gitHubRepo", "view", "disposables", "webviewReady", "msg", "e", "message", "board", "forcePrompt", "client", "createIfNone", "session", "GitHubBoardClient", "disposable", "webview", "nonce", "scriptUri", "task", "b", "targetColumnId", "priority", "trimmed", "value", "tags", "seen", "normalized", "tag", "clean", "key", "column", "vscode", "MAX_BUFFER", "Logger", "channelName", "message", "level", "entry", "formatted", "sub", "fn", "idx", "backendManager", "signalRClient", "activeApiClient", "activeProjectSlug", "statusBar", "log", "DEFAULT_PLACEHOLDER", "activate", "context", "Logger", "StatusBarManager", "agentsProvider", "AgentsPanelProvider", "messagesProvider", "MessagesPanelProvider", "decisionsProvider", "DecisionsPanelProvider", "logsProvider", "LogsPanelProvider", "debugLogsProvider", "kanbanProvider", "KanbanPanelProvider", "detector", "WorkspaceDetector", "glob", "watcher", "handler", "uri", "filePath", "config", "workspaceFolderPath", "connectBackend", "wsPath", "teardown", "scanWorkspace", "settings", "getSettings", "globalDir", "getGlobalTemplateRoot", "e", "folders", "f", "setDisconnectedPlaceholder", "validConfigs", "createFailures", "folder", "ensureProjectConfig", "aiDevDir", "configPath", "folderName", "projectSlug", "slugifyFolderName", "initialConfig", "repairProjectConfig", "ensureDefaultAgents", "name", "defaultPort", "fallbackSlug", "parsed", "raw", "normalized", "normalizeProjectConfig", "currentSlug", "currentPort", "repaired", "firstNonEmptyString", "apiPort", "firstPositiveNumber", "values", "value", "trimmed", "candidate", "globalTemplateRoot", "templateRoots", "getTemplateRoots", "discovered", "discoverTemplates", "partialsCache", "agentsDir", "created", "discoveredTemplate", "targetAgentDir", "template", "slug", "partials", "loadTemplatePartials", "content", "renderTemplate", "readComposedTemplate", "compactContent", "agentJson", "thinking", "root", "entries", "entry", "jsonPath", "mdPath", "compactMdPath", "a", "b", "extensionPath", "precedence", "packaged", "devFallback", "packagedRoot", "roots", "index", "arr", "configuredPath", "firstWorkspace", "bootstrapApiPort", "clampInt", "backendMaxAttempts", "backendRetryDelayMs", "templatesPrecedence", "min", "max", "fallback", "templateRoot", "sharedDir", "files", "key", "templatePath", "templateSlug", "_match", "partialKey", "partial", "message", "detectGitHubRepo", "workspaceFolderPath", "raw", "remotePattern", "remotes", "match", "name", "url", "parsed", "parseGitHubUrl", "m", "connectBackend", "context", "config", "agentsProvider", "messagesProvider", "decisionsProvider", "kanbanProvider", "settings", "getSettings", "binaryName", "binaryPath", "hasBundledBinary", "repoRoot", "devApiProject", "useDevDotnetFallback", "log", "backendManager", "BackendProcessManager", "line", "source", "msg", "binary", "args", "options", "r", "statusBar", "e", "baseUrl", "api", "StudioApiClient", "activeApiClient", "activeProjectSlug", "signalRClient", "StudioSignalRClient", "state", "gitHubRepo", "teardown", "deactivate"] + "sourcesContent": ["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpTransportType } from \"./ITransport\";\r\n\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The HTTP status code represented by this error. */\r\n public statusCode: number;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage: string, statusCode: number) {\r\n const trueProto = new.target.prototype;\r\n super(`${errorMessage}: Status code '${statusCode}'`);\r\n this.statusCode = statusCode;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is unsupported by the browser. */\r\n/** @private */\r\nexport class UnsupportedTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.UnsupportedTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'UnsupportedTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport is disabled by the browser. */\r\n/** @private */\r\nexport class DisabledTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.DisabledTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'DisabledTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the selected transport cannot be started. */\r\n/** @private */\r\nexport class FailedToStartTransportError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The {@link @microsoft/signalr.HttpTransportType} this error occurred on. */\r\n public transport: HttpTransportType;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToStartTransportError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {HttpTransportType} transport The {@link @microsoft/signalr.HttpTransportType} this error occurred on.\r\n */\r\n constructor(message: string, transport: HttpTransportType) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.transport = transport;\r\n this.errorType = 'FailedToStartTransportError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when the negotiation with the server failed to complete. */\r\n/** @private */\r\nexport class FailedToNegotiateWithServerError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The type name of this error. */\r\n public errorType: string;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.FailedToNegotiateWithServerError}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n */\r\n constructor(message: string) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n this.errorType = 'FailedToNegotiateWithServerError';\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when multiple errors have occurred. */\r\n/** @private */\r\nexport class AggregateErrors extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private __proto__: Error;\r\n\r\n /** The collection of errors this error is aggregating. */\r\n public innerErrors: Error[];\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.AggregateErrors}.\r\n *\r\n * @param {string} message A descriptive error message.\r\n * @param {Error[]} innerErrors The collection of errors this error is aggregating.\r\n */\r\n constructor(message: string, innerErrors: Error[]) {\r\n const trueProto = new.target.prototype;\r\n super(message);\r\n\r\n this.innerErrors = innerErrors;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortSignal } from \"./AbortController\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\n\r\n/** Represents an HTTP request. */\r\nexport interface HttpRequest {\r\n /** The HTTP method to use for the request. */\r\n method?: string;\r\n\r\n /** The URL for the request. */\r\n url?: string;\r\n\r\n /** The body content for the request. May be a string or an ArrayBuffer (for binary data). */\r\n content?: string | ArrayBuffer;\r\n\r\n /** An object describing headers to apply to the request. */\r\n headers?: MessageHeaders;\r\n\r\n /** The XMLHttpRequestResponseType to apply to the request. */\r\n responseType?: XMLHttpRequestResponseType;\r\n\r\n /** An AbortSignal that can be monitored for cancellation. */\r\n abortSignal?: AbortSignal;\r\n\r\n /** The time to wait for the request to complete before throwing a TimeoutError. Measured in milliseconds. */\r\n timeout?: number;\r\n\r\n /** This controls whether credentials such as cookies are sent in cross-site requests. */\r\n withCredentials?: boolean;\r\n}\r\n\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n */\r\n constructor(statusCode: number);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code and message.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n */\r\n constructor(statusCode: number, statusText: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and string content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: ArrayBuffer);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string | ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string | ArrayBuffer);\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly statusText?: string,\r\n public readonly content?: string | ArrayBuffer) {\r\n }\r\n}\r\n\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport abstract class HttpClient {\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string): Promise;\r\n\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string, options: HttpRequest): Promise;\r\n public get(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string): Promise;\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string, options: HttpRequest): Promise;\r\n public post(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string): Promise;\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string, options: HttpRequest): Promise;\r\n public delete(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP request to the specified URL, returning a {@link Promise} that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {HttpRequest} request An {@link @microsoft/signalr.HttpRequest} describing the request to send.\r\n * @returns {Promise} A Promise that resolves with an HttpResponse describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public abstract send(request: HttpRequest): Promise;\r\n\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n public getCookieString(url: string): string {\r\n return \"\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport enum LogLevel {\r\n /** Log level for very low severity diagnostic messages. */\r\n Trace = 0,\r\n /** Log level for low severity diagnostic messages. */\r\n Debug = 1,\r\n /** Log level for informational diagnostic messages. */\r\n Information = 2,\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n Warning = 3,\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n Error = 4,\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n Critical = 5,\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n None = 6,\r\n}\r\n\r\n/** An abstraction that provides a sink for diagnostic messages. */\r\nexport interface ILogger {\r\n /** Called by the framework to emit a diagnostic message.\r\n *\r\n * @param {LogLevel} logLevel The severity level of the message.\r\n * @param {string} message The message.\r\n */\r\n log(logLevel: LogLevel, message: string): void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger implements ILogger {\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n public static instance: ILogger = new NullLogger();\r\n\r\n private constructor() {}\r\n\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n public log(_logLevel: LogLevel, _message: string): void {\r\n }\r\n}\r\n", "export const VERSION = '10.0.0';", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { VERSION } from \"./pkg-version\";\r\n\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\n\r\nexport { VERSION };\r\n/** @private */\r\nexport class Arg {\r\n public static isRequired(val: any, name: string): void {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n public static isNotEmpty(val: string, name: string): void {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n\r\n public static isIn(val: any, values: any, name: string): void {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class Platform {\r\n // react-native has a window but no document so we should check both\r\n public static get isBrowser(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"object\";\r\n }\r\n\r\n // WebWorkers don't have a window object so the isBrowser check would fail\r\n public static get isWebWorker(): boolean {\r\n return !Platform.isNode && typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n\r\n // react-native has a window but no document\r\n static get isReactNative(): boolean {\r\n return !Platform.isNode && typeof window === \"object\" && typeof window.document === \"undefined\";\r\n }\r\n\r\n // Node apps shouldn't have a window object, but WebWorkers don't either\r\n // so we need to check for both WebWorker and window\r\n public static get isNode(): boolean {\r\n return typeof process !== \"undefined\" && process.release && process.release.name === \"node\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getDataDetail(data: any, includeContent: boolean): string {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n } else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n\r\n/** @private */\r\nexport function formatArrayBuffer(data: ArrayBuffer): string {\r\n const view = new Uint8Array(data);\r\n\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n\r\n // Trim of trailing space.\r\n return str.substring(0, str.length - 1);\r\n}\r\n\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val: any): val is ArrayBuffer {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n\r\n/** @private */\r\nexport async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string,\r\n content: string | ArrayBuffer, options: IHttpConnectionOptions): Promise {\r\n const headers: {[k: string]: string} = {};\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, options.logMessageContent!)}.`);\r\n\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...options.headers},\r\n responseType,\r\n timeout: options.timeout,\r\n withCredentials: options.withCredentials,\r\n });\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n\r\n/** @private */\r\nexport function createLogger(logger?: ILogger | LogLevel): ILogger {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n\r\n if ((logger as ILogger).log !== undefined) {\r\n return logger as ILogger;\r\n }\r\n\r\n return new ConsoleLogger(logger as LogLevel);\r\n}\r\n\r\n/** @private */\r\nexport class SubjectSubscription implements ISubscription {\r\n private _subject: Subject;\r\n private _observer: IStreamSubscriber;\r\n\r\n constructor(subject: Subject, observer: IStreamSubscriber) {\r\n this._subject = subject;\r\n this._observer = observer;\r\n }\r\n\r\n public dispose(): void {\r\n const index: number = this._subject.observers.indexOf(this._observer);\r\n if (index > -1) {\r\n this._subject.observers.splice(index, 1);\r\n }\r\n\r\n if (this._subject.observers.length === 0 && this._subject.cancelCallback) {\r\n this._subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class ConsoleLogger implements ILogger {\r\n private readonly _minLevel: LogLevel;\r\n\r\n // Public for testing purposes.\r\n public out: {\r\n error(message: any): void,\r\n warn(message: any): void,\r\n info(message: any): void,\r\n log(message: any): void,\r\n };\r\n\r\n constructor(minimumLogLevel: LogLevel) {\r\n this._minLevel = minimumLogLevel;\r\n this.out = console;\r\n }\r\n\r\n public log(logLevel: LogLevel, message: string): void {\r\n if (logLevel >= this._minLevel) {\r\n const msg = `[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`;\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.out.error(msg);\r\n break;\r\n case LogLevel.Warning:\r\n this.out.warn(msg);\r\n break;\r\n case LogLevel.Information:\r\n this.out.info(msg);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.out.log(msg);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getUserAgentHeader(): [string, string] {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [ userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion()) ];\r\n}\r\n\r\n/** @private */\r\nexport function constructUserAgent(version: string, os: string, runtime: string, runtimeVersion: string | undefined): string {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent: string = \"Microsoft SignalR/\";\r\n\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n } else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n\r\n userAgent += `${runtime}`;\r\n\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n } else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getOsName(): string {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\n// eslint-disable-next-line spaced-comment\r\n/*#__PURE__*/ function getRuntimeVersion(): string | undefined {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction getRuntime(): string {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n } else {\r\n return \"Browser\";\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getErrorString(e: any): string {\r\n if (e.stack) {\r\n return e.stack;\r\n } else if (e.message) {\r\n return e.message;\r\n }\r\n return `${e}`;\r\n}\r\n\r\n/** @private */\r\nexport function getGlobalThis(): unknown {\r\n // globalThis is semi-new and not available in Node until v12\r\n if (typeof globalThis !== \"undefined\") {\r\n return globalThis;\r\n }\r\n if (typeof self !== \"undefined\") {\r\n return self;\r\n }\r\n if (typeof window !== \"undefined\") {\r\n return window;\r\n }\r\n if (typeof global !== \"undefined\") {\r\n return global;\r\n }\r\n throw new Error(\"could not find global\");\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// @ts-ignore: This will be removed from built files and is here to make the types available during dev work\r\nimport { CookieJar } from \"@types/tough-cookie\";\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { Platform, getGlobalThis, isArrayBuffer } from \"./Utils\";\r\n\r\nexport class FetchHttpClient extends HttpClient {\r\n private readonly _abortControllerType: { prototype: AbortController, new(): AbortController };\r\n private readonly _fetchType: (input: RequestInfo, init?: RequestInit) => Promise;\r\n private readonly _jar?: CookieJar;\r\n\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n\r\n // Node added a fetch implementation to the global scope starting in v18.\r\n // We need to add a cookie jar in node to be able to share cookies with WebSocket\r\n if (typeof fetch === \"undefined\" || Platform.isNode) {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this._jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n\r\n if (typeof fetch === \"undefined\") {\r\n this._fetchType = requireFunc(\"node-fetch\");\r\n } else {\r\n // Use fetch from Node if available\r\n this._fetchType = fetch;\r\n }\r\n\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this._fetchType = requireFunc(\"fetch-cookie\")(this._fetchType, this._jar);\r\n } else {\r\n this._fetchType = fetch.bind(getGlobalThis());\r\n }\r\n if (typeof AbortController === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this._abortControllerType = requireFunc(\"abort-controller\");\r\n } else {\r\n this._abortControllerType = AbortController;\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public async send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n\r\n const abortController = new this._abortControllerType();\r\n\r\n let error: any;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId: any = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout!;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n request.headers = request.headers || {};\r\n if (isArrayBuffer(request.content)) {\r\n request.headers[\"Content-Type\"] = \"application/octet-stream\";\r\n } else {\r\n request.headers[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\r\n }\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await this._fetchType(request.url!, {\r\n body: request.content,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method!,\r\n mode: \"cors\",\r\n redirect: \"follow\",\r\n signal: abortController.signal,\r\n });\r\n } catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this._logger.log(\r\n LogLevel.Warning,\r\n `Error from HTTP request. ${e}.`,\r\n );\r\n throw e;\r\n } finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n const errorMessage = await deserializeContent(response, \"text\") as string;\r\n throw new HttpError(errorMessage || response.statusText, response.status);\r\n }\r\n\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n\r\n return new HttpResponse(\r\n response.status,\r\n response.statusText,\r\n payload,\r\n );\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n let cookies: string = \"\";\r\n if (Platform.isNode && this._jar) {\r\n // @ts-ignore: unused variable\r\n this._jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\n\r\nfunction deserializeContent(response: Response, responseType?: XMLHttpRequestResponseType): Promise {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n\r\n return content;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\nexport class XhrHttpClient extends HttpClient {\r\n private readonly _logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this._logger = logger;\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open(request.method!, request.url!, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n if (request.content === \"\") {\r\n request.content = undefined;\r\n }\r\n if (request.content) {\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n if (isArrayBuffer(request.content)) {\r\n xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\r\n } else {\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n }\r\n }\r\n\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n } else {\r\n reject(new HttpError(xhr.response || xhr.responseText || xhr.statusText, xhr.status));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this._logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n\r\n xhr.ontimeout = () => {\r\n this._logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n\r\n xhr.send(request.content);\r\n });\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n private readonly _httpClient: HttpClient;\r\n\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n public constructor(logger: ILogger) {\r\n super();\r\n\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this._httpClient = new FetchHttpClient(logger);\r\n } else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this._httpClient = new XhrHttpClient(logger);\r\n } else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return this._httpClient.send(request);\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._httpClient.getCookieString(url);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n public static RecordSeparatorCode = 0x1e;\r\n public static RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n\r\n public static write(output: string): string {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n\r\n public static parse(input: string): string[] {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport interface HandshakeRequestMessage {\r\n readonly protocol: string;\r\n readonly version: number;\r\n}\r\n\r\n/** @private */\r\nexport interface HandshakeResponseMessage {\r\n readonly error: string;\r\n readonly minorVersion: number;\r\n}\r\n\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n public writeHandshakeRequest(handshakeRequest: HandshakeRequestMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n\r\n public parseHandshakeResponse(data: any): [any, HandshakeResponseMessage] {\r\n let messageData: string;\r\n let remainingData: any;\r\n\r\n if (isArrayBuffer(data)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, Array.prototype.slice.call(binaryData.slice(0, responseLength)));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n } else {\r\n const textData: string = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n const responseMessage: HandshakeResponseMessage = response;\r\n\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { ILogger } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\n\r\n/** Defines the type of a Hub Message. */\r\nexport enum MessageType {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n Invocation = 1,\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n StreamItem = 2,\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n Completion = 3,\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n StreamInvocation = 4,\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n CancelInvocation = 5,\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n Ping = 6,\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n Close = 7,\r\n Ack = 8,\r\n Sequence = 9\r\n}\r\n\r\n/** Defines a dictionary of string keys and string values representing headers attached to a Hub message. */\r\nexport interface MessageHeaders {\r\n /** Gets or sets the header with the specified key. */\r\n [key: string]: string;\r\n}\r\n\r\n/** Union type of all known Hub messages. */\r\nexport type HubMessage =\r\n InvocationMessage |\r\n StreamInvocationMessage |\r\n StreamItemMessage |\r\n CompletionMessage |\r\n CancelInvocationMessage |\r\n PingMessage |\r\n CloseMessage |\r\n AckMessage |\r\n SequenceMessage;\r\n\r\n/** Defines properties common to all Hub messages. */\r\nexport interface HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageType} value indicating the type of this message. */\r\n readonly type: MessageType;\r\n}\r\n\r\n/** Defines properties common to all Hub messages relating to a specific invocation. */\r\nexport interface HubInvocationMessage extends HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageHeaders} dictionary containing headers attached to the message. */\r\n readonly headers?: MessageHeaders;\r\n /** The ID of the invocation relating to this message.\r\n *\r\n * This is expected to be present for {@link @microsoft/signalr.StreamInvocationMessage} and {@link @microsoft/signalr.CompletionMessage}. It may\r\n * be 'undefined' for an {@link @microsoft/signalr.InvocationMessage} if the sender does not expect a response.\r\n */\r\n readonly invocationId?: string;\r\n}\r\n\r\n/** A hub message representing a non-streaming invocation. */\r\nexport interface InvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Invocation;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a streaming invocation. */\r\nexport interface StreamInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamInvocation;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a single item produced as part of a result stream. */\r\nexport interface StreamItemMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamItem;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n\r\n /** The item produced by the server. */\r\n readonly item?: any;\r\n}\r\n\r\n/** A hub message representing the result of an invocation. */\r\nexport interface CompletionMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Completion;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The error produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly error?: string;\r\n /** The result produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly result?: any;\r\n}\r\n\r\n/** A hub message indicating that the sender is still active. */\r\nexport interface PingMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Ping;\r\n}\r\n\r\n/** A hub message indicating that the sender is closing the connection.\r\n *\r\n * If {@link @microsoft/signalr.CloseMessage.error} is defined, the sender is closing the connection due to an error.\r\n */\r\nexport interface CloseMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Close;\r\n /** The error that triggered the close, if any.\r\n *\r\n * If this property is undefined, the connection was closed normally and without error.\r\n */\r\n readonly error?: string;\r\n\r\n /** If true, clients with automatic reconnects enabled should attempt to reconnect after receiving the CloseMessage. Otherwise, they should not. */\r\n readonly allowReconnect?: boolean;\r\n}\r\n\r\n/** A hub message sent to request that a streaming invocation be canceled. */\r\nexport interface CancelInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.CancelInvocation;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n}\r\n\r\nexport interface AckMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Ack;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\nexport interface SequenceMessage extends HubMessageBase\r\n{\r\n readonly type: MessageType.Sequence;\r\n\r\n readonly sequenceId: number;\r\n}\r\n\r\n/** A protocol abstraction for communicating with SignalR Hubs. */\r\nexport interface IHubProtocol {\r\n /** The name of the protocol. This is used by SignalR to resolve the protocol between the client and server. */\r\n readonly name: string;\r\n /** The version of the protocol. */\r\n readonly version: number;\r\n /** The {@link @microsoft/signalr.TransferFormat} of the protocol. */\r\n readonly transferFormat: TransferFormat;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the `input` parameter must be a string, otherwise it must be an ArrayBuffer.\r\n *\r\n * @param {string | ArrayBuffer} input A string or ArrayBuffer containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input: string | ArrayBuffer, logger: ILogger): HubMessage[];\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string or ArrayBuffer and returns it.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the result of this method will be a string, otherwise it will be an ArrayBuffer.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string | ArrayBuffer} A string or ArrayBuffer containing the serialized representation of the message.\r\n */\r\n writeMessage(message: HubMessage): string | ArrayBuffer;\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IStreamResult, IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { SubjectSubscription } from \"./Utils\";\r\n\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject implements IStreamResult {\r\n /** @internal */\r\n public observers: IStreamSubscriber[];\r\n\r\n /** @internal */\r\n public cancelCallback?: () => Promise;\r\n\r\n constructor() {\r\n this.observers = [];\r\n }\r\n\r\n public next(item: T): void {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n\r\n public error(err: any): void {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n\r\n public complete(): void {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n\r\n public subscribe(observer: IStreamSubscriber): ISubscription {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AckMessage, HubMessage, IHubProtocol, MessageType, SequenceMessage } from \"./IHubProtocol\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class MessageBuffer {\r\n private readonly _protocol: IHubProtocol;\r\n private readonly _connection: IConnection;\r\n\r\n private readonly _bufferSize: number = 100_000;\r\n\r\n private _messages: BufferedItem[] = [];\r\n private _totalMessageCount: number = 0;\r\n private _waitForSequenceMessage: boolean = false;\r\n\r\n // Message IDs start at 1 and always increment by 1\r\n private _nextReceivingSequenceId = 1;\r\n private _latestReceivedSequenceId = 0;\r\n private _bufferedByteCount: number = 0;\r\n private _reconnectInProgress: boolean = false;\r\n\r\n private _ackTimerHandle?: any;\r\n\r\n constructor(protocol: IHubProtocol, connection: IConnection, bufferSize: number) {\r\n this._protocol = protocol;\r\n this._connection = connection;\r\n this._bufferSize = bufferSize;\r\n }\r\n\r\n public async _send(message: HubMessage): Promise {\r\n const serializedMessage = this._protocol.writeMessage(message);\r\n\r\n let backpressurePromise: Promise = Promise.resolve();\r\n\r\n // Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect\r\n if (this._isInvocationMessage(message)) {\r\n this._totalMessageCount++;\r\n let backpressurePromiseResolver: (value: void) => void = () => {};\r\n let backpressurePromiseRejector: (value?: void) => void = () => {};\r\n\r\n if (isArrayBuffer(serializedMessage)) {\r\n this._bufferedByteCount += serializedMessage.byteLength;\r\n } else {\r\n this._bufferedByteCount += serializedMessage.length;\r\n }\r\n\r\n if (this._bufferedByteCount >= this._bufferSize) {\r\n backpressurePromise = new Promise((resolve, reject) => {\r\n backpressurePromiseResolver = resolve;\r\n backpressurePromiseRejector = reject;\r\n });\r\n }\r\n\r\n this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount,\r\n backpressurePromiseResolver, backpressurePromiseRejector));\r\n }\r\n\r\n try {\r\n // If this is set it means we are reconnecting or resending\r\n // We don't want to send on a disconnected connection\r\n // And we don't want to send if resend is running since that would mean sending\r\n // this message twice\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(serializedMessage);\r\n }\r\n } catch {\r\n this._disconnected();\r\n }\r\n await backpressurePromise;\r\n }\r\n\r\n public _ack(ackMessage: AckMessage): void {\r\n let newestAckedMessage = -1;\r\n\r\n // Find index of newest message being acked\r\n for (let index = 0; index < this._messages.length; index++) {\r\n const element = this._messages[index];\r\n if (element._id <= ackMessage.sequenceId) {\r\n newestAckedMessage = index;\r\n if (isArrayBuffer(element._message)) {\r\n this._bufferedByteCount -= element._message.byteLength;\r\n } else {\r\n this._bufferedByteCount -= element._message.length;\r\n }\r\n // resolve items that have already been sent and acked\r\n element._resolver();\r\n } else if (this._bufferedByteCount < this._bufferSize) {\r\n // resolve items that now fall under the buffer limit but haven't been acked\r\n element._resolver();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (newestAckedMessage !== -1) {\r\n // We're removing everything including the message pointed to, so add 1\r\n this._messages = this._messages.slice(newestAckedMessage + 1);\r\n }\r\n }\r\n\r\n public _shouldProcessMessage(message: HubMessage): boolean {\r\n if (this._waitForSequenceMessage) {\r\n if (message.type !== MessageType.Sequence) {\r\n return false;\r\n } else {\r\n this._waitForSequenceMessage = false;\r\n return true;\r\n }\r\n }\r\n\r\n // No special processing for acks, pings, etc.\r\n if (!this._isInvocationMessage(message)) {\r\n return true;\r\n }\r\n\r\n const currentId = this._nextReceivingSequenceId;\r\n this._nextReceivingSequenceId++;\r\n if (currentId <= this._latestReceivedSequenceId) {\r\n if (currentId === this._latestReceivedSequenceId) {\r\n // Should only hit this if we just reconnected and the server is sending\r\n // Messages it has buffered, which would mean it hasn't seen an Ack for these messages\r\n this._ackTimer();\r\n }\r\n // Ignore, this is a duplicate message\r\n return false;\r\n }\r\n\r\n this._latestReceivedSequenceId = currentId;\r\n\r\n // Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves\r\n // timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)\r\n this._ackTimer();\r\n return true;\r\n }\r\n\r\n public _resetSequence(message: SequenceMessage): void {\r\n if (message.sequenceId > this._nextReceivingSequenceId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._connection.stop(new Error(\"Sequence ID greater than amount of messages we've received.\"));\r\n return;\r\n }\r\n\r\n this._nextReceivingSequenceId = message.sequenceId;\r\n }\r\n\r\n public _disconnected(): void {\r\n this._reconnectInProgress = true;\r\n this._waitForSequenceMessage = true;\r\n }\r\n\r\n public async _resend(): Promise {\r\n const sequenceId = this._messages.length !== 0\r\n ? this._messages[0]._id\r\n : this._totalMessageCount + 1;\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Sequence, sequenceId }));\r\n\r\n // Get a local variable to the _messages, just in case messages are acked while resending\r\n // Which would slice the _messages array (which creates a new copy)\r\n const messages = this._messages;\r\n for (const element of messages) {\r\n await this._connection.send(element._message);\r\n }\r\n\r\n this._reconnectInProgress = false;\r\n }\r\n\r\n public _dispose(error?: Error): void {\r\n error ??= new Error(\"Unable to reconnect to server.\")\r\n\r\n // Unblock backpressure if any\r\n for (const element of this._messages) {\r\n element._rejector(error);\r\n }\r\n }\r\n\r\n private _isInvocationMessage(message: HubMessage): boolean {\r\n // There is no way to check if something implements an interface.\r\n // So we individually check the messages in a switch statement.\r\n // To make sure we don't miss any message types we rely on the compiler\r\n // seeing the function returns a value and it will do the\r\n // exhaustive check for us on the switch statement, since we don't use 'case default'\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n case MessageType.StreamInvocation:\r\n case MessageType.CancelInvocation:\r\n return true;\r\n case MessageType.Close:\r\n case MessageType.Sequence:\r\n case MessageType.Ping:\r\n case MessageType.Ack:\r\n return false;\r\n }\r\n }\r\n\r\n private _ackTimer(): void {\r\n if (this._ackTimerHandle === undefined) {\r\n this._ackTimerHandle = setTimeout(async () => {\r\n try {\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Ack, sequenceId: this._latestReceivedSequenceId }))\r\n }\r\n // Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.\r\n } catch { }\r\n\r\n clearTimeout(this._ackTimerHandle);\r\n this._ackTimerHandle = undefined;\r\n // 1 second delay so we don't spam Ack messages if there are many messages being received at once.\r\n }, 1000);\r\n }\r\n }\r\n}\r\n\r\nclass BufferedItem {\r\n constructor(message: string | ArrayBuffer, id: number, resolver: (value: void) => void, rejector: (value?: any) => void) {\r\n this._message = message;\r\n this._id = id;\r\n this._resolver = resolver;\r\n this._rejector = rejector;\r\n }\r\n\r\n _message: string | ArrayBuffer;\r\n _id: number;\r\n _resolver: (value: void) => void;\r\n _rejector: (value?: any) => void;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage } from \"./HandshakeProtocol\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { AbortError } from \"./Errors\";\r\nimport { CancelInvocationMessage, CloseMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStreamResult } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg, getErrorString, Platform } from \"./Utils\";\r\nimport { MessageBuffer } from \"./MessageBuffer\";\r\n\r\nconst DEFAULT_TIMEOUT_IN_MS: number = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS: number = 15 * 1000;\r\nconst DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE = 100_000;\r\n\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport enum HubConnectionState {\r\n /** The hub connection is disconnected. */\r\n Disconnected = \"Disconnected\",\r\n /** The hub connection is connecting. */\r\n Connecting = \"Connecting\",\r\n /** The hub connection is connected. */\r\n Connected = \"Connected\",\r\n /** The hub connection is disconnecting. */\r\n Disconnecting = \"Disconnecting\",\r\n /** The hub connection is reconnecting. */\r\n Reconnecting = \"Reconnecting\",\r\n}\r\n\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n private readonly _cachedPingMessage: string | ArrayBuffer;\r\n // Needs to not start with _ for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private readonly connection: IConnection;\r\n private readonly _logger: ILogger;\r\n private readonly _reconnectPolicy?: IRetryPolicy;\r\n private readonly _statefulReconnectBufferSize: number;\r\n private _protocol: IHubProtocol;\r\n private _handshakeProtocol: HandshakeProtocol;\r\n private _callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };\r\n private _methods: { [name: string]: (((...args: any[]) => void) | ((...args: any[]) => any))[] };\r\n private _invocationId: number;\r\n private _messageBuffer?: MessageBuffer;\r\n\r\n private _closedCallbacks: ((error?: Error) => void)[];\r\n private _reconnectingCallbacks: ((error?: Error) => void)[];\r\n private _reconnectedCallbacks: ((connectionId?: string) => void)[];\r\n\r\n private _receivedHandshakeResponse: boolean;\r\n private _handshakeResolver!: (value?: PromiseLike<{}>) => void;\r\n private _handshakeRejecter!: (reason?: any) => void;\r\n private _stopDuringStartError?: Error;\r\n\r\n private _connectionState: HubConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private _startPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _nextKeepAlive: number = 0;\r\n\r\n // The type of these a) doesn't matter and b) varies when building in browser and node contexts\r\n // Since we're building the WebPack bundle directly from the TypeScript, this matters (previously\r\n // we built the bundle from the compiled JavaScript).\r\n private _reconnectDelayHandle?: any;\r\n private _timeoutHandle?: any;\r\n private _pingServerHandle?: any;\r\n\r\n private _freezeEventListener = () =>\r\n {\r\n this._logger.log(LogLevel.Warning, \"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep\");\r\n };\r\n\r\n /** The server timeout in milliseconds.\r\n *\r\n * If this timeout elapses without receiving any messages from the server, the connection will be terminated with an error.\r\n * The default timeout value is 30,000 milliseconds (30 seconds).\r\n */\r\n public serverTimeoutInMilliseconds: number;\r\n\r\n /** Default interval at which to ping the server.\r\n *\r\n * The default value is 15,000 milliseconds (15 seconds).\r\n * Allows the server to detect hard disconnects (like when a client unplugs their computer).\r\n * The ping will happen at most as often as the server pings.\r\n * If the server pings every 5 seconds, a value lower than 5 will ping every 5 seconds.\r\n */\r\n public keepAliveIntervalInMilliseconds: number;\r\n\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n public static create(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number): HubConnection {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy,\r\n serverTimeoutInMilliseconds, keepAliveIntervalInMilliseconds, statefulReconnectBufferSize);\r\n }\r\n\r\n private constructor(\r\n connection: IConnection,\r\n logger: ILogger,\r\n protocol: IHubProtocol,\r\n reconnectPolicy?: IRetryPolicy,\r\n serverTimeoutInMilliseconds?: number,\r\n keepAliveIntervalInMilliseconds?: number,\r\n statefulReconnectBufferSize?: number) {\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.serverTimeoutInMilliseconds = serverTimeoutInMilliseconds ?? DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = keepAliveIntervalInMilliseconds ?? DEFAULT_PING_INTERVAL_IN_MS;\r\n\r\n this._statefulReconnectBufferSize = statefulReconnectBufferSize ?? DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE;\r\n\r\n this._logger = logger;\r\n this._protocol = protocol;\r\n this.connection = connection;\r\n this._reconnectPolicy = reconnectPolicy;\r\n this._handshakeProtocol = new HandshakeProtocol();\r\n\r\n this.connection.onreceive = (data: any) => this._processIncomingData(data);\r\n this.connection.onclose = (error?: Error) => this._connectionClosed(error);\r\n\r\n this._callbacks = {};\r\n this._methods = {};\r\n this._closedCallbacks = [];\r\n this._reconnectingCallbacks = [];\r\n this._reconnectedCallbacks = [];\r\n this._invocationId = 0;\r\n this._receivedHandshakeResponse = false;\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n\r\n this._cachedPingMessage = this._protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state(): HubConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId(): string | null {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl(): string {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url: string) {\r\n if (this._connectionState !== HubConnectionState.Disconnected && this._connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n\r\n this.connection.baseUrl = url;\r\n }\r\n\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n public start(): Promise {\r\n this._startPromise = this._startWithStateTransitions();\r\n return this._startPromise;\r\n }\r\n\r\n private async _startWithStateTransitions(): Promise {\r\n if (this._connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connecting;\r\n this._logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n if (Platform.isBrowser) {\r\n // Log when the browser freezes the tab so users know why their connection unexpectedly stopped working\r\n window.document.addEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._connectionStarted = true;\r\n this._logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n } catch (e) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _startInternal() {\r\n this._stopDuringStartError = undefined;\r\n this._receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this._handshakeResolver = resolve;\r\n this._handshakeRejecter = reject;\r\n });\r\n\r\n await this.connection.start(this._protocol.transferFormat);\r\n\r\n try {\r\n let version = this._protocol.version;\r\n if (!this.connection.features.reconnect) {\r\n // Stateful Reconnect starts with HubProtocol version 2, newer clients connecting to older servers will fail to connect due to\r\n // the handshake only supporting version 1, so we will try to send version 1 during the handshake to keep old servers working.\r\n version = 1;\r\n }\r\n\r\n const handshakeRequest: HandshakeRequestMessage = {\r\n protocol: this._protocol.name,\r\n version,\r\n };\r\n\r\n this._logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n\r\n await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n\r\n this._logger.log(LogLevel.Information, `Using HubProtocol '${this._protocol.name}'.`);\r\n\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this._cleanupTimeout();\r\n this._resetTimeoutPeriod();\r\n this._resetKeepAliveInterval();\r\n\r\n await handshakePromise;\r\n\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this._stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\r\n throw this._stopDuringStartError;\r\n }\r\n\r\n const useStatefulReconnect = this.connection.features.reconnect || false;\r\n if (useStatefulReconnect) {\r\n this._messageBuffer = new MessageBuffer(this._protocol, this.connection, this._statefulReconnectBufferSize);\r\n this.connection.features.disconnected = this._messageBuffer._disconnected.bind(this._messageBuffer);\r\n this.connection.features.resend = () => {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._resend();\r\n }\r\n }\r\n }\r\n\r\n if (!this.connection.features.inherentKeepAlive) {\r\n await this._sendMessage(this._cachedPingMessage);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n public async stop(): Promise {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this._startPromise;\r\n this.connection.features.reconnect = false;\r\n\r\n this._stopPromise = this._stopInternal();\r\n await this._stopPromise;\r\n\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n\r\n private _stopInternal(error?: Error): Promise {\r\n if (this._connectionState === HubConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise!;\r\n }\r\n\r\n const state = this._connectionState;\r\n this._connectionState = HubConnectionState.Disconnecting;\r\n\r\n this._logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n\r\n if (this._reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this._logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n\r\n clearTimeout(this._reconnectDelayHandle);\r\n this._reconnectDelayHandle = undefined;\r\n\r\n this._completeClose();\r\n return Promise.resolve();\r\n }\r\n\r\n if (state === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._sendCloseMessage();\r\n }\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n this._stopDuringStartError = error || new AbortError(\"The connection was stopped before the hub handshake could complete.\");\r\n\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n\r\n private async _sendCloseMessage() {\r\n try {\r\n await this._sendWithProtocol(this._createCloseMessage());\r\n } catch {\r\n // Ignore, this is a best effort attempt to let the server know the client closed gracefully.\r\n }\r\n }\r\n\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n public stream(methodName: string, ...args: any[]): IStreamResult {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createStreamInvocation(methodName, args, streamIds);\r\n\r\n // eslint-disable-next-line prefer-const\r\n let promiseQueue: Promise;\r\n\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation: CancelInvocationMessage = this._createCancelInvocation(invocationDescriptor.invocationId);\r\n\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n\r\n return promiseQueue.then(() => {\r\n return this._sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n\r\n this._callbacks[invocationDescriptor.invocationId] = (invocationEvent: CompletionMessage | StreamItemMessage | null, error?: Error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n } else {\r\n subject.complete();\r\n }\r\n } else {\r\n subject.next((invocationEvent.item) as T);\r\n }\r\n }\r\n };\r\n\r\n promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this._callbacks[invocationDescriptor.invocationId];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n\r\n return subject;\r\n }\r\n\r\n private _sendMessage(message: any) {\r\n this._resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n private _sendWithProtocol(message: any) {\r\n if (this._messageBuffer) {\r\n return this._messageBuffer._send(message);\r\n } else {\r\n return this._sendMessage(this._protocol.writeMessage(message));\r\n }\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n public send(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const sendPromise = this._sendWithProtocol(this._createInvocation(methodName, args, true, streamIds));\r\n\r\n this._launchStreams(streams, sendPromise);\r\n\r\n return sendPromise;\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n public invoke(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this._replaceStreamingParams(args);\r\n const invocationDescriptor = this._createInvocation(methodName, args, false, streamIds);\r\n\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this._callbacks[invocationDescriptor.invocationId!] = (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n } else {\r\n resolve(invocationEvent.result);\r\n }\r\n } else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n\r\n const promiseQueue = this._sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this._callbacks[invocationDescriptor.invocationId!];\r\n });\r\n\r\n this._launchStreams(streams, promiseQueue);\r\n });\r\n\r\n return p;\r\n }\r\n\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n public on(methodName: string, newMethod: (...args: any[]) => any): void\r\n public on(methodName: string, newMethod: (...args: any[]) => void): void {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n if (!this._methods[methodName]) {\r\n this._methods[methodName] = [];\r\n }\r\n\r\n // Preventing adding the same handler multiple times.\r\n if (this._methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n\r\n this._methods[methodName].push(newMethod);\r\n }\r\n\r\n /** Removes all handlers for the specified hub method.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n */\r\n public off(methodName: string): void;\r\n\r\n /** Removes the specified handler for the specified hub method.\r\n *\r\n * You must pass the exact same Function instance as was previously passed to {@link @microsoft/signalr.HubConnection.on}. Passing a different instance (even if the function\r\n * body is the same) will not remove the handler.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n * @param {Function} method The handler to remove. This must be the same Function instance as the one passed to {@link @microsoft/signalr.HubConnection.on}.\r\n */\r\n public off(methodName: string, method: (...args: any[]) => void): void;\r\n public off(methodName: string, method?: (...args: any[]) => void): void {\r\n if (!methodName) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n const handlers = this._methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this._methods[methodName];\r\n }\r\n }\r\n } else {\r\n delete this._methods[methodName];\r\n }\r\n\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n public onclose(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._closedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n public onreconnecting(callback: (error?: Error) => void): void {\r\n if (callback) {\r\n this._reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n public onreconnected(callback: (connectionId?: string) => void): void {\r\n if (callback) {\r\n this._reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n private _processIncomingData(data: any) {\r\n this._cleanupTimeout();\r\n\r\n if (!this._receivedHandshakeResponse) {\r\n data = this._processHandshakeResponse(data);\r\n this._receivedHandshakeResponse = true;\r\n }\r\n\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this._protocol.parseMessages(data, this._logger);\r\n\r\n for (const message of messages) {\r\n if (this._messageBuffer && !this._messageBuffer._shouldProcessMessage(message)) {\r\n // Don't process the message, we are either waiting for a SequenceMessage or received a duplicate message\r\n continue;\r\n }\r\n\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this._invokeClientMethod(message)\r\n .catch((e) => {\r\n this._logger.log(LogLevel.Error, `Invoke client method threw error: ${getErrorString(e)}`)\r\n });\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion: {\r\n const callback = this._callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this._callbacks[message.invocationId];\r\n }\r\n try {\r\n callback(message);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream callback threw error: ${getErrorString(e)}`);\r\n }\r\n }\r\n break;\r\n }\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close: {\r\n this._logger.log(LogLevel.Information, \"Close message received from server.\");\r\n\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(error);\r\n } else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this._stopPromise = this._stopInternal(error);\r\n }\r\n\r\n break;\r\n }\r\n case MessageType.Ack:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._ack(message);\r\n }\r\n break;\r\n case MessageType.Sequence:\r\n if (this._messageBuffer) {\r\n this._messageBuffer._resetSequence(message);\r\n }\r\n break;\r\n default:\r\n this._logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this._resetTimeoutPeriod();\r\n }\r\n\r\n private _processHandshakeResponse(data: any): any {\r\n let responseMessage: HandshakeResponseMessage;\r\n let remainingData: any;\r\n\r\n try {\r\n [remainingData, responseMessage] = this._handshakeProtocol.parseHandshakeResponse(data);\r\n } catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this._handshakeRejecter(error);\r\n throw error;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n\r\n this._handshakeResolver();\r\n return remainingData;\r\n }\r\n\r\n private _resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this._nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n\r\n this._cleanupPingTimer();\r\n }\r\n\r\n private _resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this._timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n\r\n // Immediately fire Keep-Alive ping if nextPing is overdue to avoid dependency on JS timers\r\n let nextPing = this._nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._trySendPingMessage();\r\n }\r\n return;\r\n }\r\n\r\n // Set keepAlive timer if there isn't one\r\n if (this._pingServerHandle === undefined)\r\n {\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this._pingServerHandle = setTimeout(async () => {\r\n if (this._connectionState === HubConnectionState.Connected) {\r\n await this._trySendPingMessage();\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n\r\n private async _invokeClientMethod(invocationMessage: InvocationMessage) {\r\n const methodName = invocationMessage.target.toLowerCase();\r\n const methods = this._methods[methodName];\r\n if (!methods) {\r\n this._logger.log(LogLevel.Warning, `No client method with the name '${methodName}' found.`);\r\n\r\n // No handlers provided by client but the server is expecting a response still, so we send an error\r\n if (invocationMessage.invocationId) {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n await this._sendWithProtocol(this._createCompletionMessage(invocationMessage.invocationId, \"Client didn't provide a result.\", null));\r\n }\r\n return;\r\n }\r\n\r\n // Avoid issues with handlers removing themselves thus modifying the list while iterating through it\r\n const methodsCopy = methods.slice();\r\n\r\n // Server expects a response\r\n const expectsResponse = invocationMessage.invocationId ? true : false;\r\n // We preserve the last result or exception but still call all handlers\r\n let res;\r\n let exception;\r\n let completionMessage;\r\n for (const m of methodsCopy) {\r\n try {\r\n const prevRes = res;\r\n res = await m.apply(this, invocationMessage.arguments);\r\n if (expectsResponse && res && prevRes) {\r\n this._logger.log(LogLevel.Error, `Multiple results provided for '${methodName}'. Sending error to server.`);\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `Client provided multiple results.`, null);\r\n }\r\n // Ignore exception if we got a result after, the exception will be logged\r\n exception = undefined;\r\n } catch (e) {\r\n exception = e;\r\n this._logger.log(LogLevel.Error, `A callback for the method '${methodName}' threw error '${e}'.`);\r\n }\r\n }\r\n if (completionMessage) {\r\n await this._sendWithProtocol(completionMessage);\r\n } else if (expectsResponse) {\r\n // If there is an exception that means either no result was given or a handler after a result threw\r\n if (exception) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, `${exception}`, null);\r\n } else if (res !== undefined) {\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, null, res);\r\n } else {\r\n this._logger.log(LogLevel.Warning, `No result given for '${methodName}' method and invocation ID '${invocationMessage.invocationId}'.`);\r\n // Client didn't provide a result or throw from a handler, server expects a response so we send an error\r\n completionMessage = this._createCompletionMessage(invocationMessage.invocationId!, \"Client didn't provide a result.\", null);\r\n }\r\n await this._sendWithProtocol(completionMessage);\r\n } else {\r\n if (res) {\r\n this._logger.log(LogLevel.Error, `Result given for '${methodName}' method but server is not expecting a result.`);\r\n }\r\n }\r\n }\r\n\r\n private _connectionClosed(error?: Error) {\r\n this._logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this._connectionState}.`);\r\n\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this._stopDuringStartError = this._stopDuringStartError || error || new AbortError(\"The underlying connection was closed before the hub handshake could complete.\");\r\n\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this._handshakeResolver) {\r\n this._handshakeResolver();\r\n }\r\n\r\n this._cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n\r\n this._cleanupTimeout();\r\n this._cleanupPingTimer();\r\n\r\n if (this._connectionState === HubConnectionState.Disconnecting) {\r\n this._completeClose(error);\r\n } else if (this._connectionState === HubConnectionState.Connected && this._reconnectPolicy) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._reconnect(error);\r\n } else if (this._connectionState === HubConnectionState.Connected) {\r\n this._completeClose(error);\r\n }\r\n\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n\r\n private _completeClose(error?: Error) {\r\n if (this._connectionStarted) {\r\n this._connectionState = HubConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n if (this._messageBuffer) {\r\n this._messageBuffer._dispose(error ?? new Error(\"Connection closed.\"));\r\n this._messageBuffer = undefined;\r\n }\r\n\r\n if (Platform.isBrowser) {\r\n window.document.removeEventListener(\"freeze\", this._freezeEventListener);\r\n }\r\n\r\n try {\r\n this._closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private async _reconnect(error?: Error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n\r\n let nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts, 0, retryError);\r\n\r\n if (nextRetryDelay === null) {\r\n this._logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this._completeClose(error);\r\n return;\r\n }\r\n\r\n this._connectionState = HubConnectionState.Reconnecting;\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n\r\n if (this._reconnectingCallbacks.length !== 0) {\r\n try {\r\n this._reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n\r\n while (nextRetryDelay !== null) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts + 1} will start in ${nextRetryDelay} ms.`);\r\n\r\n await new Promise((resolve) => {\r\n this._reconnectDelayHandle = setTimeout(resolve, nextRetryDelay!);\r\n });\r\n this._reconnectDelayHandle = undefined;\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n\r\n try {\r\n await this._startInternal();\r\n\r\n this._connectionState = HubConnectionState.Connected;\r\n this._logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n\r\n if (this._reconnectedCallbacks.length !== 0) {\r\n try {\r\n this._reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n\r\n return;\r\n } catch (e) {\r\n this._logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n\r\n if (this._connectionState !== HubConnectionState.Reconnecting) {\r\n this._logger.log(LogLevel.Debug, `Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === HubConnectionState.Disconnecting) {\r\n this._completeClose();\r\n }\r\n return;\r\n }\r\n\r\n previousReconnectAttempts++;\r\n retryError = e instanceof Error ? e : new Error((e as any).toString());\r\n nextRetryDelay = this._getNextRetryDelay(previousReconnectAttempts, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n\r\n this._completeClose();\r\n }\r\n\r\n private _getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {\r\n try {\r\n return this._reconnectPolicy!.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n private _cancelCallbacksWithError(error: Error) {\r\n const callbacks = this._callbacks;\r\n this._callbacks = {};\r\n\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n try {\r\n callback(null, error);\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `Stream 'error' callback called with '${error}' threw error: ${getErrorString(e)}`);\r\n }\r\n });\r\n }\r\n\r\n private _cleanupPingTimer(): void {\r\n if (this._pingServerHandle) {\r\n clearTimeout(this._pingServerHandle);\r\n this._pingServerHandle = undefined;\r\n }\r\n }\r\n\r\n private _cleanupTimeout(): void {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n private _createInvocation(methodName: string, args: any[], nonblocking: boolean, streamIds: string[]): InvocationMessage {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n } else {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n\r\n private _launchStreams(streams: IStreamResult[], promiseQueue: Promise): void {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // eslint-disable-next-line guard-for-in\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message: string;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n } else if (err && err.toString) {\r\n message = err.toString();\r\n } else {\r\n message = \"Unknown error\";\r\n }\r\n\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this._sendWithProtocol(this._createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n\r\n private _replaceStreamingParams(args: any[]): [IStreamResult[], string[]] {\r\n const streams: IStreamResult[] = [];\r\n const streamIds: string[] = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this._isObservable(argument)) {\r\n const streamId = this._invocationId;\r\n this._invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n\r\n return [streams, streamIds];\r\n }\r\n\r\n private _isObservable(arg: any): arg is IStreamResult {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n\r\n private _createStreamInvocation(methodName: string, args: any[], streamIds: string[]): StreamInvocationMessage {\r\n const invocationId = this._invocationId;\r\n this._invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n type: MessageType.StreamInvocation,\r\n };\r\n } else {\r\n return {\r\n target: methodName,\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n\r\n private _createCancelInvocation(id: string): CancelInvocationMessage {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n\r\n private _createStreamItemMessage(id: string, item: any): StreamItemMessage {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n\r\n private _createCompletionMessage(id: string, error?: any, result?: any): CompletionMessage {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n private _createCloseMessage(): CloseMessage {\r\n return { type: MessageType.Close };\r\n }\r\n\r\n private async _trySendPingMessage(): Promise {\r\n try {\r\n await this._sendMessage(this._cachedPingMessage);\r\n } catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this._cleanupPingTimer();\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\n\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n\r\n/** @private */\r\nexport class DefaultReconnectPolicy implements IRetryPolicy {\r\n private readonly _retryDelays: (number | null)[];\r\n\r\n constructor(retryDelays?: number[]) {\r\n this._retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n\r\n public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {\r\n return this._retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nexport abstract class HeaderNames {\r\n static readonly Authorization = \"Authorization\";\r\n static readonly Cookie = \"Cookie\";\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\n\r\n/** @private */\r\nexport class AccessTokenHttpClient extends HttpClient {\r\n private _innerClient: HttpClient;\r\n _accessToken: string | undefined;\r\n _accessTokenFactory: (() => string | Promise) | undefined;\r\n\r\n constructor(innerClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined) {\r\n super();\r\n\r\n this._innerClient = innerClient;\r\n this._accessTokenFactory = accessTokenFactory;\r\n }\r\n\r\n public async send(request: HttpRequest): Promise {\r\n let allowRetry = true;\r\n if (this._accessTokenFactory && (!this._accessToken || (request.url && request.url.indexOf(\"/negotiate?\") > 0))) {\r\n // don't retry if the request is a negotiate or if we just got a potentially new token from the access token factory\r\n allowRetry = false;\r\n this._accessToken = await this._accessTokenFactory();\r\n }\r\n this._setAuthorizationHeader(request);\r\n const response = await this._innerClient.send(request);\r\n\r\n if (allowRetry && response.statusCode === 401 && this._accessTokenFactory) {\r\n this._accessToken = await this._accessTokenFactory();\r\n this._setAuthorizationHeader(request);\r\n return await this._innerClient.send(request);\r\n }\r\n return response;\r\n }\r\n\r\n private _setAuthorizationHeader(request: HttpRequest) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (this._accessToken) {\r\n request.headers[HeaderNames.Authorization] = `Bearer ${this._accessToken}`\r\n }\r\n // don't remove the header if there isn't an access token factory, the user manually added the header in this case\r\n else if (this._accessTokenFactory) {\r\n if (request.headers[HeaderNames.Authorization]) {\r\n delete request.headers[HeaderNames.Authorization];\r\n }\r\n }\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this._innerClient.getCookieString(url);\r\n }\r\n}", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport enum HttpTransportType {\r\n /** Specifies no transport preference. */\r\n None = 0,\r\n /** Specifies the WebSockets transport. */\r\n WebSockets = 1,\r\n /** Specifies the Server-Sent Events transport. */\r\n ServerSentEvents = 2,\r\n /** Specifies the Long Polling transport. */\r\n LongPolling = 4,\r\n}\r\n\r\n/** Specifies the transfer format for a connection. */\r\nexport enum TransferFormat {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n Text = 1,\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n Binary = 2,\r\n}\r\n\r\n/** An abstraction over the behavior of transports. This is designed to support the framework and not intended for use by applications. */\r\nexport interface ITransport {\r\n connect(url: string, transferFormat: TransferFormat): Promise;\r\n send(data: any): Promise;\r\n stop(): Promise;\r\n onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n onclose: ((error?: Error) => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController implements AbortSignal {\r\n private _isAborted: boolean = false;\r\n public onabort: (() => void) | null = null;\r\n\r\n public abort(): void {\r\n if (!this._isAborted) {\r\n this._isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n\r\n get signal(): AbortSignal {\r\n return this;\r\n }\r\n\r\n get aborted(): boolean {\r\n return this._isAborted;\r\n }\r\n}\r\n\r\n/** Represents a signal that can be monitored to determine if a request has been aborted. */\r\nexport interface AbortSignal {\r\n /** Indicates if the request has been aborted. */\r\n aborted: boolean;\r\n /** Set this to a handler that will be invoked when the request is aborted. */\r\n onabort: (() => void) | null;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private readonly _pollAbort: AbortController;\r\n\r\n private _url?: string;\r\n private _running: boolean;\r\n private _receiving?: Promise;\r\n private _closeError?: Error | unknown;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n public get pollAborted(): boolean {\r\n return this._pollAbort.aborted;\r\n }\r\n\r\n constructor(httpClient: HttpClient, logger: ILogger, options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n\r\n this._running = false;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._url = url;\r\n\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n\r\n const pollOptions: HttpRequest = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n this._running = true;\r\n }\r\n\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n\r\n private async _poll(url: string, pollOptions: HttpRequest): Promise {\r\n try {\r\n while (this._running) {\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n\r\n this._running = false;\r\n } else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n } else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent!)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n } else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n } catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${(e as any).message}`);\r\n } else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n } else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public async stop(): Promise {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n\r\n try {\r\n await this._receiving;\r\n\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const deleteOptions: HttpRequest = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n\r\n let error;\r\n try {\r\n await this._httpClient.delete(this._url!, deleteOptions);\r\n } catch (err) {\r\n error = err;\r\n }\r\n\r\n if (error) {\r\n if (error instanceof HttpError) {\r\n if (error.statusCode === 404) {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) A 404 response was returned from sending a DELETE request.\");\r\n } else {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request accepted.\");\r\n }\r\n\r\n } finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n\r\n private _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\n\r\n/** @private */\r\nexport class ServerSentEventsTransport implements ITransport {\r\n private readonly _httpClient: HttpClient;\r\n private readonly _accessToken: string | undefined;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n private _eventSource?: EventSource;\r\n private _url?: string;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error | unknown) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessToken: string | undefined, logger: ILogger,\r\n options: IHttpConnectionOptions) {\r\n this._httpClient = httpClient;\r\n this._accessToken = accessToken;\r\n this._logger = logger;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n\r\n // set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n\r\n if (this._accessToken) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(this._accessToken)}`;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n\r\n let eventSource: EventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials });\r\n } else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers: MessageHeaders = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n eventSource = new this._options.EventSource!(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers} } as EventSourceInit);\r\n }\r\n\r\n try {\r\n eventSource.onmessage = (e: MessageEvent) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent!)}.`);\r\n this.onreceive(e.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e: Event) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n } else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n } catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url!, data, this._options);\r\n }\r\n\r\n public stop(): Promise {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(e?: Error | unknown) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { WebSocketConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class WebSocketTransport implements ITransport {\r\n private readonly _logger: ILogger;\r\n private readonly _accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly _logMessageContent: boolean;\r\n private readonly _webSocketConstructor: WebSocketConstructor;\r\n private readonly _httpClient: HttpClient;\r\n private _webSocket?: WebSocket;\r\n private _headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n logMessageContent: boolean, webSocketConstructor: WebSocketConstructor, headers: MessageHeaders) {\r\n this._logger = logger;\r\n this._accessTokenFactory = accessTokenFactory;\r\n this._logMessageContent = logMessageContent;\r\n this._webSocketConstructor = webSocketConstructor;\r\n this._httpClient = httpClient;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this._headers = headers;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n\r\n let token: string;\r\n if (this._accessTokenFactory) {\r\n token = await this._accessTokenFactory();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket: WebSocket | undefined;\r\n const cookies = this._httpClient.getCookieString(url);\r\n let opened = false;\r\n\r\n if (Platform.isNode || Platform.isReactNative) {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n if (token) {\r\n headers[HeaderNames.Authorization] = `Bearer ${token}`;\r\n }\r\n\r\n if (cookies) {\r\n headers[HeaderNames.Cookie] = cookies;\r\n }\r\n\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this._webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this._headers },\r\n });\r\n }\r\n else\r\n {\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this._webSocketConstructor(url);\r\n }\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n\r\n webSocket.onopen = (_event: Event) => {\r\n this._logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this._webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n\r\n webSocket.onerror = (event: Event) => {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"There was an error with the transport\";\r\n }\r\n\r\n this._logger.log(LogLevel.Information, `(WebSockets transport) ${error}.`);\r\n };\r\n\r\n webSocket.onmessage = (message: MessageEvent) => {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this._logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n } catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n webSocket.onclose = (event: CloseEvent) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this._close(event);\r\n } else {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = \"WebSocket failed to connect. The connection could not be found on the server,\"\r\n + \" either the endpoint may not be a SignalR endpoint,\"\r\n + \" the connection ID is not present on the server, or there is a proxy blocking WebSockets.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\";\r\n }\r\n\r\n reject(new Error(error));\r\n }\r\n };\r\n });\r\n }\r\n\r\n public send(data: any): Promise {\r\n if (this._webSocket && this._webSocket.readyState === this._webSocketConstructor.OPEN) {\r\n this._logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this._logMessageContent)}.`);\r\n this._webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n\r\n public stop(): Promise {\r\n if (this._webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this._close(undefined);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private _close(event: CloseEvent | Error | unknown): void {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this._webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this._webSocket.onclose = () => {};\r\n this._webSocket.onmessage = () => {};\r\n this._webSocket.onerror = () => {};\r\n this._webSocket.close();\r\n this._webSocket = undefined;\r\n }\r\n\r\n this._logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n\r\n if (this.onclose) {\r\n if (this._isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason || \"no reason given\"}).`));\r\n } else if (event instanceof Error) {\r\n this.onclose(event);\r\n } else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n\r\n private _isCloseEvent(event?: any): event is CloseEvent {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AccessTokenHttpClient } from \"./AccessTokenHttpClient\";\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { AggregateErrors, DisabledTransportError, FailedToNegotiateWithServerError, FailedToStartTransportError, HttpError, UnsupportedTransportError, AbortError } from \"./Errors\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, ITransport, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\n\r\n/** @private */\r\nconst enum ConnectionState {\r\n Connecting = \"Connecting\",\r\n Connected = \"Connected\",\r\n Disconnected = \"Disconnected\",\r\n Disconnecting = \"Disconnecting\",\r\n}\r\n\r\n/** @private */\r\nexport interface INegotiateResponse {\r\n connectionId?: string;\r\n connectionToken?: string;\r\n negotiateVersion?: number;\r\n availableTransports?: IAvailableTransport[];\r\n url?: string;\r\n accessToken?: string;\r\n error?: string;\r\n useStatefulReconnect?: boolean;\r\n}\r\n\r\n/** @private */\r\nexport interface IAvailableTransport {\r\n transport: keyof typeof HttpTransportType;\r\n transferFormats: (keyof typeof TransferFormat)[];\r\n}\r\n\r\nconst MAX_REDIRECTS = 100;\r\n\r\n/** @private */\r\nexport class HttpConnection implements IConnection {\r\n private _connectionState: ConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private _connectionStarted: boolean;\r\n private readonly _httpClient: AccessTokenHttpClient;\r\n private readonly _logger: ILogger;\r\n private readonly _options: IHttpConnectionOptions;\r\n // Needs to not start with _ to be available for tests\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private transport?: ITransport;\r\n private _startInternalPromise?: Promise;\r\n private _stopPromise?: Promise;\r\n private _stopPromiseResolver: (value?: PromiseLike) => void = () => {};\r\n private _stopError?: Error;\r\n private _accessTokenFactory?: () => string | Promise;\r\n private _sendQueue?: TransportSendQueue;\r\n\r\n public readonly features: any = {};\r\n public baseUrl: string;\r\n public connectionId?: string;\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((e?: Error) => void) | null;\r\n\r\n private readonly _negotiateVersion: number = 1;\r\n\r\n constructor(url: string, options: IHttpConnectionOptions = {}) {\r\n Arg.isRequired(url, \"url\");\r\n\r\n this._logger = createLogger(options.logger);\r\n this.baseUrl = this._resolveUrl(url);\r\n\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n } else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n options.timeout = options.timeout === undefined ? 100 * 1000 : options.timeout;\r\n\r\n let webSocketModule: any = null;\r\n let eventSourceModule: any = null;\r\n\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n } else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n } else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n\r\n this._httpClient = new AccessTokenHttpClient(options.httpClient || new DefaultHttpClient(this._logger), options.accessTokenFactory);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this._connectionStarted = false;\r\n this._options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public start(): Promise;\r\n public start(transferFormat: TransferFormat): Promise;\r\n public async start(transferFormat?: TransferFormat): Promise {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this._logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n\r\n if (this._connectionState !== ConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this._connectionState = ConnectionState.Connecting;\r\n\r\n this._startInternalPromise = this._startInternal(transferFormat);\r\n await this._startInternalPromise;\r\n\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this._connectionState as any === ConnectionState.Disconnecting) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this._logger.log(LogLevel.Error, message);\r\n\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this._stopPromise;\r\n\r\n return Promise.reject(new AbortError(message));\r\n } else if (this._connectionState as any !== ConnectionState.Connected) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this._logger.log(LogLevel.Error, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n\r\n this._connectionStarted = true;\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n if (this._connectionState !== ConnectionState.Connected) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n\r\n if (!this._sendQueue) {\r\n this._sendQueue = new TransportSendQueue(this.transport!);\r\n }\r\n\r\n // Transport will not be null if state is connected\r\n return this._sendQueue.send(data);\r\n }\r\n\r\n public async stop(error?: Error): Promise {\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this._stopPromise;\r\n }\r\n\r\n this._connectionState = ConnectionState.Disconnecting;\r\n\r\n this._stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this._stopPromiseResolver = resolve;\r\n });\r\n\r\n // stopInternal should never throw so just observe it.\r\n await this._stopInternal(error);\r\n await this._stopPromise;\r\n }\r\n\r\n private async _stopInternal(error?: Error): Promise {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this._stopError = error;\r\n\r\n try {\r\n await this._startInternalPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this._stopConnection();\r\n }\r\n\r\n this.transport = undefined;\r\n } else {\r\n this._logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n\r\n private async _startInternal(transferFormat: TransferFormat): Promise {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this._accessTokenFactory = this._options.accessTokenFactory;\r\n this._httpClient._accessTokenFactory = this._accessTokenFactory;\r\n\r\n try {\r\n if (this._options.skipNegotiation) {\r\n if (this._options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this._constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this._startTransport(url, transferFormat);\r\n } else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n } else {\r\n let negotiateResponse: INegotiateResponse | null = null;\r\n let redirects = 0;\r\n\r\n do {\r\n negotiateResponse = await this._getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this._connectionState === ConnectionState.Disconnecting || this._connectionState === ConnectionState.Disconnected) {\r\n throw new AbortError(\"The connection was stopped during negotiation.\");\r\n }\r\n\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n\r\n if ((negotiateResponse as any).ProtocolVersion) {\r\n throw new Error(\"Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.\");\r\n }\r\n\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this._accessTokenFactory = () => accessToken;\r\n // set the factory to undefined so the AccessTokenHttpClient won't retry with the same token, since we know it won't change until a connection restart\r\n this._httpClient._accessToken = accessToken;\r\n this._httpClient._accessTokenFactory = undefined;\r\n }\r\n\r\n redirects++;\r\n }\r\n while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n\r\n await this._createTransport(url, this._options.transport, negotiateResponse, transferFormat);\r\n }\r\n\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this._logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this._connectionState = ConnectionState.Connected;\r\n }\r\n\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this._connectionState = ConnectionState.Disconnected;\r\n this.transport = undefined;\r\n\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this._stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async _getNegotiationResponse(url: string): Promise {\r\n const headers: {[k: string]: string} = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const negotiateUrl = this._resolveNegotiateUrl(url);\r\n this._logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this._httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n });\r\n\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n\r\n const negotiateResponse = JSON.parse(response.content as string) as INegotiateResponse;\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n\r\n if (negotiateResponse.useStatefulReconnect && this._options._useStatefulReconnect !== true) {\r\n return Promise.reject(new FailedToNegotiateWithServerError(\"Client didn't negotiate Stateful Reconnect but the server did.\"));\r\n }\r\n\r\n return negotiateResponse;\r\n } catch (e) {\r\n let errorMessage = \"Failed to complete negotiation with the server: \" + e;\r\n if (e instanceof HttpError) {\r\n if (e.statusCode === 404) {\r\n errorMessage = errorMessage + \" Either this is not a SignalR endpoint or there is a proxy blocking the connection.\";\r\n }\r\n }\r\n this._logger.log(LogLevel.Error, errorMessage);\r\n\r\n return Promise.reject(new FailedToNegotiateWithServerError(errorMessage));\r\n }\r\n }\r\n\r\n private _createConnectUrl(url: string, connectionToken: string | null | undefined) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n\r\n private async _createTransport(url: string, requestedTransport: HttpTransportType | ITransport | undefined, negotiateResponse: INegotiateResponse, requestedTransferFormat: TransferFormat): Promise {\r\n let connectUrl = this._createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this._isITransport(requestedTransport)) {\r\n this._logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n\r\n const transportExceptions: any[] = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate: INegotiateResponse | undefined = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this._resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat,\r\n negotiate?.useStatefulReconnect === true);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed:`);\r\n transportExceptions.push(transportOrError);\r\n } else if (this._isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this._getNegotiationResponse(url);\r\n } catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this._createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this._startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n } catch (ex) {\r\n this._logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(new FailedToStartTransportError(`${endpoint.transport} failed: ${ex}`, HttpTransportType[endpoint.transport]));\r\n\r\n if (this._connectionState !== ConnectionState.Connecting) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this._logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new AbortError(message));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new AggregateErrors(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`, transportExceptions));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n\r\n private _constructTransport(transport: HttpTransportType): ITransport {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this._options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this._httpClient, this._accessTokenFactory, this._logger, this._options.logMessageContent!,\r\n this._options.WebSocket, this._options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this._options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this._httpClient, this._httpClient._accessToken, this._logger, this._options);\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this._httpClient, this._logger, this._options);\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n\r\n private _startTransport(url: string, transferFormat: TransferFormat): Promise {\r\n this.transport!.onreceive = this.onreceive;\r\n if (this.features.reconnect) {\r\n this.transport!.onclose = async (e) => {\r\n let callStop = false;\r\n if (this.features.reconnect) {\r\n try {\r\n this.features.disconnected();\r\n await this.transport!.connect(url, transferFormat);\r\n await this.features.resend();\r\n } catch {\r\n callStop = true;\r\n }\r\n } else {\r\n this._stopConnection(e);\r\n return;\r\n }\r\n\r\n if (callStop) {\r\n this._stopConnection(e);\r\n }\r\n };\r\n } else {\r\n this.transport!.onclose = (e) => this._stopConnection(e);\r\n }\r\n return this.transport!.connect(url, transferFormat);\r\n }\r\n\r\n private _resolveTransportOrError(endpoint: IAvailableTransport, requestedTransport: HttpTransportType | undefined,\r\n requestedTransferFormat: TransferFormat, useStatefulReconnect: boolean): ITransport | Error | unknown {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n } else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this._options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this._options.EventSource)) {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new UnsupportedTransportError(`'${HttpTransportType[transport]}' is not supported in your environment.`, transport);\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n this.features.reconnect = transport === HttpTransportType.WebSockets ? useStatefulReconnect : undefined;\r\n return this._constructTransport(transport);\r\n } catch (ex) {\r\n return ex;\r\n }\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n } else {\r\n this._logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new DisabledTransportError(`'${HttpTransportType[transport]}' is disabled by the client.`, transport);\r\n }\r\n }\r\n }\r\n\r\n private _isITransport(transport: any): transport is ITransport {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n\r\n private _stopConnection(error?: Error): void {\r\n this._logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this._connectionState}.`);\r\n\r\n this.transport = undefined;\r\n\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this._stopError || error;\r\n this._stopError = undefined;\r\n\r\n if (this._connectionState === ConnectionState.Disconnected) {\r\n this._logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Connecting) {\r\n this._logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n\r\n if (this._connectionState === ConnectionState.Disconnecting) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this._stopPromiseResolver();\r\n }\r\n\r\n if (error) {\r\n this._logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n } else {\r\n this._logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n\r\n if (this._sendQueue) {\r\n this._sendQueue.stop().catch((e) => {\r\n this._logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this._sendQueue = undefined;\r\n }\r\n\r\n this.connectionId = undefined;\r\n this._connectionState = ConnectionState.Disconnected;\r\n\r\n if (this._connectionStarted) {\r\n this._connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n } catch (e) {\r\n this._logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private _resolveUrl(url: string): string {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n\r\n if (!Platform.isBrowser) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n\r\n this._logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n\r\n private _resolveNegotiateUrl(url: string): string {\r\n const negotiateUrl = new URL(url);\r\n\r\n if (negotiateUrl.pathname.endsWith('/')) {\r\n negotiateUrl.pathname += \"negotiate\";\r\n } else {\r\n negotiateUrl.pathname += \"/negotiate\";\r\n }\r\n const searchParams = new URLSearchParams(negotiateUrl.searchParams);\r\n\r\n if (!searchParams.has(\"negotiateVersion\")) {\r\n searchParams.append(\"negotiateVersion\", this._negotiateVersion.toString());\r\n }\r\n\r\n if (searchParams.has(\"useStatefulReconnect\")) {\r\n if (searchParams.get(\"useStatefulReconnect\") === \"true\") {\r\n this._options._useStatefulReconnect = true;\r\n }\r\n } else if (this._options._useStatefulReconnect === true) {\r\n searchParams.append(\"useStatefulReconnect\", \"true\");\r\n }\r\n\r\n negotiateUrl.search = searchParams.toString();\r\n\r\n return negotiateUrl.toString();\r\n }\r\n}\r\n\r\nfunction transportMatches(requestedTransport: HttpTransportType | undefined, actualTransport: HttpTransportType) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n\r\n/** @private */\r\nexport class TransportSendQueue {\r\n private _buffer: any[] = [];\r\n private _sendBufferedData: PromiseSource;\r\n private _executing: boolean = true;\r\n private _transportResult?: PromiseSource;\r\n private _sendLoopPromise: Promise;\r\n\r\n constructor(private readonly _transport: ITransport) {\r\n this._sendBufferedData = new PromiseSource();\r\n this._transportResult = new PromiseSource();\r\n\r\n this._sendLoopPromise = this._sendLoop();\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n this._bufferData(data);\r\n if (!this._transportResult) {\r\n this._transportResult = new PromiseSource();\r\n }\r\n return this._transportResult.promise;\r\n }\r\n\r\n public stop(): Promise {\r\n this._executing = false;\r\n this._sendBufferedData.resolve();\r\n return this._sendLoopPromise;\r\n }\r\n\r\n private _bufferData(data: string | ArrayBuffer): void {\r\n if (this._buffer.length && typeof(this._buffer[0]) !== typeof(data)) {\r\n throw new Error(`Expected data to be of type ${typeof(this._buffer)} but was of type ${typeof(data)}`);\r\n }\r\n\r\n this._buffer.push(data);\r\n this._sendBufferedData.resolve();\r\n }\r\n\r\n private async _sendLoop(): Promise {\r\n while (true) {\r\n await this._sendBufferedData.promise;\r\n\r\n if (!this._executing) {\r\n if (this._transportResult) {\r\n this._transportResult.reject(\"Connection stopped.\");\r\n }\r\n\r\n break;\r\n }\r\n\r\n this._sendBufferedData = new PromiseSource();\r\n\r\n const transportResult = this._transportResult!;\r\n this._transportResult = undefined;\r\n\r\n const data = typeof(this._buffer[0]) === \"string\" ?\r\n this._buffer.join(\"\") :\r\n TransportSendQueue._concatBuffers(this._buffer);\r\n\r\n this._buffer.length = 0;\r\n\r\n try {\r\n await this._transport.send(data);\r\n transportResult.resolve();\r\n } catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n\r\n private static _concatBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n\r\n return result.buffer;\r\n }\r\n}\r\n\r\nclass PromiseSource {\r\n private _resolver?: () => void;\r\n private _rejecter!: (reason?: any) => void;\r\n public promise: Promise;\r\n\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this._resolver, this._rejecter] = [resolve, reject]);\r\n }\r\n\r\n public resolve(): void {\r\n this._resolver!();\r\n }\r\n\r\n public reject(reason?: any): void {\r\n this._rejecter!(reason);\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { AckMessage, CompletionMessage, HubMessage, IHubProtocol, InvocationMessage, MessageType, SequenceMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\n\r\nconst JSON_HUB_PROTOCOL_NAME: string = \"json\";\r\n\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol implements IHubProtocol {\r\n\r\n /** @inheritDoc */\r\n public readonly name: string = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n public readonly version: number = 2;\r\n\r\n /** @inheritDoc */\r\n public readonly transferFormat: TransferFormat = TransferFormat.Text;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n public parseMessages(input: string, logger: ILogger): HubMessage[] {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message) as HubMessage;\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n case MessageType.Ack:\r\n this._isAckMessage(parsedMessage);\r\n break;\r\n case MessageType.Sequence:\r\n this._isSequenceMessage(parsedMessage);\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n\r\n return hubMessages;\r\n }\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n public writeMessage(message: HubMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n\r\n private _isInvocationMessage(message: InvocationMessage): void {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n\r\n private _isStreamItemMessage(message: StreamItemMessage): void {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n\r\n private _isCompletionMessage(message: CompletionMessage): void {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n private _isAckMessage(message: AckMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Ack message.\");\r\n }\r\n }\r\n\r\n private _isSequenceMessage(message: SequenceMessage): void {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Sequence message.\");\r\n }\r\n }\r\n\r\n private _assertNotEmptyString(value: any, errorMessage: string): void {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { IHubProtocol } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStatefulReconnectOptions } from \"./IStatefulReconnectOptions\";\r\nimport { HttpTransportType } from \"./ITransport\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n\r\nconst LogLevelNameMapping: {[k: string]: LogLevel} = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\n\r\nfunction parseLogLevel(name: string): LogLevel {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n } else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n private _serverTimeoutInMilliseconds?: number;\r\n private _keepAliveIntervalInMilliseconds ?: number;\r\n\r\n /** @internal */\r\n public protocol?: IHubProtocol;\r\n /** @internal */\r\n public httpConnectionOptions?: IHttpConnectionOptions;\r\n /** @internal */\r\n public url?: string;\r\n /** @internal */\r\n public logger?: ILogger;\r\n\r\n /** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */\r\n /** @internal */\r\n public reconnectPolicy?: IRetryPolicy;\r\n\r\n private _statefulReconnectBufferSize?: number;\r\n\r\n /** Configures console logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel} logLevel The minimum level of messages to log. Anything at this level, or a more severe level, will be logged.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logLevel: LogLevel): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {ILogger} logger An object implementing the {@link @microsoft/signalr.ILogger} interface, which will be used to write all log messages.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logger: ILogger): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {string} logLevel A string representing a LogLevel setting a minimum level of messages to log.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n */\r\n public configureLogging(logLevel: string): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel | string | ILogger} logging A {@link @microsoft/signalr.LogLevel}, a string representing a LogLevel, or an object implementing the {@link @microsoft/signalr.ILogger} interface.\r\n * See {@link https://learn.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder;\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder {\r\n Arg.isRequired(logging, \"logging\");\r\n\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n } else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n } else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * The transport will be selected automatically based on what the server and client support.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified HTTP-based transport to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {HttpTransportType} transportType The specific transport to use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, transportType: HttpTransportType): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {IHttpConnectionOptions} options An options object used to configure the connection.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, options: IHttpConnectionOptions): HubConnectionBuilder;\r\n public withUrl(url: string, transportTypeOrOptions?: IHttpConnectionOptions | HttpTransportType): HubConnectionBuilder {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n\r\n this.url = url;\r\n\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n } else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n public withHubProtocol(protocol: IHubProtocol): HubConnectionBuilder {\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n * By default, the client will wait 0, 2, 10 and 30 seconds respectively before trying up to 4 reconnect attempts.\r\n */\r\n public withAutomaticReconnect(): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {number[]} retryDelays An array containing the delays in milliseconds before trying each reconnect attempt.\r\n * The length of the array represents how many failed reconnect attempts it takes before the client will stop attempting to reconnect.\r\n */\r\n public withAutomaticReconnect(retryDelays: number[]): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {IRetryPolicy} reconnectPolicy An {@link @microsoft/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.\r\n */\r\n public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;\r\n public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n } else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n } else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.serverTimeoutInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withServerTimeout(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._serverTimeoutInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Configures {@link @microsoft/signalr.HubConnection.keepAliveIntervalInMilliseconds} for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withKeepAliveInterval(milliseconds: number): HubConnectionBuilder {\r\n Arg.isRequired(milliseconds, \"milliseconds\");\r\n\r\n this._keepAliveIntervalInMilliseconds = milliseconds;\r\n\r\n return this;\r\n }\r\n\r\n /** Enables and configures options for the Stateful Reconnect feature.\r\n *\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withStatefulReconnect(options?: IStatefulReconnectOptions): HubConnectionBuilder {\r\n if (this.httpConnectionOptions === undefined) {\r\n this.httpConnectionOptions = {};\r\n }\r\n this.httpConnectionOptions._useStatefulReconnect = true;\r\n\r\n this._statefulReconnectBufferSize = options?.bufferSize;\r\n\r\n return this;\r\n }\r\n\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n public build(): HubConnection {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n\r\n return HubConnection.create(\r\n connection,\r\n this.logger || NullLogger.instance,\r\n this.protocol || new JsonHubProtocol(),\r\n this.reconnectPolicy,\r\n this._serverTimeoutInMilliseconds,\r\n this._keepAliveIntervalInMilliseconds,\r\n this._statefulReconnectBufferSize);\r\n }\r\n}\r\n\r\nfunction isLogger(logger: any): logger is ILogger {\r\n return logger.log !== undefined;\r\n}\r\n", "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n\r\n// Everything that users need to access must be exported here. Including interfaces.\r\nexport { AbortSignal } from \"./AbortController\";\r\nexport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nexport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nexport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nexport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nexport { IStatefulReconnectOptions } from \"./IStatefulReconnectOptions\";\r\nexport { HubConnection, HubConnectionState } from \"./HubConnection\";\r\nexport { HubConnectionBuilder } from \"./HubConnectionBuilder\";\r\nexport { AckMessage, SequenceMessage, MessageType, MessageHeaders, HubMessage, HubMessageBase,\r\n HubInvocationMessage, InvocationMessage, StreamInvocationMessage, StreamItemMessage, CompletionMessage,\r\n PingMessage, CloseMessage, CancelInvocationMessage, IHubProtocol } from \"./IHubProtocol\";\r\nexport { ILogger, LogLevel } from \"./ILogger\";\r\nexport { HttpTransportType, TransferFormat, ITransport } from \"./ITransport\";\r\nexport { IStreamSubscriber, IStreamResult, ISubscription } from \"./Stream\";\r\nexport { NullLogger } from \"./Loggers\";\r\nexport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nexport { Subject } from \"./Subject\";\r\nexport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\nexport { VERSION } from \"./Utils\";\r\n", "import * as vscode from 'vscode';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\nimport * as os from 'os';\r\nimport { spawn } from 'child_process';\r\nimport { WorkspaceDetector } from './WorkspaceDetector';\r\nimport { BackendProcessManager } from './BackendProcessManager';\r\nimport { StatusBarManager } from './StatusBarManager';\r\nimport { StudioApiClient } from './StudioApiClient';\r\nimport { StudioSignalRClient } from './StudioSignalRClient';\r\nimport { AgentsPanelProvider } from './panels/AgentsPanelProvider';\r\nimport { MessagesPanelProvider } from './panels/MessagesPanelProvider';\r\nimport { DecisionsPanelProvider } from './panels/DecisionsPanelProvider';\r\nimport { LogsPanelProvider } from './panels/LogsPanelProvider';\r\nimport { KanbanPanelProvider } from './panels/KanbanPanelProvider';\r\nimport { Logger } from './Logger';\r\nimport type { ProjectConfig, GitHubRepoInfo } from './types';\r\n\r\nlet backendManager: BackendProcessManager | undefined;\r\nlet signalRClient: StudioSignalRClient | undefined;\r\nlet activeApiClient: StudioApiClient | undefined;\r\nlet activeProjectSlug: string | undefined;\r\nlet statusBar: StatusBarManager | undefined;\r\nexport let log: Logger;\r\n\r\nconst DEFAULT_PLACEHOLDER = 'Waiting for AI Dev Studio backend...';\r\n\r\ntype TemplatePrecedence = 'global-first' | 'packaged-first';\r\n\r\ntype ExtensionSettings = {\r\n bootstrapEnabled: boolean;\r\n bootstrapApiPort: number;\r\n backendMaxAttempts: number;\r\n backendRetryDelayMs: number;\r\n templatesGlobalPath?: string;\r\n templatesPrecedence: TemplatePrecedence;\r\n};\r\n\r\nexport async function activate(context: vscode.ExtensionContext): Promise {\r\n log = new Logger('AI Dev Studio');\r\n context.subscriptions.push(log);\r\n log.appendLine(`Activating \u2014 extensionPath: ${context.extensionPath}`);\r\n\r\n statusBar = new StatusBarManager();\r\n context.subscriptions.push(statusBar);\r\n\r\n // Register placeholder panel providers immediately so panels never show \"\u2014\"\r\n const agentsProvider = new AgentsPanelProvider(context.extensionUri);\r\n const messagesProvider = new MessagesPanelProvider(context.extensionUri);\r\n const decisionsProvider = new DecisionsPanelProvider(context.extensionUri);\r\n const logsProvider = new LogsPanelProvider(context.extensionUri, log);\r\n const debugLogsProvider = new LogsPanelProvider(context.extensionUri, log);\r\n const kanbanProvider = new KanbanPanelProvider(context.extensionUri);\r\n\r\n context.subscriptions.push(\r\n vscode.window.registerWebviewViewProvider('aidev.agents', agentsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.messages', messagesProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.decisions', decisionsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.logs', logsProvider),\r\n vscode.window.registerWebviewViewProvider('aidev.logsDebug', debugLogsProvider),\r\n logsProvider,\r\n debugLogsProvider,\r\n );\r\n\r\n const detector = new WorkspaceDetector(\r\n glob => {\r\n const watcher = vscode.workspace.createFileSystemWatcher(glob);\r\n return {\r\n onCreated: handler => watcher.onDidCreate(uri => handler(uri.fsPath)),\r\n onDeleted: handler => watcher.onDidDelete(uri => handler(uri.fsPath)),\r\n dispose: () => watcher.dispose(),\r\n };\r\n },\r\n filePath => {\r\n try { return fs.readFileSync(filePath, 'utf8'); }\r\n catch { return undefined; }\r\n },\r\n );\r\n context.subscriptions.push(detector);\r\n\r\n detector.on('projectDetected', async ({ config, workspaceFolderPath }) => {\r\n log.appendLine(`Project detected: slug=${config.projectSlug} port=${config.apiPort} at ${workspaceFolderPath}`);\r\n if (backendManager) {\r\n log.appendLine('Backend already running \u2014 skipping.');\r\n return;\r\n }\r\n await connectBackend(context, config, workspaceFolderPath, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n });\r\n\r\n detector.on('projectRemoved', wsPath => {\r\n log.appendLine(`Project removed: ${wsPath}`);\r\n void teardown(agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n });\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.restartBackend', async () => {\r\n log.appendLine('Restart backend command invoked.');\r\n await teardown(agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.openBoard', () => {\r\n kanbanProvider.openEditor();\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.commands.registerCommand('aidev.openGlobalTemplatesFolder', async () => {\r\n const settings = getSettings();\r\n const globalDir = getGlobalTemplateRoot(settings.templatesGlobalPath, context);\r\n fs.mkdirSync(globalDir, { recursive: true });\r\n await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(globalDir));\r\n log.appendLine(`Opened global templates folder: ${globalDir}`);\r\n }),\r\n );\r\n\r\n context.subscriptions.push(\r\n vscode.workspace.onDidChangeWorkspaceFolders(e => {\r\n log.appendLine(`Workspace folders changed: +${e.added.length} -${e.removed.length}`);\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n }),\r\n );\r\n\r\n scanWorkspace(context, detector, agentsProvider, messagesProvider, decisionsProvider, kanbanProvider);\r\n}\r\n\r\nfunction scanWorkspace(\r\n context: vscode.ExtensionContext,\r\n detector: WorkspaceDetector,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): void {\r\n const settings = getSettings();\r\n const folders = vscode.workspace.workspaceFolders ?? [];\r\n log.appendLine(`Scanning ${folders.length} folder(s): ${folders.map(f => f.uri.fsPath).join(', ') || '(none \u2014 open a folder containing .ai-dev/project.json)'}`);\r\n\r\n if (folders.length === 0) {\r\n setDisconnectedPlaceholder('No folder opened.', agentsProvider, messagesProvider, decisionsProvider);\r\n detector.start([]);\r\n return;\r\n }\r\n\r\n let validConfigs = 0;\r\n let createFailures = 0;\r\n\r\n for (const folder of folders) {\r\n const ensured = ensureProjectConfig(context, settings, folder.uri.fsPath);\r\n if (!ensured.ok) {\r\n createFailures++;\r\n continue;\r\n }\r\n\r\n validConfigs++;\r\n }\r\n\r\n if (validConfigs === 0) {\r\n setDisconnectedPlaceholder('No .ai-dev folder created.', agentsProvider, messagesProvider, decisionsProvider);\r\n log.warn('No valid .ai-dev/project.json found in opened folder(s). Backend connection requires projectSlug and apiPort.');\r\n if (createFailures > 0) {\r\n log.warn(`Failed to initialize .ai-dev in ${createFailures} folder(s).`);\r\n }\r\n } else {\r\n setDisconnectedPlaceholder(DEFAULT_PLACEHOLDER, agentsProvider, messagesProvider, decisionsProvider);\r\n }\r\n\r\n detector.start(folders.map(f => f.uri.fsPath));\r\n}\r\n\r\nfunction ensureProjectConfig(\r\n context: vscode.ExtensionContext,\r\n settings: ExtensionSettings,\r\n workspaceFolderPath: string,\r\n): { ok: true; configPath: string } | { ok: false } {\r\n const aiDevDir = path.join(workspaceFolderPath, '.ai-dev');\r\n const configPath = path.join(aiDevDir, 'project.json');\r\n const folderName = path.basename(workspaceFolderPath);\r\n\r\n try {\r\n if (!settings.bootstrapEnabled) {\r\n if (fs.existsSync(configPath)) {\r\n return { ok: true, configPath };\r\n }\r\n log.warn(`Bootstrap disabled and no project config found at ${configPath}`);\r\n return { ok: false };\r\n }\r\n\r\n if (!fs.existsSync(aiDevDir)) {\r\n fs.mkdirSync(aiDevDir, { recursive: true });\r\n log.appendLine(`Created ${aiDevDir}`);\r\n }\r\n\r\n if (!fs.existsSync(configPath)) {\r\n const projectSlug = slugifyFolderName(folderName);\r\n const initialConfig: Record = {\r\n projectSlug,\r\n apiPort: settings.bootstrapApiPort,\r\n name: folderName,\r\n description: '',\r\n createdAt: new Date().toISOString(),\r\n };\r\n fs.writeFileSync(configPath, JSON.stringify(initialConfig, null, 2), 'utf8');\r\n log.appendLine(`Created default project config at ${configPath} (slug=${projectSlug}, port=${settings.bootstrapApiPort})`);\r\n }\r\n\r\n if (!repairProjectConfig(configPath, folderName, settings.bootstrapApiPort)) {\r\n log.warn(`Invalid project config at ${configPath} \u2014 requires projectSlug and apiPort.`);\r\n return { ok: false };\r\n }\r\n\r\n ensureDefaultAgents(context, settings, aiDevDir);\r\n\r\n return { ok: true, configPath };\r\n } catch (e) {\r\n log.warn(`Failed to initialize .ai-dev for ${workspaceFolderPath}: ${e}`);\r\n return { ok: false };\r\n }\r\n}\r\n\r\nfunction slugifyFolderName(name: string): string {\r\n const slug = name\r\n .toLowerCase()\r\n .replace(/[^a-z0-9]+/g, '-')\r\n .replace(/^-+|-+$/g, '');\r\n return slug || 'ai-dev-project';\r\n}\r\n\r\nfunction repairProjectConfig(configPath: string, folderName: string, defaultPort: number): boolean {\r\n const fallbackSlug = slugifyFolderName(folderName);\r\n\r\n let parsed: Record;\r\n try {\r\n const raw = fs.readFileSync(configPath, 'utf8');\r\n parsed = JSON.parse(raw) as Record;\r\n } catch {\r\n parsed = {};\r\n }\r\n\r\n const normalized = normalizeProjectConfig(parsed, fallbackSlug, defaultPort);\r\n if (!normalized) {\r\n return false;\r\n }\r\n\r\n const currentSlug = typeof parsed.projectSlug === 'string' ? parsed.projectSlug : undefined;\r\n const currentPort = typeof parsed.apiPort === 'number'\r\n ? parsed.apiPort\r\n : (typeof parsed.apiPort === 'string' ? Number(parsed.apiPort) : undefined);\r\n\r\n const needsWrite = currentSlug !== normalized.projectSlug || currentPort !== normalized.apiPort;\r\n if (needsWrite) {\r\n const repaired: Record = {\r\n ...parsed,\r\n projectSlug: normalized.projectSlug,\r\n apiPort: normalized.apiPort,\r\n };\r\n fs.writeFileSync(configPath, JSON.stringify(repaired, null, 2), 'utf8');\r\n log.appendLine(`Repaired project config at ${configPath} (slug=${normalized.projectSlug}, port=${normalized.apiPort})`);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction normalizeProjectConfig(\r\n parsed: Record,\r\n fallbackSlug: string,\r\n defaultPort: number,\r\n): ProjectConfig | undefined {\r\n const projectSlug =\r\n firstNonEmptyString(parsed.projectSlug, parsed.slug, parsed.projectId) ?? fallbackSlug;\r\n\r\n const apiPort =\r\n firstPositiveNumber(parsed.apiPort, parsed.port) ?? defaultPort;\r\n\r\n if (!projectSlug || !apiPort) {\r\n return undefined;\r\n }\r\n\r\n return { projectSlug, apiPort };\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value !== 'string') continue;\r\n const trimmed = value.trim();\r\n if (trimmed) return trimmed;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction firstPositiveNumber(...values: unknown[]): number | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === 'string') {\r\n const candidate = Number(value.trim());\r\n if (Number.isFinite(candidate) && candidate > 0) {\r\n return Math.trunc(candidate);\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\ntype AgentTemplateSeed = {\r\n slug?: string;\r\n name?: string;\r\n role?: string;\r\n model?: string;\r\n executor?: string;\r\n description?: string;\r\n skills?: string[];\r\n thinking?: string;\r\n thinkingLevel?: string;\r\n};\r\n\r\nfunction ensureDefaultAgents(\r\n context: vscode.ExtensionContext,\r\n settings: ExtensionSettings,\r\n aiDevDir: string,\r\n): void {\r\n const globalTemplateRoot = getGlobalTemplateRoot(settings.templatesGlobalPath, context);\r\n const templateRoots = getTemplateRoots(globalTemplateRoot, context.extensionPath, settings.templatesPrecedence);\r\n const discovered = discoverTemplates(templateRoots);\r\n if (discovered.length === 0) {\r\n log.warn('No agent templates discovered. Skipping default agent bootstrap.');\r\n return;\r\n }\r\n\r\n const partialsCache = new Map>();\r\n const agentsDir = path.join(aiDevDir, 'agents');\r\n fs.mkdirSync(agentsDir, { recursive: true });\r\n\r\n let created = 0;\r\n for (const discoveredTemplate of discovered) {\r\n const targetAgentDir = path.join(agentsDir, discoveredTemplate.slug);\r\n if (fs.existsSync(targetAgentDir)) continue;\r\n\r\n let template: AgentTemplateSeed;\r\n try {\r\n template = JSON.parse(fs.readFileSync(discoveredTemplate.jsonPath, 'utf8')) as AgentTemplateSeed;\r\n } catch (e) {\r\n log.warn(`Failed to parse template ${discoveredTemplate.jsonPath}: ${e}`);\r\n continue;\r\n }\r\n\r\n const slug = typeof template.slug === 'string' && template.slug.length > 0 ? template.slug : discoveredTemplate.slug;\r\n const name = typeof template.name === 'string' && template.name.length > 0 ? template.name : discoveredTemplate.slug;\r\n\r\n const partials = partialsCache.get(discoveredTemplate.root) ?? loadTemplatePartials(discoveredTemplate.root);\r\n partialsCache.set(discoveredTemplate.root, partials);\r\n\r\n const content = fs.existsSync(discoveredTemplate.mdPath)\r\n ? renderTemplate(readComposedTemplate(discoveredTemplate.mdPath, partials, discoveredTemplate.slug), name, slug)\r\n : `# ${name}\\n\\nYou are ${name}.\\n`;\r\n const compactContent = discoveredTemplate.compactMdPath && fs.existsSync(discoveredTemplate.compactMdPath)\r\n ? renderTemplate(readComposedTemplate(discoveredTemplate.compactMdPath, partials, discoveredTemplate.slug), name, slug)\r\n : '';\r\n\r\n fs.mkdirSync(targetAgentDir, { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'inbox'), { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'outbox'), { recursive: true });\r\n fs.mkdirSync(path.join(targetAgentDir, 'journal'), { recursive: true });\r\n\r\n const agentJson: Record = {\r\n slug,\r\n name,\r\n role: template.role ?? '',\r\n model: template.model ?? 'claude-sonnet-4-6',\r\n executor: template.executor ?? 'claude',\r\n status: 'idle',\r\n description: template.description ?? '',\r\n };\r\n if (Array.isArray(template.skills) && template.skills.length > 0) {\r\n agentJson.skills = template.skills;\r\n }\r\n const thinking = typeof template.thinking === 'string'\r\n ? template.thinking\r\n : typeof template.thinkingLevel === 'string'\r\n ? template.thinkingLevel\r\n : '';\r\n if (thinking && thinking !== 'off') {\r\n agentJson.thinking = thinking;\r\n }\r\n\r\n fs.writeFileSync(path.join(targetAgentDir, 'agent.json'), JSON.stringify(agentJson, null, 2), 'utf8');\r\n fs.writeFileSync(path.join(targetAgentDir, 'CLAUDE.md'), content, 'utf8');\r\n if (compactContent) {\r\n fs.writeFileSync(path.join(targetAgentDir, 'CLAUDE.compact.md'), compactContent, 'utf8');\r\n }\r\n created++;\r\n }\r\n\r\n log.appendLine(`Created ${created} default agent(s) from templates.`);\r\n}\r\n\r\ntype DiscoveredTemplate = {\r\n slug: string;\r\n root: string;\r\n jsonPath: string;\r\n mdPath: string;\r\n compactMdPath?: string;\r\n};\r\n\r\nfunction discoverTemplates(templateRoots: string[]): DiscoveredTemplate[] {\r\n const discovered = new Map();\r\n for (const root of templateRoots) {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(root, { withFileTypes: true });\r\n } catch {\r\n continue;\r\n }\r\n\r\n for (const entry of entries) {\r\n if (!entry.isFile() || !entry.name.endsWith('.json')) continue;\r\n const slug = entry.name.replace(/\\.json$/i, '');\r\n if (discovered.has(slug)) continue;\r\n\r\n const jsonPath = path.join(root, `${slug}.json`);\r\n const mdPath = path.join(root, `${slug}.md`);\r\n if (!fs.existsSync(mdPath)) continue;\r\n\r\n const compactMdPath = path.join(root, `${slug}.compact.md`);\r\n discovered.set(slug, {\r\n slug,\r\n root,\r\n jsonPath,\r\n mdPath,\r\n compactMdPath: fs.existsSync(compactMdPath) ? compactMdPath : undefined,\r\n });\r\n }\r\n }\r\n\r\n return [...discovered.values()].sort((a, b) => a.slug.localeCompare(b.slug));\r\n}\r\n\r\nfunction getTemplateRoots(\r\n globalTemplateRoot: string,\r\n extensionPath: string,\r\n precedence: TemplatePrecedence,\r\n): string[] {\r\n const packaged = path.join(extensionPath, 'assets', 'agent-templates');\r\n const devFallback = path.resolve(extensionPath, '..', 'workspaces', 'agent-templates');\r\n const packagedRoot = fs.existsSync(packaged) ? packaged : fs.existsSync(devFallback) ? devFallback : undefined;\r\n\r\n const roots: string[] = [];\r\n if (precedence === 'global-first') {\r\n roots.push(globalTemplateRoot);\r\n if (packagedRoot) roots.push(packagedRoot);\r\n } else {\r\n if (packagedRoot) roots.push(packagedRoot);\r\n roots.push(globalTemplateRoot);\r\n }\r\n\r\n return roots.filter((value, index, arr) => arr.indexOf(value) === index);\r\n}\r\n\r\nfunction getGlobalTemplateRoot(configuredPath: string | undefined, context: vscode.ExtensionContext): string {\r\n if (configuredPath && configuredPath.trim().length > 0) {\r\n if (path.isAbsolute(configuredPath)) return configuredPath;\r\n const firstWorkspace = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;\r\n if (firstWorkspace) return path.resolve(firstWorkspace, configuredPath);\r\n return path.resolve(os.homedir(), configuredPath);\r\n }\r\n\r\n return path.join(context.globalStorageUri.fsPath, 'agent-templates');\r\n}\r\n\r\nfunction getSettings(): ExtensionSettings {\r\n const config = vscode.workspace.getConfiguration('aidev');\r\n const bootstrapApiPort = clampInt(config.get('bootstrap.apiPort', 5191), 1, 65535, 5191);\r\n const backendMaxAttempts = clampInt(config.get('backend.health.maxAttempts', 120), 1, 3600, 120);\r\n const backendRetryDelayMs = clampInt(config.get('backend.health.retryDelayMs', 1000), 100, 60000, 1000);\r\n const templatesPrecedenceRaw = config.get('templates.precedence', 'global-first');\r\n const templatesPrecedence: TemplatePrecedence = templatesPrecedenceRaw === 'packaged-first'\r\n ? 'packaged-first'\r\n : 'global-first';\r\n\r\n return {\r\n bootstrapEnabled: config.get('bootstrap.enabled', true),\r\n bootstrapApiPort,\r\n backendMaxAttempts,\r\n backendRetryDelayMs,\r\n templatesGlobalPath: config.get('templates.globalPath'),\r\n templatesPrecedence,\r\n };\r\n}\r\n\r\n\r\nfunction clampInt(value: number, min: number, max: number, fallback: number): number {\r\n if (!Number.isFinite(value)) return fallback;\r\n return Math.min(max, Math.max(min, Math.round(value)));\r\n}\r\n\r\nfunction loadTemplatePartials(templateRoot: string): Record {\r\n const partials: Record = {};\r\n const sharedDir = path.join(templateRoot, 'shared');\r\n if (!fs.existsSync(sharedDir)) return partials;\r\n\r\n const files = fs.readdirSync(sharedDir, { withFileTypes: true });\r\n for (const entry of files) {\r\n if (!entry.isFile() || !entry.name.endsWith('.md')) continue;\r\n const key = `shared/${entry.name.replace(/\\.md$/i, '')}`;\r\n partials[key] = fs.readFileSync(path.join(sharedDir, entry.name), 'utf8');\r\n }\r\n return partials;\r\n}\r\n\r\nfunction readComposedTemplate(templatePath: string, partials: Record, templateSlug: string): string {\r\n const raw = fs.readFileSync(templatePath, 'utf8');\r\n return raw.replace(/\\{\\{>\\s*([^\\s}]+)\\s*\\}\\}/g, (_match, partialKey: string) => {\r\n const partial = partials[partialKey];\r\n if (partial === undefined) {\r\n log.warn(`Template '${templateSlug}' references unknown partial '${partialKey}'.`);\r\n return '';\r\n }\r\n return partial;\r\n });\r\n}\r\n\r\nfunction renderTemplate(content: string, name: string, slug: string): string {\r\n return content\r\n .replace(/\\{\\{\\s*name\\s*\\}\\}/g, name)\r\n .replace(/\\{\\{\\s*slug\\s*\\}\\}/g, slug);\r\n}\r\n\r\nfunction setDisconnectedPlaceholder(\r\n message: string,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n): void {\r\n agentsProvider.setPlaceholderMessage(message);\r\n messagesProvider.setPlaceholderMessage(message);\r\n decisionsProvider.setPlaceholderMessage(message);\r\n}\r\n\r\nfunction getActiveApiContext(): { api: StudioApiClient; projectSlug: string } | undefined {\r\n if (!activeApiClient || !activeProjectSlug) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n api: activeApiClient,\r\n projectSlug: activeProjectSlug,\r\n };\r\n}\r\n\r\nfunction detectGitHubRepo(workspaceFolderPath: string): GitHubRepoInfo | undefined {\r\n try {\r\n const raw = fs.readFileSync(path.join(workspaceFolderPath, '.git', 'config'), 'utf8');\r\n // Capture both the remote name and its URL\r\n const remotePattern = /\\[remote\\s+\"([^\"]+)\"\\][\\s\\S]*?url\\s*=\\s*([^\\r\\n]+)/g;\r\n const remotes = new Map();\r\n let match: RegExpExecArray | null;\r\n while ((match = remotePattern.exec(raw)) !== null) {\r\n const name = match[1].trim();\r\n const url = match[2].trim();\r\n const parsed = parseGitHubUrl(url);\r\n if (parsed) remotes.set(name, parsed);\r\n }\r\n // Prefer upstream (parent of a fork) so issues resolve to the canonical repo\r\n return remotes.get('upstream') ?? remotes.get('origin') ?? remotes.values().next().value;\r\n } catch {\r\n // no .git/config or not readable \u2014 not a git repo\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction parseGitHubUrl(url: string): GitHubRepoInfo | undefined {\r\n // HTTPS: https://github.com/owner/repo.git or https://github.com/owner/repo\r\n // SSH: git@github.com:owner/repo.git\r\n const m = /github\\.com[/:]([^/\\s]+)\\/([^/\\s.]+?)(?:\\.git)?$/.exec(url);\r\n if (m) return { owner: m[1], repo: m[2] };\r\n return undefined;\r\n}\r\n\r\nasync function connectBackend(\r\n context: vscode.ExtensionContext,\r\n config: ProjectConfig,\r\n workspaceFolderPath: string,\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): Promise {\r\n const settings = getSettings();\r\n const binaryName = process.platform === 'win32' ? 'ai-dev-api.exe' : 'ai-dev-api';\r\n const binaryPath = path.join(context.extensionPath, 'bin', binaryName);\r\n const hasBundledBinary = fs.existsSync(binaryPath);\r\n const repoRoot = path.resolve(context.extensionPath, '..');\r\n const devApiProject = path.join(repoRoot, 'ai-dev.api', 'ai-dev.api.csproj');\r\n const useDevDotnetFallback = !hasBundledBinary && fs.existsSync(devApiProject);\r\n\r\n log.appendLine(`Binary: ${binaryPath} (exists: ${hasBundledBinary})`);\r\n if (useDevDotnetFallback) {\r\n log.appendLine(`Using dev backend fallback: dotnet run --project ${devApiProject} --no-launch-profile`);\r\n } else if (!hasBundledBinary) {\r\n log.warn('Bundled backend missing and no local ai-dev.api project found. Expecting external backend on configured port.');\r\n }\r\n\r\n backendManager = new BackendProcessManager(\r\n {\r\n binaryPath,\r\n port: config.apiPort,\r\n maxAttempts: settings.backendMaxAttempts,\r\n retryDelayMs: settings.backendRetryDelayMs,\r\n fallbackCommand: useDevDotnetFallback\r\n ? {\r\n binary: 'dotnet',\r\n args: ['run', '--project', devApiProject, '--no-launch-profile'],\r\n cwd: repoRoot,\r\n }\r\n : undefined,\r\n onOutput: (line, source) => {\r\n const msg = `[backend:${source}] ${line}`;\r\n if (source === 'stderr') log.warn(msg);\r\n else log.info(msg);\r\n },\r\n },\r\n (binary, args, options) => spawn(binary, args, {\r\n ...options,\r\n stdio: 'pipe',\r\n env: {\r\n ...process.env,\r\n WORKSPACE_ROOT: workspaceFolderPath,\r\n ASPNETCORE_URLS: `http://localhost:${config.apiPort}`,\r\n },\r\n }),\r\n async url => {\r\n const r = await fetch(url);\r\n log.appendLine(`Health check ${url} \u2192 ${r.status}`);\r\n return { ok: r.ok };\r\n },\r\n );\r\n\r\n statusBar?.setStarting();\r\n log.appendLine(`Waiting for backend on port ${config.apiPort}\u2026`);\r\n try {\r\n await backendManager.start();\r\n log.appendLine('Backend ready.');\r\n } catch (e) {\r\n log.appendLine(`Backend failed: ${e}`);\r\n statusBar?.setDisconnected();\r\n vscode.window.showErrorMessage('AI Dev Studio: backend failed to start. See Output > AI Dev Studio.');\r\n return;\r\n }\r\n\r\n const baseUrl = `http://localhost:${config.apiPort}`;\r\n const api = new StudioApiClient(baseUrl);\r\n activeApiClient = api;\r\n activeProjectSlug = config.projectSlug;\r\n\r\n signalRClient = new StudioSignalRClient(`${baseUrl}/hubs/project`);\r\n signalRClient.onConnectionStateChanged(state => {\r\n log.appendLine(`SignalR: ${state}`);\r\n if (state === 'connected') statusBar?.setRunning();\r\n else if (state === 'connecting') statusBar?.setStarting();\r\n else statusBar?.setDisconnected();\r\n });\r\n\r\n try {\r\n await signalRClient.start(config.projectSlug);\r\n log.appendLine('SignalR connected.');\r\n } catch (e) {\r\n log.appendLine(`SignalR failed (non-fatal, REST still works): ${e}`);\r\n }\r\n\r\n statusBar?.setRunning();\r\n\r\n // Wire up the already-registered providers with live API + SignalR\r\n const gitHubRepo = detectGitHubRepo(workspaceFolderPath);\r\n if (gitHubRepo) {\r\n log.appendLine(`GitHub repo detected: ${gitHubRepo.owner}/${gitHubRepo.repo}`);\r\n }\r\n\r\n agentsProvider.connect(config.projectSlug, api, signalRClient);\r\n messagesProvider.connect(config.projectSlug, api, signalRClient);\r\n decisionsProvider.connect(config.projectSlug, api, signalRClient);\r\n kanbanProvider.connect(config.projectSlug, api, signalRClient, workspaceFolderPath, gitHubRepo);\r\n log.appendLine('Panels connected.');\r\n}\r\n\r\nasync function teardown(\r\n agentsProvider: AgentsPanelProvider,\r\n messagesProvider: MessagesPanelProvider,\r\n decisionsProvider: DecisionsPanelProvider,\r\n kanbanProvider: KanbanPanelProvider,\r\n): Promise {\r\n log?.appendLine('Tearing down.');\r\n await signalRClient?.stop();\r\n signalRClient = undefined;\r\n activeApiClient = undefined;\r\n activeProjectSlug = undefined;\r\n backendManager?.stop();\r\n backendManager = undefined;\r\n statusBar?.setDisconnected();\r\n agentsProvider.disconnect();\r\n messagesProvider.disconnect();\r\n decisionsProvider.disconnect();\r\n kanbanProvider.disconnect();\r\n}\r\n\r\nexport function deactivate(): void {\r\n log?.appendLine('Deactivating.');\r\n backendManager?.stop();\r\n void signalRClient?.stop();\r\n}\r\n", "import { EventEmitter } from 'events';\r\nimport * as path from 'path';\r\nimport { DetectedProject, ProjectConfig } from './types';\r\n\r\nexport interface FileWatcherLike {\r\n onCreated(handler: (filePath: string) => void): void;\r\n onDeleted(handler: (filePath: string) => void): void;\r\n dispose(): void;\r\n}\r\n\r\nexport type WatcherFactory = (glob: string) => FileWatcherLike;\r\nexport type FileReader = (filePath: string) => string | undefined;\r\n\r\nexport declare interface WorkspaceDetector {\r\n on(event: 'projectDetected', listener: (project: DetectedProject) => void): this;\r\n on(event: 'projectRemoved', listener: (workspaceFolderPath: string) => void): this;\r\n emit(event: 'projectDetected', project: DetectedProject): boolean;\r\n emit(event: 'projectRemoved', workspaceFolderPath: string): boolean;\r\n}\r\n\r\nexport class WorkspaceDetector extends EventEmitter {\r\n private watcher?: FileWatcherLike;\r\n\r\n constructor(\r\n private readonly createWatcher: WatcherFactory,\r\n private readonly readFile: FileReader,\r\n ) {\r\n super();\r\n }\r\n\r\n start(workspacePaths: string[]): void {\r\n for (const wsPath of workspacePaths) {\r\n const configPath = path.join(wsPath, '.ai-dev', 'project.json');\r\n this.tryEmitDetected(configPath, wsPath);\r\n }\r\n\r\n this.watcher = this.createWatcher('**/.ai-dev/project.json');\r\n this.watcher.onCreated(filePath => {\r\n const wsPath = this.resolveWorkspacePath(filePath, workspacePaths);\r\n if (wsPath) this.tryEmitDetected(filePath, wsPath);\r\n });\r\n this.watcher.onDeleted(filePath => {\r\n const wsPath = this.resolveWorkspacePath(filePath, workspacePaths);\r\n if (wsPath) this.emit('projectRemoved', wsPath);\r\n });\r\n }\r\n\r\n private tryEmitDetected(filePath: string, workspaceFolderPath: string): void {\r\n const raw = this.readFile(filePath);\r\n if (!raw) return;\r\n try {\r\n const config = parseProjectConfig(JSON.parse(raw) as Record);\r\n if (config) {\r\n this.emit('projectDetected', { config, workspaceFolderPath });\r\n }\r\n } catch {\r\n // malformed JSON \u2014 skip silently\r\n }\r\n }\r\n\r\n private resolveWorkspacePath(filePath: string, workspacePaths: string[]): string | undefined {\r\n const normalised = filePath.replace(/\\\\/g, '/');\r\n return workspacePaths.find(ws => {\r\n const normWs = ws.replace(/\\\\/g, '/');\r\n return normalised.startsWith(normWs + '/');\r\n });\r\n }\r\n\r\n dispose(): void {\r\n this.watcher?.dispose();\r\n }\r\n}\r\n\r\nfunction parseProjectConfig(parsed: Record): ProjectConfig | undefined {\r\n const projectSlug = firstNonEmptyString(parsed.projectSlug, parsed.slug, parsed.projectId);\r\n const apiPort = firstPositiveNumber(parsed.apiPort, parsed.port);\r\n\r\n if (!projectSlug || !apiPort) {\r\n return undefined;\r\n }\r\n\r\n return { projectSlug, apiPort };\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value !== 'string') continue;\r\n const trimmed = value.trim();\r\n if (trimmed) return trimmed;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction firstPositiveNumber(...values: unknown[]): number | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === 'string') {\r\n const candidate = Number(value.trim());\r\n if (Number.isFinite(candidate) && candidate > 0) {\r\n return Math.trunc(candidate);\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n", "export type FileExistsFn = (path: string) => boolean;\r\n\r\nexport type ProcessLike = {\r\n kill(): void;\r\n on(event: 'exit', handler: (code: number | null) => void): void;\r\n on(event: 'error', handler: (err: Error) => void): void;\r\n stdout?: NodeJS.ReadableStream | null;\r\n stderr?: NodeJS.ReadableStream | null;\r\n};\r\n\r\nexport type Spawner = (\r\n binary: string,\r\n args: string[],\r\n options: { env?: NodeJS.ProcessEnv; cwd?: string },\r\n) => ProcessLike;\r\n\r\nexport type Fetcher = (url: string) => Promise<{ ok: boolean }>;\r\n\r\nexport type BackendState = 'not-started' | 'starting' | 'ready' | 'stopped';\r\n\r\nexport interface BackendProcessManagerOptions {\r\n binaryPath: string;\r\n port: number;\r\n maxAttempts: number;\r\n retryDelayMs: number;\r\n onOutput?: (line: string, source: 'stdout' | 'stderr') => void;\r\n fallbackCommand?: {\r\n binary: string;\r\n args: string[];\r\n cwd?: string;\r\n };\r\n}\r\n\r\nexport class BackendProcessManager {\r\n private _state: BackendState = 'not-started';\r\n private _process?: ProcessLike;\r\n\r\n constructor(\r\n private readonly options: BackendProcessManagerOptions,\r\n private readonly spawner: Spawner,\r\n private readonly fetcher: Fetcher,\r\n private readonly delay: (ms: number) => Promise = ms =>\r\n new Promise(resolve => setTimeout(resolve, ms)),\r\n private readonly fileExists: FileExistsFn = p => {\r\n try { require('fs').accessSync(p); return true; } catch { return false; }\r\n },\r\n ) {}\r\n\r\n get state(): BackendState {\r\n return this._state;\r\n }\r\n\r\n async start(): Promise {\r\n if (this._state !== 'not-started') return;\r\n this._state = 'starting';\r\n\r\n const hasBundledBinary = this.fileExists(this.options.binaryPath);\r\n if (hasBundledBinary) {\r\n this._process = this.spawner(this.options.binaryPath, [], {});\r\n } else if (this.options.fallbackCommand) {\r\n this._process = this.spawner(\r\n this.options.fallbackCommand.binary,\r\n this.options.fallbackCommand.args,\r\n { cwd: this.options.fallbackCommand.cwd },\r\n );\r\n }\r\n\r\n if (this._process) {\r\n this._process.on('exit', () => {\r\n if (this._state !== 'stopped') this._state = 'stopped';\r\n });\r\n this._process.on('error', () => {\r\n if (this._state !== 'stopped') this._state = 'stopped';\r\n });\r\n\r\n if (this.options.onOutput) {\r\n const { createInterface } = require('readline') as typeof import('readline');\r\n if (this._process.stdout) {\r\n createInterface({ input: this._process.stdout }).on('line', (line: string) => {\r\n this.options.onOutput!(line, 'stdout');\r\n });\r\n }\r\n if (this._process.stderr) {\r\n createInterface({ input: this._process.stderr }).on('line', (line: string) => {\r\n this.options.onOutput!(line, 'stderr');\r\n });\r\n }\r\n }\r\n }\r\n\r\n const healthUrl = `http://localhost:${this.options.port}/api/health`;\r\n for (let attempt = 0; attempt < this.options.maxAttempts; attempt++) {\r\n try {\r\n const res = await this.fetcher(healthUrl);\r\n if (res.ok) {\r\n this._state = 'ready';\r\n return;\r\n }\r\n } catch {\r\n // backend not ready yet\r\n }\r\n await this.delay(this.options.retryDelayMs);\r\n }\r\n\r\n if (this._process) {\r\n try { this._process.kill(); } catch { }\r\n }\r\n this._state = 'stopped';\r\n throw new Error(\r\n `AI Dev backend did not become healthy after ${this.options.maxAttempts} attempts`,\r\n );\r\n }\r\n\r\n stop(): void {\r\n if (this._state === 'stopped' || this._state === 'not-started') return;\r\n if (this._process) {\r\n try { this._process.kill(); } catch { }\r\n }\r\n this._state = 'stopped';\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\n\r\nexport class StatusBarManager {\r\n private readonly item: vscode.StatusBarItem;\r\n\r\n constructor() {\r\n this.item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);\r\n this.item.command = 'aidev.restartBackend';\r\n this.setDisconnected();\r\n this.item.show();\r\n }\r\n\r\n setRunning(): void {\r\n this.item.text = '$(check) AI Dev: Running';\r\n this.item.tooltip = 'AI Dev Studio backend is running. Click to restart.';\r\n this.item.backgroundColor = undefined;\r\n }\r\n\r\n setStarting(): void {\r\n this.item.text = '$(loading~spin) AI Dev: Starting';\r\n this.item.tooltip = 'AI Dev Studio backend is starting...';\r\n this.item.backgroundColor = undefined;\r\n }\r\n\r\n setDisconnected(): void {\r\n this.item.text = '$(x) AI Dev: Disconnected';\r\n this.item.tooltip = 'AI Dev Studio backend is not running. Click to retry.';\r\n this.item.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');\r\n }\r\n\r\n dispose(): void {\r\n this.item.dispose();\r\n }\r\n}\r\n", "export type { AgentSummary, MessageItem, DecisionItem, BoardData, BoardTaskItem } from './types';\r\nimport type { AgentSummary, MessageItem, DecisionItem, BoardData, BoardTaskItem } from './types';\r\n\r\nexport type Fetcher = (url: string, init?: RequestInit) => Promise;\r\n\r\nexport class StudioApiClient {\r\n constructor(\r\n private readonly baseUrl: string,\r\n private readonly fetcher: Fetcher = (url, init) => fetch(url, init),\r\n ) {}\r\n\r\n // \u2500\u2500 Agents \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listAgents(projectSlug: string): Promise {\r\n return this.get(`/api/agents?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async runAgent(projectSlug: string, agentSlug: string): Promise {\r\n await this.post(`/api/agents/${enc(agentSlug)}/run?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async stopAgent(projectSlug: string, agentSlug: string): Promise {\r\n await this.post(`/api/agents/${enc(agentSlug)}/stop?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n // \u2500\u2500 Messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listMessages(projectSlug: string, agentSlug?: string, processed?: boolean): Promise {\r\n let url = `/api/messages?projectSlug=${enc(projectSlug)}`;\r\n if (agentSlug) url += `&agentSlug=${enc(agentSlug)}`;\r\n if (processed !== undefined) url += `&processed=${processed}`;\r\n return this.get(url);\r\n }\r\n\r\n async listAllMessages(projectSlug: string): Promise {\r\n const agents = await this.listAgents(projectSlug);\r\n const perAgent = await Promise.all(\r\n agents.map(a =>\r\n this.listMessages(projectSlug, a.slug, false)\r\n .then(msgs => msgs.map(m => ({ ...m, agentSlug: a.slug }))),\r\n ),\r\n );\r\n return perAgent.flat();\r\n }\r\n\r\n async processMessage(projectSlug: string, agentSlug: string, fileName: string): Promise {\r\n await this.post(\r\n `/api/messages/${enc(fileName)}/process?projectSlug=${enc(projectSlug)}&agentSlug=${enc(agentSlug)}`,\r\n );\r\n }\r\n\r\n // \u2500\u2500 Decisions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async listDecisions(projectSlug: string, status?: string): Promise {\r\n let url = `/api/decisions?projectSlug=${enc(projectSlug)}`;\r\n if (status) url += `&status=${enc(status)}`;\r\n return this.get(url);\r\n }\r\n\r\n async resolveDecision(projectSlug: string, decisionId: string, resolution: string): Promise {\r\n await this.post(`/api/decisions/${enc(decisionId)}/resolve?projectSlug=${enc(projectSlug)}`, {\r\n resolution,\r\n });\r\n }\r\n\r\n // \u2500\u2500 Board \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async getBoard(projectSlug: string): Promise {\r\n return this.get(`/api/board?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async createBoardTask(\r\n projectSlug: string,\r\n request: {\r\n columnId: string;\r\n title: string;\r\n description?: string;\r\n priority?: string;\r\n assignee?: string;\r\n tags?: string[];\r\n },\r\n ): Promise {\r\n return this.postJson(`/api/board/tasks?projectSlug=${enc(projectSlug)}`, request);\r\n }\r\n\r\n async updateBoardTask(\r\n projectSlug: string,\r\n taskId: string,\r\n request: {\r\n columnId: string;\r\n title: string;\r\n description?: string;\r\n priority?: string;\r\n assignee?: string;\r\n tags?: string[];\r\n },\r\n ): Promise {\r\n return this.postJson(`/api/board/tasks/${enc(taskId)}?projectSlug=${enc(projectSlug)}`, request);\r\n }\r\n\r\n async deleteBoardTask(projectSlug: string, taskId: string): Promise {\r\n await this.del(`/api/board/tasks/${enc(taskId)}?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n async addBoardColumn(projectSlug: string, id: string, title: string): Promise {\r\n await this.postJson(`/api/board/columns?projectSlug=${enc(projectSlug)}`, { id, title });\r\n }\r\n\r\n async renameBoardColumn(projectSlug: string, columnId: string, title: string): Promise {\r\n await this.patchJson(`/api/board/columns/${enc(columnId)}?projectSlug=${enc(projectSlug)}`, { title });\r\n }\r\n\r\n async removeBoardColumn(projectSlug: string, columnId: string): Promise {\r\n await this.del(`/api/board/columns/${enc(columnId)}?projectSlug=${enc(projectSlug)}`);\r\n }\r\n\r\n // \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async get(path: string): Promise {\r\n const res = await this.fetcher(this.baseUrl + path);\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n return res.json() as Promise;\r\n }\r\n\r\n private async post(path: string, body?: unknown): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'POST',\r\n headers: body ? { 'Content-Type': 'application/json' } : undefined,\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n }\r\n\r\n private async postJson(path: string, body: unknown): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n return res.json() as Promise;\r\n }\r\n\r\n private async patchJson(path: string, body: unknown): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'PATCH',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n }\r\n\r\n private async del(path: string): Promise {\r\n const res = await this.fetcher(this.baseUrl + path, {\r\n method: 'DELETE',\r\n });\r\n if (!res.ok) throw new ApiError(res.status, path);\r\n }\r\n}\r\n\r\nfunction enc(value: string): string {\r\n return encodeURIComponent(value);\r\n}\r\n\r\nexport class ApiError extends Error {\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly path: string,\r\n ) {\r\n super(`API error ${statusCode} for ${path}`);\r\n this.name = 'ApiError';\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport {\r\n HubConnection,\r\n HubConnectionBuilder,\r\n HubConnectionState,\r\n LogLevel,\r\n} from '@microsoft/signalr';\r\n\r\nexport type ConnectionState = 'disconnected' | 'connecting' | 'connected';\r\n\r\nexport interface StateChangedMessage {\r\n projectSlug: string;\r\n kinds: string[];\r\n}\r\n\r\nexport interface HubConnectionFactory {\r\n build(url: string): HubConnection;\r\n}\r\n\r\nconst defaultFactory: HubConnectionFactory = {\r\n build: url =>\r\n new HubConnectionBuilder()\r\n .withUrl(url)\r\n .withAutomaticReconnect({\r\n nextRetryDelayInMilliseconds: ctx => {\r\n const base = Math.min(1000 * 2 ** ctx.previousRetryCount, 30_000);\r\n return base + Math.random() * 1000;\r\n },\r\n })\r\n .configureLogging(LogLevel.Warning)\r\n .build(),\r\n};\r\n\r\nexport class StudioSignalRClient {\r\n private connection?: HubConnection;\r\n private projectSlug?: string;\r\n\r\n private readonly _onConnectionStateChanged = new vscode.EventEmitter();\r\n private readonly _onAgentsChanged = new vscode.EventEmitter();\r\n private readonly _onMessagesChanged = new vscode.EventEmitter();\r\n private readonly _onDecisionsChanged = new vscode.EventEmitter();\r\n private readonly _onBoardChanged = new vscode.EventEmitter();\r\n\r\n readonly onConnectionStateChanged = this._onConnectionStateChanged.event;\r\n readonly onAgentsChanged = this._onAgentsChanged.event;\r\n readonly onMessagesChanged = this._onMessagesChanged.event;\r\n readonly onDecisionsChanged = this._onDecisionsChanged.event;\r\n readonly onBoardChanged = this._onBoardChanged.event;\r\n\r\n private _connectionState: ConnectionState = 'disconnected';\r\n\r\n constructor(\r\n private readonly hubUrl: string,\r\n private readonly factory: HubConnectionFactory = defaultFactory,\r\n ) {}\r\n\r\n get connectionState(): ConnectionState {\r\n return this._connectionState;\r\n }\r\n\r\n async start(projectSlug: string): Promise {\r\n this.projectSlug = projectSlug;\r\n this.connection = this.factory.build(this.hubUrl);\r\n\r\n this.connection.onreconnecting(() => this.setState('connecting'));\r\n this.connection.onreconnected(() => this.setState('connected'));\r\n this.connection.onclose(() => this.setState('disconnected'));\r\n\r\n this.connection.on('StateChanged', (msg: StateChangedMessage) => {\r\n if (msg.projectSlug !== this.projectSlug) return;\r\n const kinds = msg.kinds.map(k => k.toLowerCase());\r\n if (kinds.includes('agents')) this._onAgentsChanged.fire();\r\n if (kinds.includes('messages')) this._onMessagesChanged.fire();\r\n if (kinds.includes('decisions')) this._onDecisionsChanged.fire();\r\n if (kinds.includes('board')) {\r\n this._onBoardChanged.fire();\r\n this._onAgentsChanged.fire(); // board changes affect agent views\r\n }\r\n });\r\n\r\n this.setState('connecting');\r\n await this.connection.start();\r\n await this.connection.invoke('JoinProject', projectSlug);\r\n this.setState('connected');\r\n }\r\n\r\n async stop(): Promise {\r\n if (this.connection?.state === HubConnectionState.Connected) {\r\n try { await this.connection.invoke('LeaveProject', this.projectSlug); } catch { }\r\n }\r\n await this.connection?.stop();\r\n this.setState('disconnected');\r\n }\r\n\r\n dispose(): void {\r\n this._onConnectionStateChanged.dispose();\r\n this._onAgentsChanged.dispose();\r\n this._onMessagesChanged.dispose();\r\n this._onDecisionsChanged.dispose();\r\n this._onBoardChanged.dispose();\r\n void this.connection?.stop();\r\n }\r\n\r\n private setState(state: ConnectionState): void {\r\n if (this._connectionState === state) return;\r\n this._connectionState = state;\r\n this._onConnectionStateChanged.fire(state);\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport * as crypto from 'crypto';\r\nimport { StudioApiClient } from '../StudioApiClient';\r\nimport { StudioSignalRClient } from '../StudioSignalRClient';\r\n\r\nexport abstract class BasePanelProvider implements vscode.WebviewViewProvider {\r\n protected view?: vscode.WebviewView;\r\n protected projectSlug?: string;\r\n protected workspaceFolderPath?: string;\r\n protected api?: StudioApiClient;\r\n protected signalR?: StudioSignalRClient;\r\n private connectionDisposables: vscode.Disposable[] = [];\r\n private placeholderMessage = 'Waiting for AI Dev Studio backend...';\r\n\r\n constructor(\r\n protected readonly viewId: string,\r\n protected readonly extensionUri: vscode.Uri,\r\n protected readonly webviewScript: string,\r\n ) {}\r\n\r\n resolveWebviewView(webviewView: vscode.WebviewView): void {\r\n this.view = webviewView;\r\n if (this.api) {\r\n this.enableScripts(webviewView);\r\n this.wireUp(webviewView);\r\n } else {\r\n webviewView.webview.options = { enableScripts: false };\r\n webviewView.webview.html = this.buildPlaceholderHtml();\r\n }\r\n }\r\n\r\n connect(projectSlug: string, api: StudioApiClient, signalR: StudioSignalRClient, workspaceFolderPath?: string): void {\r\n this.projectSlug = projectSlug;\r\n this.workspaceFolderPath = workspaceFolderPath;\r\n this.api = api;\r\n this.signalR = signalR;\r\n if (this.view) {\r\n this.enableScripts(this.view);\r\n this.wireUp(this.view);\r\n }\r\n }\r\n\r\n setPlaceholderMessage(message: string): void {\r\n this.placeholderMessage = message;\r\n if (this.view && !this.api) {\r\n this.view.webview.options = { enableScripts: false };\r\n this.view.webview.html = this.buildPlaceholderHtml();\r\n }\r\n }\r\n\r\n private enableScripts(webviewView: vscode.WebviewView): void {\r\n webviewView.webview.options = {\r\n enableScripts: true,\r\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\r\n };\r\n webviewView.webview.html = this.buildHtml(webviewView.webview);\r\n }\r\n\r\n disconnect(): void {\r\n for (const d of this.connectionDisposables) d.dispose();\r\n this.connectionDisposables = [];\r\n this.projectSlug = undefined;\r\n this.workspaceFolderPath = undefined;\r\n this.api = undefined;\r\n this.signalR = undefined;\r\n this.send({ type: 'loading' });\r\n }\r\n\r\n protected send(message: unknown): void {\r\n this.view?.webview.postMessage(message);\r\n }\r\n\r\n private wireUp(view: vscode.WebviewView): void {\r\n for (const d of this.connectionDisposables) d.dispose();\r\n this.connectionDisposables = [];\r\n this.onConnected(view, this.connectionDisposables);\r\n }\r\n\r\n protected abstract onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void;\r\n\r\n private buildPlaceholderHtml(): string {\r\n return `\r\n\r\n

${this.placeholderMessage}

`;\r\n }\r\n\r\n private buildHtml(webview: vscode.Webview): string {\r\n const nonce = crypto.randomBytes(16).toString('hex');\r\n const scriptUri = webview.asWebviewUri(\r\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', this.webviewScript),\r\n );\r\n return `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n\r\n`;\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromAgentsWebview } from '../webviews/shared/protocol';\r\n\r\nexport class AgentsPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.agents', extensionUri, 'agents/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onAgentsChanged(() => {\r\n if (webviewReady) void this.refresh();\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromAgentsWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh();\r\n } else if (msg.type === 'run') {\r\n await this.api!.runAgent(this.projectSlug!, msg.agentSlug);\r\n } else if (msg.type === 'stop') {\r\n await this.api!.stopAgent(this.projectSlug!, msg.agentSlug);\r\n }\r\n if (msg.type !== 'ready') {\r\n await this.refresh();\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listAgents(this.projectSlug!);\r\n this.send({ type: 'agents', data });\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load agents: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromMessagesWebview } from '../webviews/shared/protocol';\r\n\r\nexport class MessagesPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.messages', extensionUri, 'messages/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onMessagesChanged(() => {\r\n if (webviewReady) void this.refresh(view);\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromMessagesWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh(view);\r\n } else if (msg.type === 'process') {\r\n await this.api!.processMessage(this.projectSlug!, msg.agentSlug, msg.fileName);\r\n await this.refresh(view);\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(view: vscode.WebviewView): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listAllMessages(this.projectSlug!);\r\n this.send({ type: 'messages', data });\r\n view.badge = data.length > 0\r\n ? { value: data.length, tooltip: `${data.length} unprocessed message(s)` }\r\n : undefined;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load messages: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport type { FromDecisionsWebview } from '../webviews/shared/protocol';\r\n\r\nexport class DecisionsPanelProvider extends BasePanelProvider {\r\n constructor(extensionUri: vscode.Uri) {\r\n super('aidev.decisions', extensionUri, 'decisions/main.js');\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n disposables.push(this.signalR!.onDecisionsChanged(() => {\r\n if (webviewReady) void this.refresh(view);\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromDecisionsWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh(view);\r\n } else if (msg.type === 'resolve') {\r\n await this.api!.resolveDecision(this.projectSlug!, msg.decisionId, msg.resolution);\r\n await this.refresh(view);\r\n }\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(view: vscode.WebviewView): Promise {\r\n if (!this.api) return;\r\n this.send({ type: 'loading' });\r\n try {\r\n const data = await this.api.listDecisions(this.projectSlug!, 'pending');\r\n this.send({ type: 'decisions', data });\r\n view.badge = data.length > 0\r\n ? { value: data.length, tooltip: `${data.length} pending decision(s)` }\r\n : undefined;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load decisions: ${e}` });\r\n }\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport * as crypto from 'crypto';\r\nimport type { Logger } from '../Logger';\r\n\r\nexport class LogsPanelProvider implements vscode.WebviewViewProvider, vscode.Disposable {\r\n private view?: vscode.WebviewView;\r\n private readonly disposables: vscode.Disposable[] = [];\r\n\r\n constructor(\r\n private readonly extensionUri: vscode.Uri,\r\n private readonly logger: Logger,\r\n ) {}\r\n\r\n resolveWebviewView(webviewView: vscode.WebviewView): void {\r\n this.view = webviewView;\r\n\r\n webviewView.webview.options = {\r\n enableScripts: true,\r\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\r\n };\r\n webviewView.webview.html = this.buildHtml(webviewView.webview);\r\n\r\n // Send buffered history when the view first opens or becomes visible again.\r\n webviewView.onDidChangeVisibility(() => {\r\n if (webviewView.visible) this.sendHistory();\r\n }, undefined, this.disposables);\r\n\r\n this.sendHistory();\r\n\r\n // Stream new log entries to the webview.\r\n this.disposables.push(\r\n this.logger.subscribe(entry => {\r\n webviewView.webview.postMessage({ type: 'entry', entry });\r\n }),\r\n );\r\n\r\n // When logger buffer is cleared, notify the webview.\r\n this.disposables.push(\r\n this.logger.onCleared(() => {\r\n webviewView.webview.postMessage({ type: 'cleared' });\r\n }),\r\n );\r\n\r\n // Handle clear command from the webview.\r\n this.disposables.push(\r\n webviewView.webview.onDidReceiveMessage(msg => {\r\n if (msg.type === 'clear') this.logger.clearBuffer();\r\n if (msg.type === 'ready') this.sendHistory();\r\n }),\r\n );\r\n }\r\n\r\n private sendHistory(): void {\r\n this.view?.webview.postMessage({ type: 'history', entries: this.logger.getHistory() });\r\n }\r\n\r\n dispose(): void {\r\n for (const d of this.disposables) d.dispose();\r\n }\r\n\r\n private buildHtml(webview: vscode.Webview): string {\r\n const nonce = crypto.randomBytes(16).toString('hex');\r\n const scriptUri = webview.asWebviewUri(\r\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', 'logs/main.js'),\r\n );\r\n return `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n\r\n`;\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\nimport * as crypto from 'crypto';\r\nimport { BasePanelProvider } from './BasePanelProvider';\r\nimport { StudioApiClient } from '../StudioApiClient';\r\nimport { StudioSignalRClient } from '../StudioSignalRClient';\r\nimport { GitHubBoardClient } from '../GitHubBoardClient';\r\nimport type { AgentSummary, BoardData, GitHubRepoInfo } from '../types';\r\nimport type { FromKanbanWebview } from '../webviews/shared/protocol';\r\n\r\nconst SCOPES_ISSUES_ONLY = ['repo'];\r\nconst SCOPES_WITH_PROJECTS = ['repo', 'project'];\r\n\r\nexport class KanbanPanelProvider extends BasePanelProvider {\r\n private static readonly backlogColumnId = 'backlog';\r\n private editorPanel?: vscode.WebviewPanel;\r\n private editorDisposables: vscode.Disposable[] = [];\r\n private currentBoard?: BoardData;\r\n private gitHubRepo?: GitHubRepoInfo;\r\n private cachedGitHubClient?: GitHubBoardClient;\r\n\r\n constructor(extensionUri: vscode.Uri) {\r\n super('ai-dev-studio.kanban', extensionUri, 'kanban/main.js');\r\n }\r\n\r\n openEditor(): void {\r\n if (this.editorPanel) {\r\n this.editorPanel.reveal(vscode.ViewColumn.Active, true);\r\n return;\r\n }\r\n\r\n const panel = vscode.window.createWebviewPanel(\r\n 'aidev.boardEditor',\r\n 'AI Dev Board',\r\n { viewColumn: vscode.ViewColumn.Active, preserveFocus: false },\r\n {\r\n enableScripts: true,\r\n localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews')],\r\n retainContextWhenHidden: true,\r\n },\r\n );\r\n\r\n this.editorPanel = panel;\r\n panel.webview.html = this.buildPanelHtml(panel.webview);\r\n\r\n const onDispose = panel.onDidDispose(() => {\r\n onDispose.dispose();\r\n this.disposeEditorConnections();\r\n this.editorPanel = undefined;\r\n });\r\n\r\n if (this.api) {\r\n this.wireEditorPanel(panel);\r\n } else {\r\n panel.webview.html = this.buildPlaceholderHtml();\r\n }\r\n }\r\n\r\n override connect(\r\n projectSlug: string,\r\n api: StudioApiClient,\r\n signalR: StudioSignalRClient,\r\n workspaceFolderPath?: string,\r\n gitHubRepo?: GitHubRepoInfo,\r\n ): void {\r\n this.gitHubRepo = gitHubRepo;\r\n this.cachedGitHubClient = undefined; // reset on reconnect\r\n super.connect(projectSlug, api, signalR, workspaceFolderPath);\r\n if (this.editorPanel) {\r\n this.editorPanel.webview.html = this.buildPanelHtml(this.editorPanel.webview);\r\n this.wireEditorPanel(this.editorPanel);\r\n }\r\n }\r\n\r\n override disconnect(): void {\r\n this.gitHubRepo = undefined;\r\n this.cachedGitHubClient = undefined;\r\n this.disposeEditorConnections();\r\n if (this.editorPanel) {\r\n this.editorPanel.webview.html = this.buildPlaceholderHtml();\r\n }\r\n super.disconnect();\r\n }\r\n\r\n protected onConnected(view: vscode.WebviewView, disposables: vscode.Disposable[]): void {\r\n let webviewReady = false;\r\n\r\n disposables.push(this.signalR!.onBoardChanged(() => {\r\n if (webviewReady) {\r\n void this.refresh(view);\r\n }\r\n }));\r\n\r\n disposables.push(view.webview.onDidReceiveMessage(async (msg: FromKanbanWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refresh(view);\r\n return;\r\n }\r\n\r\n if (msg.type === 'refresh') {\r\n await this.refresh(view);\r\n return;\r\n }\r\n\r\n if (msg.type === 'githubSignIn') {\r\n this.cachedGitHubClient = undefined;\r\n await this.refreshWithGitHubAuth(view, true);\r\n return;\r\n }\r\n\r\n await this.handleAction(msg);\r\n await this.refresh(view);\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n protected override send(message: unknown): void {\r\n super.send(message);\r\n this.editorPanel?.webview.postMessage(message);\r\n }\r\n\r\n private wireEditorPanel(panel: vscode.WebviewPanel): void {\r\n this.disposeEditorConnections();\r\n\r\n let webviewReady = false;\r\n\r\n this.editorDisposables.push(this.signalR!.onBoardChanged(() => {\r\n if (webviewReady) {\r\n void this.refreshPanel(panel);\r\n }\r\n }));\r\n\r\n this.editorDisposables.push(panel.webview.onDidReceiveMessage(async (msg: FromKanbanWebview) => {\r\n try {\r\n if (msg.type === 'ready') {\r\n webviewReady = true;\r\n await this.refreshPanel(panel);\r\n return;\r\n }\r\n\r\n if (msg.type === 'refresh') {\r\n await this.refreshPanel(panel);\r\n return;\r\n }\r\n\r\n if (msg.type === 'githubSignIn') {\r\n this.cachedGitHubClient = undefined;\r\n await this.refreshPanelWithGitHubAuth(panel, true);\r\n return;\r\n }\r\n\r\n await this.handleAction(msg);\r\n await this.refreshPanel(panel);\r\n } catch (e) {\r\n this.send({ type: 'error', message: String(e) });\r\n }\r\n }));\r\n }\r\n\r\n private async refresh(view: vscode.WebviewView): Promise {\r\n if (this.gitHubRepo) {\r\n await this.refreshWithGitHubAuth(view, false);\r\n return;\r\n }\r\n\r\n this.send({ type: 'loading' });\r\n try {\r\n const [board, agents] = await Promise.all([this.loadLocalBoard(), this.loadAgents()]);\r\n this.send({ type: 'board', data: board, agents });\r\n view.badge = board.columns.length > 0\r\n ? { value: Object.keys(board.tasks).length, tooltip: 'Board task count' }\r\n : undefined;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load board: ${e}` });\r\n }\r\n }\r\n\r\n private async refreshWithGitHubAuth(view: vscode.WebviewView, forcePrompt: boolean): Promise {\r\n if (!this.gitHubRepo) return;\r\n\r\n this.send({ type: 'loading' });\r\n try {\r\n const client = await this.getGitHubClient(forcePrompt);\r\n if (!client) {\r\n this.send({\r\n type: 'github-sign-in-required',\r\n owner: this.gitHubRepo.owner,\r\n repo: this.gitHubRepo.repo,\r\n });\r\n return;\r\n }\r\n\r\n const [board, agents] = await Promise.all([client.getBoard(), this.loadAgents()]);\r\n this.currentBoard = board;\r\n this.send({ type: 'board', data: board, agents, githubRepo: `${this.gitHubRepo.owner}/${this.gitHubRepo.repo}` });\r\n view.badge = { value: Object.keys(board.tasks).length, tooltip: 'GitHub Issues' };\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load GitHub Issues: ${e}` });\r\n }\r\n }\r\n\r\n private async refreshPanel(panel: vscode.WebviewPanel): Promise {\r\n if (this.gitHubRepo) {\r\n await this.refreshPanelWithGitHubAuth(panel, false);\r\n return;\r\n }\r\n\r\n this.send({ type: 'loading' });\r\n try {\r\n const [board, agents] = await Promise.all([this.loadLocalBoard(), this.loadAgents()]);\r\n this.send({ type: 'board', data: board, agents });\r\n panel.title = `AI Dev Board (${Object.keys(board.tasks).length})`;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load board: ${e}` });\r\n }\r\n }\r\n\r\n private async refreshPanelWithGitHubAuth(panel: vscode.WebviewPanel, forcePrompt: boolean): Promise {\r\n if (!this.gitHubRepo) return;\r\n\r\n this.send({ type: 'loading' });\r\n try {\r\n const client = await this.getGitHubClient(forcePrompt);\r\n if (!client) {\r\n this.send({\r\n type: 'github-sign-in-required',\r\n owner: this.gitHubRepo.owner,\r\n repo: this.gitHubRepo.repo,\r\n });\r\n return;\r\n }\r\n\r\n const [board, agents] = await Promise.all([client.getBoard(), this.loadAgents()]);\r\n this.currentBoard = board;\r\n this.send({ type: 'board', data: board, agents, githubRepo: `${this.gitHubRepo.owner}/${this.gitHubRepo.repo}` });\r\n panel.title = `AI Dev Board \u2014 ${this.gitHubRepo.owner}/${this.gitHubRepo.repo} (${Object.keys(board.tasks).length})`;\r\n } catch (e) {\r\n this.send({ type: 'error', message: `Failed to load GitHub Issues: ${e}` });\r\n }\r\n }\r\n\r\n private async getGitHubClient(createIfNone: boolean): Promise {\r\n if (!this.gitHubRepo) return undefined;\r\n if (this.cachedGitHubClient) return this.cachedGitHubClient;\r\n\r\n let session: vscode.AuthenticationSession | undefined;\r\n\r\n try {\r\n // Try with project scopes silently first \u2014 enables linked-project auto-discovery\r\n session = await vscode.authentication.getSession('github', SCOPES_WITH_PROJECTS, { silent: true }) ?? undefined;\r\n if (!session) {\r\n // Fall back to repo-only \u2014 issues still load, project status sync skipped\r\n session = await vscode.authentication.getSession('github', SCOPES_ISSUES_ONLY, { silent: true }) ?? undefined;\r\n }\r\n if (!session && createIfNone) {\r\n session = await vscode.authentication.getSession('github', SCOPES_WITH_PROJECTS, { createIfNone: true }) ?? undefined;\r\n }\r\n if (!session) return undefined;\r\n\r\n this.cachedGitHubClient = new GitHubBoardClient(\r\n this.gitHubRepo.owner,\r\n this.gitHubRepo.repo,\r\n session.accessToken,\r\n );\r\n return this.cachedGitHubClient;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n private disposeEditorConnections(): void {\r\n for (const disposable of this.editorDisposables) {\r\n disposable.dispose();\r\n }\r\n this.editorDisposables = [];\r\n }\r\n\r\n private buildPlaceholderHtml(): string {\r\n return `\r\n\r\n

Waiting for AI Dev Studio backend...

`;\r\n }\r\n\r\n private buildPanelHtml(webview: vscode.Webview): string {\r\n const nonce = crypto.randomBytes(16).toString('hex');\r\n const scriptUri = webview.asWebviewUri(\r\n vscode.Uri.joinPath(this.extensionUri, 'dist', 'webviews', 'kanban/main.js'),\r\n );\r\n\r\n return `\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n\r\n`;\r\n }\r\n\r\n private async loadLocalBoard(): Promise {\r\n if (!this.api || !this.projectSlug) {\r\n throw new Error('Board API is not connected.');\r\n }\r\n\r\n const board = await this.api.getBoard(this.projectSlug);\r\n this.currentBoard = board;\r\n return board;\r\n }\r\n\r\n private async loadAgents(): Promise {\r\n if (!this.api || !this.projectSlug) return [];\r\n try {\r\n return await this.api.listAgents(this.projectSlug);\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n private async handleAction(msg: Exclude): Promise {\r\n if (this.gitHubRepo) {\r\n await this.handleGitHubAction(msg);\r\n return;\r\n }\r\n\r\n await this.handleLocalAction(msg);\r\n }\r\n\r\n private async handleGitHubAction(\r\n msg: Exclude,\r\n ): Promise {\r\n const client = await this.getGitHubClient(false);\r\n if (!client) {\r\n throw new Error('GitHub is not authenticated.');\r\n }\r\n\r\n if (msg.type === 'createTask') {\r\n const task = await client.createIssue(\r\n msg.columnId ?? KanbanPanelProvider.backlogColumnId,\r\n msg.title.trim(),\r\n msg.description,\r\n );\r\n this.currentBoard = undefined;\r\n return;\r\n }\r\n\r\n if (msg.type === 'updateTask') {\r\n await client.updateIssue(msg.taskId, msg.columnId, msg.title.trim(), msg.description);\r\n this.currentBoard = undefined;\r\n return;\r\n }\r\n\r\n if (msg.type === 'moveTask') {\r\n const board = this.currentBoard ?? await (async () => {\r\n const b = await client.getBoard();\r\n this.currentBoard = b;\r\n return b;\r\n })();\r\n const task = board.tasks[msg.taskId];\r\n if (!task) throw new Error(`Task '${msg.taskId}' not found.`);\r\n await client.updateIssue(msg.taskId, msg.toColumnId, task.title, task.description);\r\n this.currentBoard = undefined;\r\n return;\r\n }\r\n\r\n if (msg.type === 'deleteTask') {\r\n await client.closeIssue(msg.taskId);\r\n this.currentBoard = undefined;\r\n }\r\n }\r\n\r\n private async handleLocalAction(\r\n msg: Exclude,\r\n ): Promise {\r\n if (!this.api || !this.projectSlug) {\r\n throw new Error('Board API is not connected.');\r\n }\r\n\r\n if (msg.type === 'createTask') {\r\n const board = this.currentBoard ?? await this.loadLocalBoard();\r\n const targetColumnId = this.resolveBacklogColumnId(board) ?? msg.columnId;\r\n await this.api.createBoardTask(this.projectSlug, {\r\n columnId: targetColumnId,\r\n title: msg.title.trim(),\r\n description: this.normalizeOptional(msg.description),\r\n assignee: this.normalizeOptional(msg.assignee),\r\n priority: this.normalizePriority(msg.priority),\r\n tags: this.normalizeTags(msg.tags),\r\n });\r\n return;\r\n }\r\n\r\n if (msg.type === 'updateTask') {\r\n await this.api.updateBoardTask(this.projectSlug, msg.taskId, {\r\n columnId: msg.columnId,\r\n title: msg.title.trim(),\r\n description: this.normalizeOptional(msg.description),\r\n assignee: this.normalizeOptional(msg.assignee),\r\n priority: this.normalizePriority(msg.priority),\r\n tags: this.normalizeTags(msg.tags),\r\n });\r\n return;\r\n }\r\n\r\n if (msg.type === 'moveTask') {\r\n const board = this.currentBoard ?? await this.loadLocalBoard();\r\n const task = board.tasks[msg.taskId];\r\n if (!task) {\r\n throw new Error(`Task '${msg.taskId}' was not found.`);\r\n }\r\n\r\n await this.api.updateBoardTask(this.projectSlug, msg.taskId, {\r\n columnId: msg.toColumnId,\r\n title: task.title,\r\n description: task.description,\r\n assignee: task.assignee,\r\n priority: this.normalizePriority(task.priority),\r\n tags: this.normalizeTags(task.tags),\r\n });\r\n return;\r\n }\r\n\r\n if (msg.type === 'deleteTask') {\r\n await this.api.deleteBoardTask(this.projectSlug, msg.taskId);\r\n return;\r\n }\r\n\r\n if (msg.type === 'addColumn') {\r\n await this.api.addBoardColumn(this.projectSlug, msg.id, msg.title);\r\n return;\r\n }\r\n\r\n if (msg.type === 'renameColumn') {\r\n await this.api.renameBoardColumn(this.projectSlug, msg.columnId, msg.title);\r\n return;\r\n }\r\n\r\n if (msg.type === 'deleteColumn') {\r\n await this.api.removeBoardColumn(this.projectSlug, msg.columnId);\r\n }\r\n }\r\n\r\n private normalizePriority(priority?: string): string {\r\n const trimmed = priority?.trim().toLowerCase();\r\n if (!trimmed) return 'normal';\r\n return trimmed;\r\n }\r\n\r\n private normalizeOptional(value?: string): string | undefined {\r\n const trimmed = value?.trim();\r\n return trimmed ? trimmed : undefined;\r\n }\r\n\r\n private normalizeTags(tags?: string[]): string[] {\r\n if (!Array.isArray(tags)) {\r\n return [];\r\n }\r\n\r\n const seen = new Set();\r\n const normalized: string[] = [];\r\n for (const tag of tags) {\r\n const clean = tag.trim();\r\n const key = clean.toLowerCase();\r\n if (clean && !seen.has(key)) {\r\n seen.add(key);\r\n normalized.push(clean);\r\n }\r\n }\r\n return normalized;\r\n }\r\n\r\n private resolveBacklogColumnId(board: BoardData): string | undefined {\r\n return board.columns.find(column => column.id === KanbanPanelProvider.backlogColumnId)?.id;\r\n }\r\n}\r\n", "import type { BoardColumnItem, BoardData, BoardTaskItem } from './types';\r\n\r\nconst GITHUB_API = 'https://api.github.com';\r\nconst GITHUB_GRAPHQL = 'https://api.github.com/graphql';\r\n\r\nconst COL_BACKLOG = 'backlog';\r\nconst COL_IN_PROGRESS = 'in-progress';\r\nconst COL_REVIEW = 'review';\r\nconst COL_DONE = 'done';\r\n\r\nconst COLUMN_LABEL: Partial> = {\r\n [COL_IN_PROGRESS]: 'in-progress',\r\n [COL_REVIEW]: 'review',\r\n};\r\n\r\n// \u2500\u2500 REST types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ninterface GitHubIssue {\r\n number: number;\r\n node_id: string;\r\n title: string;\r\n body: string | null;\r\n state: string;\r\n labels: Array<{ name: string }>;\r\n assignees: Array<{ login: string }>;\r\n created_at: string;\r\n closed_at: string | null;\r\n pull_request?: unknown;\r\n}\r\n\r\n// \u2500\u2500 GraphQL types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ninterface GqlFieldValue {\r\n name?: string;\r\n field?: { name?: string };\r\n}\r\n\r\ninterface GqlProjectItem {\r\n id: string;\r\n fieldValues: { nodes: GqlFieldValue[] };\r\n content: {\r\n id?: string;\r\n number?: number;\r\n title?: string;\r\n body?: string | null;\r\n state?: string;\r\n createdAt?: string;\r\n closedAt?: string | null;\r\n assignees?: { nodes: Array<{ login: string }> };\r\n labels?: { nodes: Array<{ name: string }> };\r\n } | null;\r\n}\r\n\r\ninterface GqlStatusField {\r\n id: string;\r\n name: string;\r\n options: Array<{ id: string; name: string }>;\r\n}\r\n\r\ninterface GqlProjectV2 {\r\n id: string;\r\n fields: { nodes: Array> };\r\n items: { nodes: GqlProjectItem[] };\r\n}\r\n\r\n// \u2500\u2500 Project cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ninterface ProjectCache {\r\n projectId: string;\r\n statusFieldId: string;\r\n /** column id \u2192 status option id */\r\n optionByColumn: Map;\r\n /** issue number \u2192 project item id */\r\n itemIdByIssue: Map;\r\n}\r\n\r\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nfunction mapStatusToColumn(statusName: string): string {\r\n const s = statusName.toLowerCase().trim();\r\n if (s.includes('progress') || s === 'doing' || s === 'wip' || s === 'started') return COL_IN_PROGRESS;\r\n if (s.includes('review') || s === 'pr open' || s.includes('pr')) return COL_REVIEW;\r\n if (s === 'done' || s.includes('done') || s.includes('complet') || s.includes('shipped') || s.includes('closed') || s.includes('finish')) return COL_DONE;\r\n return COL_BACKLOG;\r\n}\r\n\r\nfunction buildProjectCache(project: GqlProjectV2): ProjectCache {\r\n const statusField = project.fields.nodes.find(\r\n f => f.id && f.name?.toLowerCase() === 'status' && f.options,\r\n ) as GqlStatusField | undefined;\r\n\r\n if (!statusField) {\r\n throw new Error('Project has no \"Status\" single-select field.');\r\n }\r\n\r\n const optionByColumn = new Map();\r\n for (const opt of statusField.options) {\r\n const col = mapStatusToColumn(opt.name);\r\n if (!optionByColumn.has(col)) {\r\n optionByColumn.set(col, opt.id);\r\n }\r\n }\r\n\r\n const itemIdByIssue = new Map();\r\n for (const item of project.items.nodes) {\r\n if (item.content?.number) {\r\n itemIdByIssue.set(item.content.number, item.id);\r\n }\r\n }\r\n\r\n return { projectId: project.id, statusFieldId: statusField.id, optionByColumn, itemIdByIssue };\r\n}\r\n\r\nfunction resolveColumnFromLabels(issue: GitHubIssue): string {\r\n if (issue.state === 'closed') return COL_DONE;\r\n const names = new Set(issue.labels.map(l => l.name.toLowerCase()));\r\n if (names.has('in-progress')) return COL_IN_PROGRESS;\r\n if (names.has('review')) return COL_REVIEW;\r\n return COL_BACKLOG;\r\n}\r\n\r\nfunction toTask(issue: Partial & { number: number; title: string }): BoardTaskItem {\r\n return {\r\n id: String(issue.number),\r\n title: issue.title,\r\n priority: 'normal',\r\n description: issue.body ?? undefined,\r\n assignee: issue.assignees?.[0]?.login,\r\n tags: (issue.labels ?? [])\r\n .map(l => l.name)\r\n .filter(n => n !== 'in-progress' && n !== 'review'),\r\n createdAt: issue.created_at,\r\n completedAt: issue.closed_at ?? undefined,\r\n };\r\n}\r\n\r\n// \u2500\u2500 GraphQL query/mutation strings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n// Fetches the first Projects v2 linked to this repository (requires 'project' OAuth scope)\r\nconst AUTO_DISCOVER_PROJECT_QUERY = `\r\nquery AutoDiscoverProject($owner: String!, $repo: String!) {\r\n repository(owner: $owner, name: $repo) {\r\n projectsV2(first: 1) {\r\n nodes {\r\n id\r\n fields(first: 20) {\r\n nodes {\r\n ... on ProjectV2SingleSelectField { id name options { id name } }\r\n }\r\n }\r\n items(first: 100) {\r\n nodes {\r\n id\r\n fieldValues(first: 8) {\r\n nodes {\r\n ... on ProjectV2ItemFieldSingleSelectValue {\r\n name\r\n field { ... on ProjectV2SingleSelectField { name } }\r\n }\r\n }\r\n }\r\n content {\r\n ... on Issue {\r\n id number title body state createdAt closedAt\r\n assignees(first: 5) { nodes { login } }\r\n labels(first: 10) { nodes { name } }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}`;\r\n\r\nconst ADD_TO_PROJECT_MUTATION = `\r\nmutation AddToProject($projectId: ID!, $contentId: ID!) {\r\n addProjectV2ItemById(input: { projectId: $projectId contentId: $contentId }) {\r\n item { id }\r\n }\r\n}`;\r\n\r\nconst SET_STATUS_MUTATION = `\r\nmutation SetStatus($projectId: ID!, $itemId: ID!, $fieldId: ID!, $optionId: String!) {\r\n updateProjectV2ItemFieldValue(input: {\r\n projectId: $projectId\r\n itemId: $itemId\r\n fieldId: $fieldId\r\n value: { singleSelectOptionId: $optionId }\r\n }) {\r\n projectV2Item { id }\r\n }\r\n}`;\r\n\r\n// \u2500\u2500 GitHubBoardClient \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport class GitHubBoardClient {\r\n private projectCache?: ProjectCache;\r\n\r\n constructor(\r\n private readonly owner: string,\r\n private readonly repo: string,\r\n private readonly token: string,\r\n ) {}\r\n\r\n // \u2500\u2500 Public board API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n async getBoard(): Promise {\r\n const [open, closed] = await Promise.all([\r\n this.listIssues('open'),\r\n this.listIssues('closed'),\r\n ]);\r\n const issues = [...open, ...closed].filter(i => !i.pull_request);\r\n\r\n const columns: BoardColumnItem[] = [\r\n { id: COL_BACKLOG, title: 'Backlog', taskIds: [] },\r\n { id: COL_IN_PROGRESS, title: 'In Progress', taskIds: [] },\r\n { id: COL_REVIEW, title: 'Review', taskIds: [] },\r\n { id: COL_DONE, title: 'Done', taskIds: [] },\r\n ];\r\n const colMap = new Map(columns.map(c => [c.id, c]));\r\n const tasks: Record = {};\r\n\r\n const project = await this.tryAutoDiscoverProject();\r\n if (project) {\r\n this.projectCache = buildProjectCache(project);\r\n\r\n const columnByIssue = new Map();\r\n for (const item of project.items.nodes) {\r\n if (!item.content?.number) continue;\r\n const statusValue = item.fieldValues.nodes.find(\r\n fv => fv.field?.name?.toLowerCase() === 'status',\r\n );\r\n if (statusValue?.name) {\r\n columnByIssue.set(item.content.number, mapStatusToColumn(statusValue.name));\r\n }\r\n }\r\n\r\n for (const issue of issues) {\r\n const task = toTask(issue);\r\n const columnId = columnByIssue.get(issue.number) ?? resolveColumnFromLabels(issue);\r\n colMap.get(columnId)?.taskIds.push(task.id);\r\n tasks[task.id] = task;\r\n }\r\n } else {\r\n for (const issue of issues) {\r\n const task = toTask(issue);\r\n colMap.get(resolveColumnFromLabels(issue))?.taskIds.push(task.id);\r\n tasks[task.id] = task;\r\n }\r\n }\r\n\r\n return { columns, tasks };\r\n }\r\n\r\n async createIssue(columnId: string, title: string, description?: string): Promise {\r\n const issue = await this.callRest(\r\n 'POST',\r\n `/repos/${this.owner}/${this.repo}/issues`,\r\n { title, body: description ?? '' },\r\n );\r\n\r\n if (this.projectCache) {\r\n await this.addIssueToProjectAndSetStatus(issue.node_id, issue.number, columnId);\r\n } else {\r\n const colLabel = COLUMN_LABEL[columnId];\r\n if (colLabel) {\r\n await this.callRest('PUT', `/repos/${this.owner}/${this.repo}/issues/${issue.number}/labels`, {\r\n labels: [colLabel],\r\n });\r\n }\r\n }\r\n\r\n return toTask(issue);\r\n }\r\n\r\n async updateIssue(\r\n issueNumber: string,\r\n columnId: string,\r\n title: string,\r\n description?: string,\r\n ): Promise {\r\n const num = parseInt(issueNumber, 10);\r\n const state = columnId === COL_DONE ? 'closed' : 'open';\r\n\r\n const issue = await this.callRest(\r\n 'PATCH',\r\n `/repos/${this.owner}/${this.repo}/issues/${num}`,\r\n { title, body: description ?? '', state },\r\n );\r\n\r\n if (this.projectCache) {\r\n await this.setProjectItemStatus(num, columnId);\r\n } else {\r\n const baseLabels = issue.labels.map(l => l.name).filter(n => n !== 'in-progress' && n !== 'review');\r\n const colLabel = state !== 'closed' ? COLUMN_LABEL[columnId] : undefined;\r\n const newLabels = colLabel ? [...baseLabels, colLabel] : baseLabels;\r\n await this.callRest('PUT', `/repos/${this.owner}/${this.repo}/issues/${num}/labels`, {\r\n labels: newLabels,\r\n });\r\n return toTask({ ...issue, state, labels: newLabels.map(n => ({ name: n })) });\r\n }\r\n\r\n return toTask({ ...issue, state });\r\n }\r\n\r\n async closeIssue(issueNumber: string): Promise {\r\n const num = parseInt(issueNumber, 10);\r\n await this.callRest('PATCH', `/repos/${this.owner}/${this.repo}/issues/${num}`, {\r\n state: 'closed',\r\n });\r\n if (this.projectCache) {\r\n await this.setProjectItemStatus(num, COL_DONE);\r\n }\r\n }\r\n\r\n // \u2500\u2500 Project auto-discovery \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async tryAutoDiscoverProject(): Promise {\r\n try {\r\n const result = await this.callGraphQL<{\r\n repository?: { projectsV2?: { nodes: GqlProjectV2[] } };\r\n }>(AUTO_DISCOVER_PROJECT_QUERY, { owner: this.owner, repo: this.repo });\r\n return result.repository?.projectsV2?.nodes?.[0] ?? null;\r\n } catch {\r\n // No 'project' OAuth scope, no linked projects, or network error \u2014 fall back to labels\r\n return null;\r\n }\r\n }\r\n\r\n // \u2500\u2500 Project operations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async addIssueToProjectAndSetStatus(\r\n nodeId: string,\r\n issueNumber: number,\r\n columnId: string,\r\n ): Promise {\r\n if (!this.projectCache) return;\r\n\r\n const addResult = await this.callGraphQL<{\r\n addProjectV2ItemById: { item: { id: string } };\r\n }>(ADD_TO_PROJECT_MUTATION, {\r\n projectId: this.projectCache.projectId,\r\n contentId: nodeId,\r\n });\r\n\r\n const itemId = addResult.addProjectV2ItemById.item.id;\r\n this.projectCache.itemIdByIssue.set(issueNumber, itemId);\r\n await this.setProjectItemStatusById(itemId, columnId);\r\n }\r\n\r\n private async setProjectItemStatus(issueNumber: number, columnId: string): Promise {\r\n if (!this.projectCache) return;\r\n const itemId = this.projectCache.itemIdByIssue.get(issueNumber);\r\n if (!itemId) return;\r\n await this.setProjectItemStatusById(itemId, columnId);\r\n }\r\n\r\n private async setProjectItemStatusById(itemId: string, columnId: string): Promise {\r\n if (!this.projectCache) return;\r\n const optionId = this.projectCache.optionByColumn.get(columnId);\r\n if (!optionId) return;\r\n\r\n await this.callGraphQL(SET_STATUS_MUTATION, {\r\n projectId: this.projectCache.projectId,\r\n itemId,\r\n fieldId: this.projectCache.statusFieldId,\r\n optionId,\r\n });\r\n }\r\n\r\n // \u2500\u2500 REST helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async listIssues(state: 'open' | 'closed'): Promise {\r\n return this.callRest(\r\n 'GET',\r\n `/repos/${this.owner}/${this.repo}/issues?state=${state}&per_page=100&sort=created&direction=desc`,\r\n );\r\n }\r\n\r\n private async callRest(method: string, path: string, body?: unknown): Promise {\r\n const res = await fetch(`${GITHUB_API}${path}`, {\r\n method,\r\n headers: {\r\n Authorization: `Bearer ${this.token}`,\r\n Accept: 'application/vnd.github+json',\r\n 'X-GitHub-Api-Version': '2022-11-28',\r\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\r\n },\r\n body: body !== undefined ? JSON.stringify(body) : undefined,\r\n });\r\n\r\n if (!res.ok) {\r\n const text = await res.text().catch(() => '');\r\n throw new Error(`GitHub REST ${method} ${path} \u2192 ${res.status}: ${text}`);\r\n }\r\n if (res.status === 204) return undefined as T;\r\n return res.json() as Promise;\r\n }\r\n\r\n private async callGraphQL(query: string, variables: Record): Promise {\r\n const res = await fetch(GITHUB_GRAPHQL, {\r\n method: 'POST',\r\n headers: {\r\n Authorization: `Bearer ${this.token}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ query, variables }),\r\n });\r\n\r\n if (!res.ok) {\r\n const text = await res.text().catch(() => '');\r\n throw new Error(`GitHub GraphQL error ${res.status}: ${text}`);\r\n }\r\n\r\n const data = await res.json() as { data?: T; errors?: Array<{ message: string }> };\r\n if (data.errors?.length) {\r\n throw new Error(`GitHub GraphQL: ${data.errors.map(e => e.message).join('; ')}`);\r\n }\r\n return data.data as T;\r\n }\r\n}\r\n", "import * as vscode from 'vscode';\r\n\r\nexport type LogLevel = 'info' | 'warn' | 'error';\r\n\r\nexport interface LogEntry {\r\n timestamp: string;\r\n level: LogLevel;\r\n message: string;\r\n}\r\n\r\ntype LogSubscriber = (entry: LogEntry) => void;\r\ntype ClearSubscriber = () => void;\r\n\r\nconst MAX_BUFFER = 1000;\r\n\r\nexport class Logger implements vscode.Disposable {\r\n private readonly channel: vscode.OutputChannel;\r\n private readonly buffer: LogEntry[] = [];\r\n private readonly subscribers: LogSubscriber[] = [];\r\n private readonly clearSubscribers: ClearSubscriber[] = [];\r\n\r\n constructor(channelName: string) {\r\n this.channel = vscode.window.createOutputChannel(channelName);\r\n }\r\n\r\n /** Backward-compatible alias for info(). */\r\n appendLine(message: string): void {\r\n this.info(message);\r\n }\r\n\r\n info(message: string): void {\r\n this.emit('info', message);\r\n }\r\n\r\n warn(message: string): void {\r\n this.emit('warn', message);\r\n }\r\n\r\n error(message: string): void {\r\n this.emit('error', message);\r\n }\r\n\r\n private emit(level: LogLevel, message: string): void {\r\n const entry: LogEntry = { timestamp: new Date().toISOString(), level, message };\r\n const formatted = `[${entry.timestamp}] [${level.toUpperCase().padEnd(5)}] ${message}`;\r\n this.channel.appendLine(formatted);\r\n this.buffer.push(entry);\r\n if (this.buffer.length > MAX_BUFFER) this.buffer.shift();\r\n for (const sub of this.subscribers) sub(entry);\r\n }\r\n\r\n subscribe(fn: LogSubscriber): vscode.Disposable {\r\n this.subscribers.push(fn);\r\n return new vscode.Disposable(() => {\r\n const idx = this.subscribers.indexOf(fn);\r\n if (idx >= 0) this.subscribers.splice(idx, 1);\r\n });\r\n }\r\n\r\n onCleared(fn: ClearSubscriber): vscode.Disposable {\r\n this.clearSubscribers.push(fn);\r\n return new vscode.Disposable(() => {\r\n const idx = this.clearSubscribers.indexOf(fn);\r\n if (idx >= 0) this.clearSubscribers.splice(idx, 1);\r\n });\r\n }\r\n\r\n getHistory(): LogEntry[] {\r\n return [...this.buffer];\r\n }\r\n\r\n clearBuffer(): void {\r\n this.buffer.length = 0;\r\n for (const sub of this.clearSubscribers) sub();\r\n }\r\n\r\n dispose(): void {\r\n this.channel.dispose();\r\n }\r\n}\r\n"], + "mappings": "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", + "names": ["HttpError", "errorMessage", "statusCode", "trueProto", "exports", "TimeoutError", "AbortError", "UnsupportedTransportError", "message", "transport", "DisabledTransportError", "FailedToStartTransportError", "FailedToNegotiateWithServerError", "AggregateErrors", "innerErrors", "HttpResponse", "statusCode", "statusText", "content", "exports", "HttpClient", "url", "options", "LogLevel", "exports", "NullLogger", "_logLevel", "_message", "exports", "exports", "ILogger_1", "Loggers_1", "pkg_version_1", "exports", "Arg", "val", "name", "values", "Platform", "_Platform", "getDataDetail", "data", "includeContent", "detail", "isArrayBuffer", "formatArrayBuffer", "view", "str", "num", "pad", "sendMessage", "logger", "transportName", "httpClient", "url", "content", "options", "headers", "value", "getUserAgentHeader", "responseType", "response", "createLogger", "ConsoleLogger", "SubjectSubscription", "subject", "observer", "index", "_", "minimumLogLevel", "logLevel", "message", "msg", "userAgentHeaderName", "constructUserAgent", "getOsName", "getRuntime", "getRuntimeVersion", "version", "os", "runtime", "runtimeVersion", "userAgent", "majorAndMinor", "getErrorString", "e", "getGlobalThis", "Errors_1", "HttpClient_1", "ILogger_1", "Utils_1", "FetchHttpClient", "logger", "requireFunc", "request", "abortController", "error", "timeoutId", "msTimeout", "response", "e", "errorMessage", "deserializeContent", "payload", "url", "cookies", "c", "exports", "responseType", "content", "Errors_1", "HttpClient_1", "ILogger_1", "Utils_1", "XhrHttpClient", "logger", "request", "resolve", "reject", "xhr", "headers", "header", "exports", "Errors_1", "FetchHttpClient_1", "HttpClient_1", "Utils_1", "XhrHttpClient_1", "DefaultHttpClient", "logger", "request", "url", "exports", "TextMessageFormat", "_TextMessageFormat", "output", "input", "messages", "exports", "TextMessageFormat_1", "Utils_1", "HandshakeProtocol", "handshakeRequest", "data", "messageData", "remainingData", "binaryData", "separatorIndex", "responseLength", "textData", "messages", "response", "exports", "MessageType", "exports", "Utils_1", "Subject", "item", "observer", "err", "exports", "IHubProtocol_1", "Utils_1", "MessageBuffer", "protocol", "connection", "bufferSize", "message", "serializedMessage", "backpressurePromise", "backpressurePromiseResolver", "backpressurePromiseRejector", "resolve", "reject", "BufferedItem", "ackMessage", "newestAckedMessage", "index", "element", "currentId", "sequenceId", "messages", "error", "exports", "id", "resolver", "rejector", "HandshakeProtocol_1", "Errors_1", "IHubProtocol_1", "ILogger_1", "Subject_1", "Utils_1", "MessageBuffer_1", "DEFAULT_TIMEOUT_IN_MS", "DEFAULT_PING_INTERVAL_IN_MS", "DEFAULT_STATEFUL_RECONNECT_BUFFER_SIZE", "HubConnectionState", "exports", "HubConnection", "_HubConnection", "connection", "logger", "protocol", "reconnectPolicy", "serverTimeoutInMilliseconds", "keepAliveIntervalInMilliseconds", "statefulReconnectBufferSize", "data", "error", "url", "handshakePromise", "resolve", "reject", "version", "handshakeRequest", "e", "startPromise", "state", "methodName", "args", "streams", "streamIds", "invocationDescriptor", "promiseQueue", "subject", "cancelInvocation", "invocationEvent", "message", "sendPromise", "newMethod", "method", "handlers", "removeIdx", "callback", "messages", "responseMessage", "remainingData", "nextPing", "invocationMessage", "methods", "methodsCopy", "expectsResponse", "res", "exception", "completionMessage", "m", "prevRes", "c", "reconnectStartTime", "previousReconnectAttempts", "retryError", "nextRetryDelay", "previousRetryCount", "elapsedMilliseconds", "retryReason", "callbacks", "key", "nonblocking", "invocationId", "streamId", "err", "item", "i", "argument", "arg", "id", "result", "DEFAULT_RETRY_DELAYS_IN_MILLISECONDS", "DefaultReconnectPolicy", "retryDelays", "retryContext", "exports", "HeaderNames", "exports", "HeaderNames_1", "HttpClient_1", "AccessTokenHttpClient", "innerClient", "accessTokenFactory", "request", "allowRetry", "response", "url", "exports", "HttpTransportType", "exports", "TransferFormat", "AbortController", "exports", "AbortController_1", "Errors_1", "ILogger_1", "ITransport_1", "Utils_1", "LongPollingTransport", "httpClient", "logger", "options", "url", "transferFormat", "name", "value", "headers", "pollOptions", "pollUrl", "response", "e", "data", "deleteOptions", "error", "err", "logMessage", "exports", "ILogger_1", "ITransport_1", "Utils_1", "ServerSentEventsTransport", "httpClient", "accessToken", "logger", "options", "url", "transferFormat", "resolve", "reject", "opened", "eventSource", "cookies", "headers", "name", "value", "e", "error", "data", "exports", "HeaderNames_1", "ILogger_1", "ITransport_1", "Utils_1", "WebSocketTransport", "httpClient", "accessTokenFactory", "logger", "logMessageContent", "webSocketConstructor", "headers", "url", "transferFormat", "token", "resolve", "reject", "webSocket", "cookies", "opened", "name", "value", "_event", "event", "error", "message", "data", "exports", "AccessTokenHttpClient_1", "DefaultHttpClient_1", "Errors_1", "ILogger_1", "ITransport_1", "LongPollingTransport_1", "ServerSentEventsTransport_1", "Utils_1", "WebSocketTransport_1", "MAX_REDIRECTS", "HttpConnection", "url", "options", "webSocketModule", "eventSourceModule", "requireFunc", "transferFormat", "message", "data", "TransportSendQueue", "error", "resolve", "e", "negotiateResponse", "redirects", "accessToken", "headers", "name", "value", "negotiateUrl", "response", "errorMessage", "connectionToken", "requestedTransport", "requestedTransferFormat", "connectUrl", "transportExceptions", "transports", "negotiate", "endpoint", "transportOrError", "ex", "transport", "callStop", "useStatefulReconnect", "transportMatches", "s", "aTag", "searchParams", "exports", "actualTransport", "_TransportSendQueue", "_transport", "PromiseSource", "transportResult", "arrayBuffers", "totalLength", "b", "a", "result", "offset", "item", "reject", "reason", "IHubProtocol_1", "ILogger_1", "ITransport_1", "Loggers_1", "TextMessageFormat_1", "JSON_HUB_PROTOCOL_NAME", "JsonHubProtocol", "input", "logger", "messages", "hubMessages", "message", "parsedMessage", "value", "errorMessage", "exports", "DefaultReconnectPolicy_1", "HttpConnection_1", "HubConnection_1", "ILogger_1", "JsonHubProtocol_1", "Loggers_1", "Utils_1", "LogLevelNameMapping", "parseLogLevel", "name", "mapping", "HubConnectionBuilder", "logging", "isLogger", "logLevel", "url", "transportTypeOrOptions", "protocol", "retryDelaysOrReconnectPolicy", "milliseconds", "options", "httpConnectionOptions", "connection", "exports", "logger", "Errors_1", "exports", "HttpClient_1", "DefaultHttpClient_1", "HubConnection_1", "HubConnectionBuilder_1", "IHubProtocol_1", "ILogger_1", "ITransport_1", "Loggers_1", "JsonHubProtocol_1", "Subject_1", "Utils_1", "extension_exports", "__export", "activate", "deactivate", "log", "__toCommonJS", "vscode", "path", "fs", "os", "import_child_process", "import_events", "path", "WorkspaceDetector", "createWatcher", "readFile", "workspacePaths", "wsPath", "configPath", "filePath", "workspaceFolderPath", "raw", "config", "parseProjectConfig", "normalised", "ws", "normWs", "parsed", "projectSlug", "firstNonEmptyString", "apiPort", "firstPositiveNumber", "values", "value", "trimmed", "candidate", "BackendProcessManager", "options", "spawner", "fetcher", "delay", "ms", "resolve", "fileExists", "p", "createInterface", "line", "healthUrl", "attempt", "vscode", "StatusBarManager", "StudioApiClient", "baseUrl", "fetcher", "url", "init", "projectSlug", "enc", "agentSlug", "processed", "agents", "a", "msgs", "m", "fileName", "status", "decisionId", "resolution", "request", "taskId", "id", "title", "columnId", "path", "res", "ApiError", "body", "value", "statusCode", "vscode", "import_signalr", "defaultFactory", "url", "ctx", "StudioSignalRClient", "hubUrl", "factory", "projectSlug", "msg", "kinds", "k", "state", "vscode", "crypto", "BasePanelProvider", "viewId", "extensionUri", "webviewScript", "webviewView", "projectSlug", "api", "signalR", "workspaceFolderPath", "message", "d", "view", "webview", "nonce", "scriptUri", "AgentsPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "MessagesPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "DecisionsPanelProvider", "BasePanelProvider", "extensionUri", "view", "disposables", "webviewReady", "msg", "e", "data", "vscode", "crypto", "LogsPanelProvider", "extensionUri", "logger", "webviewView", "entry", "msg", "d", "webview", "nonce", "scriptUri", "vscode", "crypto", "GITHUB_API", "GITHUB_GRAPHQL", "COL_BACKLOG", "COL_IN_PROGRESS", "COL_REVIEW", "COL_DONE", "COLUMN_LABEL", "mapStatusToColumn", "statusName", "s", "buildProjectCache", "project", "statusField", "f", "optionByColumn", "opt", "col", "itemIdByIssue", "item", "resolveColumnFromLabels", "issue", "names", "l", "toTask", "n", "AUTO_DISCOVER_PROJECT_QUERY", "ADD_TO_PROJECT_MUTATION", "SET_STATUS_MUTATION", "GitHubBoardClient", "owner", "repo", "token", "open", "closed", "issues", "i", "columns", "colMap", "tasks", "columnByIssue", "statusValue", "fv", "task", "columnId", "title", "description", "colLabel", "issueNumber", "num", "state", "baseLabels", "newLabels", "nodeId", "itemId", "optionId", "method", "path", "body", "res", "text", "query", "variables", "data", "e", "SCOPES_ISSUES_ONLY", "SCOPES_WITH_PROJECTS", "KanbanPanelProvider", "_KanbanPanelProvider", "BasePanelProvider", "extensionUri", "panel", "onDispose", "projectSlug", "api", "signalR", "workspaceFolderPath", "gitHubRepo", "view", "disposables", "webviewReady", "msg", "e", "message", "board", "agents", "forcePrompt", "client", "createIfNone", "session", "GitHubBoardClient", "disposable", "webview", "nonce", "scriptUri", "task", "b", "targetColumnId", "priority", "trimmed", "value", "tags", "seen", "normalized", "tag", "clean", "key", "column", "vscode", "MAX_BUFFER", "Logger", "channelName", "message", "level", "entry", "formatted", "sub", "fn", "idx", "backendManager", "signalRClient", "activeApiClient", "activeProjectSlug", "statusBar", "log", "DEFAULT_PLACEHOLDER", "activate", "context", "Logger", "StatusBarManager", "agentsProvider", "AgentsPanelProvider", "messagesProvider", "MessagesPanelProvider", "decisionsProvider", "DecisionsPanelProvider", "logsProvider", "LogsPanelProvider", "debugLogsProvider", "kanbanProvider", "KanbanPanelProvider", "detector", "WorkspaceDetector", "glob", "watcher", "handler", "uri", "filePath", "config", "workspaceFolderPath", "connectBackend", "wsPath", "teardown", "scanWorkspace", "settings", "getSettings", "globalDir", "getGlobalTemplateRoot", "e", "folders", "f", "setDisconnectedPlaceholder", "validConfigs", "createFailures", "folder", "ensureProjectConfig", "aiDevDir", "configPath", "folderName", "projectSlug", "slugifyFolderName", "initialConfig", "repairProjectConfig", "ensureDefaultAgents", "name", "defaultPort", "fallbackSlug", "parsed", "raw", "normalized", "normalizeProjectConfig", "currentSlug", "currentPort", "repaired", "firstNonEmptyString", "apiPort", "firstPositiveNumber", "values", "value", "trimmed", "candidate", "globalTemplateRoot", "templateRoots", "getTemplateRoots", "discovered", "discoverTemplates", "partialsCache", "agentsDir", "created", "discoveredTemplate", "targetAgentDir", "template", "slug", "partials", "loadTemplatePartials", "content", "renderTemplate", "readComposedTemplate", "compactContent", "agentJson", "thinking", "root", "entries", "entry", "jsonPath", "mdPath", "compactMdPath", "a", "b", "extensionPath", "precedence", "packaged", "devFallback", "packagedRoot", "roots", "index", "arr", "configuredPath", "firstWorkspace", "bootstrapApiPort", "clampInt", "backendMaxAttempts", "backendRetryDelayMs", "templatesPrecedence", "min", "max", "fallback", "templateRoot", "sharedDir", "files", "key", "templatePath", "templateSlug", "_match", "partialKey", "partial", "message", "detectGitHubRepo", "workspaceFolderPath", "raw", "remotePattern", "remotes", "match", "name", "url", "parsed", "parseGitHubUrl", "m", "connectBackend", "context", "config", "agentsProvider", "messagesProvider", "decisionsProvider", "kanbanProvider", "settings", "getSettings", "binaryName", "binaryPath", "hasBundledBinary", "repoRoot", "devApiProject", "useDevDotnetFallback", "log", "backendManager", "BackendProcessManager", "line", "source", "msg", "binary", "args", "options", "r", "statusBar", "e", "baseUrl", "api", "StudioApiClient", "activeApiClient", "activeProjectSlug", "signalRClient", "StudioSignalRClient", "state", "gitHubRepo", "teardown", "deactivate"] } diff --git a/ai-dev-vscode/dist/webviews/kanban/main.js b/ai-dev-vscode/dist/webviews/kanban/main.js index 18311fb..702bf13 100644 --- a/ai-dev-vscode/dist/webviews/kanban/main.js +++ b/ai-dev-vscode/dist/webviews/kanban/main.js @@ -1,12 +1,12 @@ -"use strict";(()=>{var om=Object.create;var Pf=Object.defineProperty;var dm=Object.getOwnPropertyDescriptor;var sm=Object.getOwnPropertyNames;var rm=Object.getPrototypeOf,mm=Object.prototype.hasOwnProperty;var tt=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports);var vm=(l,t,a,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let u of sm(t))!mm.call(l,u)&&u!==a&&Pf(l,u,{get:()=>t[u],enumerable:!(e=dm(t,u))||e.enumerable});return l};var zu=(l,t,a)=>(a=l!=null?om(rm(l)):{},vm(t||!l||!l.__esModule?Pf(a,"default",{value:l,enumerable:!0}):a,l));var so=tt(_=>{"use strict";var ui=Symbol.for("react.transitional.element"),ym=Symbol.for("react.portal"),gm=Symbol.for("react.fragment"),bm=Symbol.for("react.strict_mode"),hm=Symbol.for("react.profiler"),pm=Symbol.for("react.consumer"),Sm=Symbol.for("react.context"),zm=Symbol.for("react.forward_ref"),Tm=Symbol.for("react.suspense"),Em=Symbol.for("react.memo"),uo=Symbol.for("react.lazy"),Am=Symbol.for("react.activity"),lo=Symbol.iterator;function Dm(l){return l===null||typeof l!="object"?null:(l=lo&&l[lo]||l["@@iterator"],typeof l=="function"?l:null)}var no={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},io=Object.assign,co={};function Ma(l,t,a){this.props=l,this.context=t,this.refs=co,this.updater=a||no}Ma.prototype.isReactComponent={};Ma.prototype.setState=function(l,t){if(typeof l!="object"&&typeof l!="function"&&l!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,l,t,"setState")};Ma.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,"forceUpdate")};function fo(){}fo.prototype=Ma.prototype;function ni(l,t,a){this.props=l,this.context=t,this.refs=co,this.updater=a||no}var ii=ni.prototype=new fo;ii.constructor=ni;io(ii,Ma.prototype);ii.isPureReactComponent=!0;var to=Array.isArray;function ei(){}var k={H:null,A:null,T:null,S:null},oo=Object.prototype.hasOwnProperty;function ci(l,t,a){var e=a.ref;return{$$typeof:ui,type:l,key:t,ref:e!==void 0?e:null,props:a}}function Mm(l,t){return ci(l.type,t,l.props)}function fi(l){return typeof l=="object"&&l!==null&&l.$$typeof===ui}function Om(l){var t={"=":"=0",":":"=2"};return"$"+l.replace(/[=:]/g,function(a){return t[a]})}var ao=/\/+/g;function ai(l,t){return typeof l=="object"&&l!==null&&l.key!=null?Om(""+l.key):t.toString(36)}function _m(l){switch(l.status){case"fulfilled":return l.value;case"rejected":throw l.reason;default:switch(typeof l.status=="string"?l.then(ei,ei):(l.status="pending",l.then(function(t){l.status==="pending"&&(l.status="fulfilled",l.value=t)},function(t){l.status==="pending"&&(l.status="rejected",l.reason=t)})),l.status){case"fulfilled":return l.value;case"rejected":throw l.reason}}throw l}function Da(l,t,a,e,u){var n=typeof l;(n==="undefined"||n==="boolean")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case"bigint":case"string":case"number":i=!0;break;case"object":switch(l.$$typeof){case ui:case ym:i=!0;break;case uo:return i=l._init,Da(i(l._payload),t,a,e,u)}}if(i)return u=u(l),i=e===""?"."+ai(l,0):e,to(u)?(a="",i!=null&&(a=i.replace(ao,"$&/")+"/"),Da(u,t,a,"",function(s){return s})):u!=null&&(fi(u)&&(u=Mm(u,a+(u.key==null||l&&l.key===u.key?"":(""+u.key).replace(ao,"$&/")+"/")+i)),t.push(u)),1;i=0;var c=e===""?".":e+":";if(to(l))for(var f=0;f{"use strict";ro.exports=so()});var To=tt(F=>{"use strict";function ri(l,t){var a=l.length;l.push(t);l:for(;0>>1,u=l[e];if(0>>1;eAu(c,a))fAu(s,c)?(l[e]=s,l[f]=a,e=f):(l[e]=c,l[i]=a,e=i);else if(fAu(s,a))l[e]=s,l[f]=a,e=f;else break l}}return t}function Au(l,t){var a=l.sortIndex-t.sortIndex;return a!==0?a:l.id-t.id}F.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(mo=performance,F.unstable_now=function(){return mo.now()}):(oi=Date,vo=oi.now(),F.unstable_now=function(){return oi.now()-vo});var mo,oi,vo,dt=[],Nt=[],Um=1,jl=null,hl=3,mi=!1,he=!1,pe=!1,vi=!1,bo=typeof setTimeout=="function"?setTimeout:null,ho=typeof clearTimeout=="function"?clearTimeout:null,yo=typeof setImmediate<"u"?setImmediate:null;function Du(l){for(var t=at(Nt);t!==null;){if(t.callback===null)Mu(Nt);else if(t.startTime<=l)Mu(Nt),t.sortIndex=t.expirationTime,ri(dt,t);else break;t=at(Nt)}}function yi(l){if(pe=!1,Du(l),!he)if(at(dt)!==null)he=!0,_a||(_a=!0,Oa());else{var t=at(Nt);t!==null&&gi(yi,t.startTime-l)}}var _a=!1,Se=-1,po=5,So=-1;function zo(){return vi?!0:!(F.unstable_now()-Sol&&zo());){var e=jl.callback;if(typeof e=="function"){jl.callback=null,hl=jl.priorityLevel;var u=e(jl.expirationTime<=l);if(l=F.unstable_now(),typeof u=="function"){jl.callback=u,Du(l),t=!0;break t}jl===at(dt)&&Mu(dt),Du(l)}else Mu(dt);jl=at(dt)}if(jl!==null)t=!0;else{var n=at(Nt);n!==null&&gi(yi,n.startTime-l),t=!1}}break l}finally{jl=null,hl=a,mi=!1}t=void 0}}finally{t?Oa():_a=!1}}}var Oa;typeof yo=="function"?Oa=function(){yo(di)}:typeof MessageChannel<"u"?(si=new MessageChannel,go=si.port2,si.port1.onmessage=di,Oa=function(){go.postMessage(null)}):Oa=function(){bo(di,0)};var si,go;function gi(l,t){Se=bo(function(){l(F.unstable_now())},t)}F.unstable_IdlePriority=5;F.unstable_ImmediatePriority=1;F.unstable_LowPriority=4;F.unstable_NormalPriority=3;F.unstable_Profiling=null;F.unstable_UserBlockingPriority=2;F.unstable_cancelCallback=function(l){l.callback=null};F.unstable_forceFrameRate=function(l){0>l||125e?(l.sortIndex=a,ri(Nt,l),at(dt)===null&&l===at(Nt)&&(pe?(ho(Se),Se=-1):pe=!0,gi(yi,a-e))):(l.sortIndex=u,ri(dt,l),he||mi||(he=!0,_a||(_a=!0,Oa()))),l};F.unstable_shouldYield=zo;F.unstable_wrapCallback=function(l){var t=hl;return function(){var a=hl;hl=t;try{return l.apply(this,arguments)}finally{hl=a}}}});var Ao=tt((py,Eo)=>{"use strict";Eo.exports=To()});var Mo=tt(Sl=>{"use strict";var Cm=Eu();function Do(l){var t="https://react.dev/errors/"+l;if(1{"use strict";function Oo(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Oo)}catch(l){console.error(l)}}Oo(),_o.exports=Mo()});var jr=tt(Pn=>{"use strict";var ol=Ao(),ts=Eu(),Rm=xo();function h(l){var t="https://react.dev/errors/"+l;if(1Ra||(l.current=tc[Ra],tc[Ra]=null,Ra--)}function J(l,t){Ra++,tc[Ra]=l.current,l.current=t}var it=ct(null),ke=ct(null),Vt=ct(null),fn=ct(null);function on(l,t){switch(J(Vt,t),J(ke,l),J(it,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Gd(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Gd(t),l=Or(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}rl(it),J(it,l)}function Pa(){rl(it),rl(ke),rl(Vt)}function ac(l){l.memoizedState!==null&&J(fn,l);var t=it.current,a=Or(t,l.type);t!==a&&(J(ke,l),J(it,a))}function dn(l){ke.current===l&&(rl(it),rl(ke)),fn.current===l&&(rl(fn),uu._currentValue=oa)}var bi,Co;function na(l){if(bi===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);bi=t&&t[1]||"",Co=-1{var sm=Object.create;var to=Object.defineProperty;var rm=Object.getOwnPropertyDescriptor;var mm=Object.getOwnPropertyNames;var vm=Object.getPrototypeOf,ym=Object.prototype.hasOwnProperty;var tt=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports);var gm=(l,t,a,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let u of mm(t))!ym.call(l,u)&&u!==a&&to(l,u,{get:()=>t[u],enumerable:!(e=rm(t,u))||e.enumerable});return l};var Tu=(l,t,a)=>(a=l!=null?sm(vm(l)):{},gm(t||!l||!l.__esModule?to(a,"default",{value:l,enumerable:!0}):a,l));var mo=tt(_=>{"use strict";var ni=Symbol.for("react.transitional.element"),bm=Symbol.for("react.portal"),hm=Symbol.for("react.fragment"),pm=Symbol.for("react.strict_mode"),Sm=Symbol.for("react.profiler"),zm=Symbol.for("react.consumer"),Tm=Symbol.for("react.context"),Em=Symbol.for("react.forward_ref"),Am=Symbol.for("react.suspense"),Dm=Symbol.for("react.memo"),io=Symbol.for("react.lazy"),Mm=Symbol.for("react.activity"),ao=Symbol.iterator;function Om(l){return l===null||typeof l!="object"?null:(l=ao&&l[ao]||l["@@iterator"],typeof l=="function"?l:null)}var co={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},fo=Object.assign,oo={};function Ma(l,t,a){this.props=l,this.context=t,this.refs=oo,this.updater=a||co}Ma.prototype.isReactComponent={};Ma.prototype.setState=function(l,t){if(typeof l!="object"&&typeof l!="function"&&l!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,l,t,"setState")};Ma.prototype.forceUpdate=function(l){this.updater.enqueueForceUpdate(this,l,"forceUpdate")};function so(){}so.prototype=Ma.prototype;function ii(l,t,a){this.props=l,this.context=t,this.refs=oo,this.updater=a||co}var ci=ii.prototype=new so;ci.constructor=ii;fo(ci,Ma.prototype);ci.isPureReactComponent=!0;var eo=Array.isArray;function ui(){}var k={H:null,A:null,T:null,S:null},ro=Object.prototype.hasOwnProperty;function fi(l,t,a){var e=a.ref;return{$$typeof:ni,type:l,key:t,ref:e!==void 0?e:null,props:a}}function _m(l,t){return fi(l.type,t,l.props)}function oi(l){return typeof l=="object"&&l!==null&&l.$$typeof===ni}function xm(l){var t={"=":"=0",":":"=2"};return"$"+l.replace(/[=:]/g,function(a){return t[a]})}var uo=/\/+/g;function ei(l,t){return typeof l=="object"&&l!==null&&l.key!=null?xm(""+l.key):t.toString(36)}function Nm(l){switch(l.status){case"fulfilled":return l.value;case"rejected":throw l.reason;default:switch(typeof l.status=="string"?l.then(ui,ui):(l.status="pending",l.then(function(t){l.status==="pending"&&(l.status="fulfilled",l.value=t)},function(t){l.status==="pending"&&(l.status="rejected",l.reason=t)})),l.status){case"fulfilled":return l.value;case"rejected":throw l.reason}}throw l}function Da(l,t,a,e,u){var n=typeof l;(n==="undefined"||n==="boolean")&&(l=null);var i=!1;if(l===null)i=!0;else switch(n){case"bigint":case"string":case"number":i=!0;break;case"object":switch(l.$$typeof){case ni:case bm:i=!0;break;case io:return i=l._init,Da(i(l._payload),t,a,e,u)}}if(i)return u=u(l),i=e===""?"."+ei(l,0):e,eo(u)?(a="",i!=null&&(a=i.replace(uo,"$&/")+"/"),Da(u,t,a,"",function(s){return s})):u!=null&&(oi(u)&&(u=_m(u,a+(u.key==null||l&&l.key===u.key?"":(""+u.key).replace(uo,"$&/")+"/")+i)),t.push(u)),1;i=0;var c=e===""?".":e+":";if(eo(l))for(var f=0;f{"use strict";vo.exports=mo()});var Ao=tt(F=>{"use strict";function mi(l,t){var a=l.length;l.push(t);l:for(;0>>1,u=l[e];if(0>>1;eDu(c,a))fDu(s,c)?(l[e]=s,l[f]=a,e=f):(l[e]=c,l[i]=a,e=i);else if(fDu(s,a))l[e]=s,l[f]=a,e=f;else break l}}return t}function Du(l,t){var a=l.sortIndex-t.sortIndex;return a!==0?a:l.id-t.id}F.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(yo=performance,F.unstable_now=function(){return yo.now()}):(di=Date,go=di.now(),F.unstable_now=function(){return di.now()-go});var yo,di,go,dt=[],Nt=[],Hm=1,jl=null,hl=3,vi=!1,he=!1,pe=!1,yi=!1,po=typeof setTimeout=="function"?setTimeout:null,So=typeof clearTimeout=="function"?clearTimeout:null,bo=typeof setImmediate<"u"?setImmediate:null;function Mu(l){for(var t=at(Nt);t!==null;){if(t.callback===null)Ou(Nt);else if(t.startTime<=l)Ou(Nt),t.sortIndex=t.expirationTime,mi(dt,t);else break;t=at(Nt)}}function gi(l){if(pe=!1,Mu(l),!he)if(at(dt)!==null)he=!0,_a||(_a=!0,Oa());else{var t=at(Nt);t!==null&&bi(gi,t.startTime-l)}}var _a=!1,Se=-1,zo=5,To=-1;function Eo(){return yi?!0:!(F.unstable_now()-Tol&&Eo());){var e=jl.callback;if(typeof e=="function"){jl.callback=null,hl=jl.priorityLevel;var u=e(jl.expirationTime<=l);if(l=F.unstable_now(),typeof u=="function"){jl.callback=u,Mu(l),t=!0;break t}jl===at(dt)&&Ou(dt),Mu(l)}else Ou(dt);jl=at(dt)}if(jl!==null)t=!0;else{var n=at(Nt);n!==null&&bi(gi,n.startTime-l),t=!1}}break l}finally{jl=null,hl=a,vi=!1}t=void 0}}finally{t?Oa():_a=!1}}}var Oa;typeof bo=="function"?Oa=function(){bo(si)}:typeof MessageChannel<"u"?(ri=new MessageChannel,ho=ri.port2,ri.port1.onmessage=si,Oa=function(){ho.postMessage(null)}):Oa=function(){po(si,0)};var ri,ho;function bi(l,t){Se=po(function(){l(F.unstable_now())},t)}F.unstable_IdlePriority=5;F.unstable_ImmediatePriority=1;F.unstable_LowPriority=4;F.unstable_NormalPriority=3;F.unstable_Profiling=null;F.unstable_UserBlockingPriority=2;F.unstable_cancelCallback=function(l){l.callback=null};F.unstable_forceFrameRate=function(l){0>l||125e?(l.sortIndex=a,mi(Nt,l),at(dt)===null&&l===at(Nt)&&(pe?(So(Se),Se=-1):pe=!0,bi(gi,a-e))):(l.sortIndex=u,mi(dt,l),he||vi||(he=!0,_a||(_a=!0,Oa()))),l};F.unstable_shouldYield=Eo;F.unstable_wrapCallback=function(l){var t=hl;return function(){var a=hl;hl=t;try{return l.apply(this,arguments)}finally{hl=a}}}});var Mo=tt((zy,Do)=>{"use strict";Do.exports=Ao()});var _o=tt(Sl=>{"use strict";var Bm=Au();function Oo(l){var t="https://react.dev/errors/"+l;if(1{"use strict";function xo(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(xo)}catch(l){console.error(l)}}xo(),No.exports=_o()});var Vr=tt(li=>{"use strict";var ol=Mo(),es=Au(),Ym=Uo();function h(l){var t="https://react.dev/errors/"+l;if(1Ra||(l.current=ac[Ra],ac[Ra]=null,Ra--)}function J(l,t){Ra++,ac[Ra]=l.current,l.current=t}var it=ct(null),ke=ct(null),Vt=ct(null),on=ct(null);function dn(l,t){switch(J(Vt,t),J(ke,l),J(it,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Qd(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Qd(t),l=xr(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}rl(it),J(it,l)}function Pa(){rl(it),rl(ke),rl(Vt)}function ec(l){l.memoizedState!==null&&J(on,l);var t=it.current,a=xr(t,l.type);t!==a&&(J(ke,l),J(it,a))}function sn(l){ke.current===l&&(rl(it),rl(ke)),on.current===l&&(rl(on),uu._currentValue=oa)}var hi,Bo;function na(l){if(hi===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);hi=t&&t[1]||"",Bo=-1)":-1u||f[e]!==s[u]){var y=` -`+f[e].replace(" at new "," at ");return l.displayName&&y.includes("")&&(y=y.replace("",l.displayName)),y}while(1<=e&&0<=u);break}}}finally{hi=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?na(a):""}function Qm(l,t){switch(l.tag){case 26:case 27:case 5:return na(l.type);case 16:return na("Lazy");case 13:return l.child!==t&&t!==null?na("Suspense Fallback"):na("Suspense");case 19:return na("SuspenseList");case 0:case 15:return pi(l.type,!1);case 11:return pi(l.type.render,!1);case 1:return pi(l.type,!0);case 31:return na("Activity");default:return""}}function Ho(l){try{var t="",a=null;do t+=Qm(l,a),a=l,l=l.return;while(l);return t}catch(e){return` +`+f[e].replace(" at new "," at ");return l.displayName&&y.includes("")&&(y=y.replace("",l.displayName)),y}while(1<=e&&0<=u);break}}}finally{pi=!1,Error.prepareStackTrace=a}return(a=l?l.displayName||l.name:"")?na(a):""}function Zm(l,t){switch(l.tag){case 26:case 27:case 5:return na(l.type);case 16:return na("Lazy");case 13:return l.child!==t&&t!==null?na("Suspense Fallback"):na("Suspense");case 19:return na("SuspenseList");case 0:case 15:return Si(l.type,!1);case 11:return Si(l.type.render,!1);case 1:return Si(l.type,!0);case 31:return na("Activity");default:return""}}function Ro(l){try{var t="",a=null;do t+=Zm(l,a),a=l,l=l.return;while(l);return t}catch(e){return` Error generating stack: `+e.message+` -`+e.stack}}var ec=Object.prototype.hasOwnProperty,kc=ol.unstable_scheduleCallback,Si=ol.unstable_cancelCallback,jm=ol.unstable_shouldYield,Zm=ol.unstable_requestPaint,Rl=ol.unstable_now,Vm=ol.unstable_getCurrentPriorityLevel,fs=ol.unstable_ImmediatePriority,os=ol.unstable_UserBlockingPriority,sn=ol.unstable_NormalPriority,Lm=ol.unstable_LowPriority,ds=ol.unstable_IdlePriority,Km=ol.log,Jm=ol.unstable_setDisableYieldValue,fu=null,ql=null;function Gt(l){if(typeof Km=="function"&&Jm(l),ql&&typeof ql.setStrictMode=="function")try{ql.setStrictMode(fu,l)}catch{}}var Yl=Math.clz32?Math.clz32:Wm,km=Math.log,wm=Math.LN2;function Wm(l){return l>>>=0,l===0?32:31-(km(l)/wm|0)|0}var xu=256,Nu=262144,Uu=4194304;function ia(l){var t=l&42;if(t!==0)return t;switch(l&-l){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Yn(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var u=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=e&134217727;return c!==0?(e=c&~n,e!==0?u=ia(e):(i&=c,i!==0?u=ia(i):a||(a=c&~l,a!==0&&(u=ia(a))))):(c=e&~n,c!==0?u=ia(c):i!==0?u=ia(i):a||(a=e&~l,a!==0&&(u=ia(a)))),u===0?0:t!==0&&t!==u&&(t&n)===0&&(n=u&-u,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:u}function ou(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function $m(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ss(){var l=Uu;return Uu<<=1,(Uu&62914560)===0&&(Uu=4194304),l}function zi(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function du(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Fm(l,t,a,e,u,n){var i=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,s=l.hiddenUpdates;for(a=i&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var ev=/[\n"\\]/g;function Jl(l){return l.replace(ev,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ic(l,t,a,e,u,n,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+Vl(t)):l.value!==""+Vl(t)&&(l.value=""+Vl(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?cc(l,i,Vl(t)):a!=null?cc(l,i,Vl(a)):e!=null&&l.removeAttribute("value"),u==null&&n!=null&&(l.defaultChecked=!!n),u!=null&&(l.checked=u&&typeof u!="function"&&typeof u!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+Vl(c):l.removeAttribute("name")}function Ss(l,t,a,e,u,n,i,c){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){nc(l);return}a=a!=null?""+Vl(a):"",t=t!=null?""+Vl(t):a,c||t===l.value||(l.value=t),l.defaultValue=t}e=e??u,e=typeof e!="function"&&typeof e!="symbol"&&!!e,l.checked=c?l.checked:!!e,l.defaultChecked=!!e,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),nc(l)}function cc(l,t,a){t==="number"&&rn(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function ka(l,t,a,e){if(l=l.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),oc=!1;if(At)try{xa={},Object.defineProperty(xa,"passive",{get:function(){oc=!0}}),window.addEventListener("test",xa,xa),window.removeEventListener("test",xa,xa)}catch{oc=!1}var xa,Xt=null,Pc=null,wu=null;function Ds(){if(wu)return wu;var l,t=Pc,a=t.length,e,u="value"in Xt?Xt.value:Xt.textContent,n=u.length;for(l=0;l=Be),Lo=" ",Ko=!1;function Os(l,t){switch(l){case"keyup":return Uv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function _s(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ga=!1;function Hv(l,t){switch(l){case"compositionend":return _s(t);case"keypress":return t.which!==32?null:(Ko=!0,Lo);case"textInput":return l=t.data,l===Lo&&Ko?null:l;default:return null}}function Bv(l,t){if(Ga)return l==="compositionend"||!tf&&Os(l,t)?(l=Ds(),wu=Pc=Xt=null,Ga=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=e}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=Wo(a)}}function Cs(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?Cs(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function Hs(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=rn(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=rn(l.document)}return t}function af(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var Zv=At&&"documentMode"in document&&11>=document.documentMode,Xa=null,dc=null,qe=null,sc=!1;function Fo(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;sc||Xa==null||Xa!==rn(e)||(e=Xa,"selectionStart"in e&&af(e)?e={start:e.selectionStart,end:e.selectionEnd}:(e=(e.ownerDocument&&e.ownerDocument.defaultView||window).getSelection(),e={anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}),qe&&$e(qe,e)||(qe=e,e=Nn(dc,"onSelect"),0>=i,u-=i,et=1<<32-Yl(t)+u|a<D?(T=z,z=null):T=z.sibling;var R=m(d,z,r[D],g);if(R===null){z===null&&(z=T);break}l&&z&&R.alternate===null&&t(d,z),o=n(R,o,D),N===null?E=R:N.sibling=R,N=R,z=T}if(D===r.length)return a(d,z),q&>(d,D),E;if(z===null){for(;DD?(T=z,z=null):T=z.sibling;var Nl=m(d,z,R.value,g);if(Nl===null){z===null&&(z=T);break}l&&z&&Nl.alternate===null&&t(d,z),o=n(Nl,o,D),N===null?E=Nl:N.sibling=Nl,N=Nl,z=T}if(R.done)return a(d,z),q&>(d,D),E;if(z===null){for(;!R.done;D++,R=r.next())R=b(d,R.value,g),R!==null&&(o=n(R,o,D),N===null?E=R:N.sibling=R,N=R);return q&>(d,D),E}for(z=e(z);!R.done;D++,R=r.next())R=v(z,d,D,R.value,g),R!==null&&(l&&R.alternate!==null&&z.delete(R.key===null?D:R.key),o=n(R,o,D),N===null?E=R:N.sibling=R,N=R);return l&&z.forEach(function(pu){return t(d,pu)}),q&>(d,D),E}function H(d,o,r,g){if(typeof r=="object"&&r!==null&&r.type===Ba&&r.key===null&&(r=r.props.children),typeof r=="object"&&r!==null){switch(r.$$typeof){case _u:l:{for(var E=r.key;o!==null;){if(o.key===E){if(E=r.type,E===Ba){if(o.tag===7){a(d,o.sibling),g=u(o,r.props.children),g.return=d,d=g;break l}}else if(o.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===Ct&&ca(E)===o.type){a(d,o.sibling),g=u(o,r.props),Ae(g,r),g.return=d,d=g;break l}a(d,o);break}else t(d,o);o=o.sibling}r.type===Ba?(g=da(r.props.children,d.mode,g,r.key),g.return=d,d=g):(g=$u(r.type,r.key,r.props,null,d.mode,g),Ae(g,r),g.return=d,d=g)}return i(d);case xe:l:{for(E=r.key;o!==null;){if(o.key===E)if(o.tag===4&&o.stateNode.containerInfo===r.containerInfo&&o.stateNode.implementation===r.implementation){a(d,o.sibling),g=u(o,r.children||[]),g.return=d,d=g;break l}else{a(d,o);break}else t(d,o);o=o.sibling}g=xi(r,d.mode,g),g.return=d,d=g}return i(d);case Ct:return r=ca(r),H(d,o,r,g)}if(Ne(r))return S(d,o,r,g);if(Te(r)){if(E=Te(r),typeof E!="function")throw Error(h(150));return r=E.call(r),A(d,o,r,g)}if(typeof r.then=="function")return H(d,o,Yu(r),g);if(r.$$typeof===ht)return H(d,o,qu(d,r),g);Gu(d,r)}return typeof r=="string"&&r!==""||typeof r=="number"||typeof r=="bigint"?(r=""+r,o!==null&&o.tag===6?(a(d,o.sibling),g=u(o,r),g.return=d,d=g):(a(d,o),g=_i(r,d.mode,g),g.return=d,d=g),i(d)):a(d,o)}return function(d,o,r,g){try{Pe=0;var E=H(d,o,r,g);return $a=null,E}catch(z){if(z===me||z===Vn)throw z;var N=Hl(29,z,null,d.mode);return N.lanes=g,N.return=d,N}finally{}}}var ga=ws(!0),Ws=ws(!1),Ht=!1;function rf(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function hc(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Kt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Jt(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(G&2)!==0){var u=e.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),e.pending=t,t=vn(l),Qs(l,null,a),t}return Zn(l,e,t,a),vn(l)}function Ge(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,ms(l,a)}}function Ui(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var u=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var i={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?u=n=i:n=n.next=i,a=a.next}while(a!==null);n===null?u=n=t:n=n.next=t}else u=n=t;a={baseState:e.baseState,firstBaseUpdate:u,lastBaseUpdate:n,shared:e.shared,callbacks:e.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var pc=!1;function Xe(){if(pc){var l=Wa;if(l!==null)throw l}}function Qe(l,t,a,e){pc=!1;var u=l.updateQueue;Ht=!1;var n=u.firstBaseUpdate,i=u.lastBaseUpdate,c=u.shared.pending;if(c!==null){u.shared.pending=null;var f=c,s=f.next;f.next=null,i===null?n=s:i.next=s,i=f;var y=l.alternate;y!==null&&(y=y.updateQueue,c=y.lastBaseUpdate,c!==i&&(c===null?y.firstBaseUpdate=s:c.next=s,y.lastBaseUpdate=f))}if(n!==null){var b=u.baseState;i=0,y=s=f=null,c=n;do{var m=c.lane&-536870913,v=m!==c.lane;if(v?(B&m)===m:(e&m)===m){m!==0&&m===ae&&(pc=!0),y!==null&&(y=y.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var S=l,A=c;m=t;var H=a;switch(A.tag){case 1:if(S=A.payload,typeof S=="function"){b=S.call(H,b,m);break l}b=S;break l;case 3:S.flags=S.flags&-65537|128;case 0:if(S=A.payload,m=typeof S=="function"?S.call(H,b,m):S,m==null)break l;b=$({},b,m);break l;case 2:Ht=!0}}m=c.callback,m!==null&&(l.flags|=64,v&&(l.flags|=8192),v=u.callbacks,v===null?u.callbacks=[m]:v.push(m))}else v={lane:m,tag:c.tag,payload:c.payload,callback:c.callback,next:null},y===null?(s=y=v,f=b):y=y.next=v,i|=m;if(c=c.next,c===null){if(c=u.shared.pending,c===null)break;v=c,c=v.next,v.next=null,u.lastBaseUpdate=v,u.shared.pending=null}}while(!0);y===null&&(f=b),u.baseState=f,u.firstBaseUpdate=s,u.lastBaseUpdate=y,n===null&&(u.shared.lanes=0),ta|=i,l.lanes=i,l.memoizedState=b}}function $s(l,t){if(typeof l!="function")throw Error(h(191,l));l.call(t)}function Fs(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var i=M.T,c={};M.T=c,Df(l,!1,t,a);try{var f=u(),s=M.S;if(s!==null&&s(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var y=Fv(f,e);je(l,t,y,Gl(l))}else je(l,t,e,Gl(l))}catch(b){je(l,t,{then:function(){},status:"rejected",reason:b},Gl())}finally{X.p=n,i!==null&&c.types!==null&&(i.types=c.types),M.T=i}}function e1(){}function Ac(l,t,a,e){if(l.tag!==5)throw Error(h(476));var u=T0(l).queue;z0(l,u,t,oa,a===null?e1:function(){return E0(l),a(e)})}function T0(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:oa,baseState:oa,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mt,lastRenderedState:oa},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mt,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function E0(l){var t=T0(l);t.next===null&&(t=l.alternate.memoizedState),je(l,t.next.queue,{},Gl())}function Af(){return gl(uu)}function A0(){return el().memoizedState}function D0(){return el().memoizedState}function u1(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=Gl();l=Kt(a);var e=Jt(t,l,a);e!==null&&(Ol(e,t,a),Ge(e,t,a)),t={cache:of()},l.payload=t;return}t=t.return}}function n1(l,t,a){var e=Gl();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},kn(l)?O0(t,a):(a=uf(l,t,a,e),a!==null&&(Ol(a,l,e),_0(a,t,e)))}function M0(l,t,a){var e=Gl();je(l,t,a,e)}function je(l,t,a,e){var u={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(kn(l))O0(t,u);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,a);if(u.hasEagerState=!0,u.eagerState=c,Xl(c,i))return Zn(l,t,u,0),K===null&&jn(),!1}catch{}finally{}if(a=uf(l,t,u,e),a!==null)return Ol(a,l,e),_0(a,t,e),!0}return!1}function Df(l,t,a,e){if(e={lane:2,revertLane:Bf(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},kn(l)){if(t)throw Error(h(479))}else t=uf(l,a,e,2),t!==null&&Ol(t,l,2)}function kn(l){var t=l.alternate;return l===x||t!==null&&t===x}function O0(l,t){Fa=Sn=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function _0(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,ms(l,a)}}var tu={readContext:gl,use:Kn,useCallback:ll,useContext:ll,useEffect:ll,useImperativeHandle:ll,useLayoutEffect:ll,useInsertionEffect:ll,useMemo:ll,useReducer:ll,useRef:ll,useState:ll,useDebugValue:ll,useDeferredValue:ll,useTransition:ll,useSyncExternalStore:ll,useId:ll,useHostTransitionStatus:ll,useFormState:ll,useActionState:ll,useOptimistic:ll,useMemoCache:ll,useCacheRefresh:ll};tu.useEffectEvent=ll;var x0={readContext:gl,use:Kn,useCallback:function(l,t){return zl().memoizedState=[l,t===void 0?null:t],l},useContext:gl,useEffect:rd,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,Pu(4194308,4,g0.bind(null,t,l),a)},useLayoutEffect:function(l,t){return Pu(4194308,4,l,t)},useInsertionEffect:function(l,t){Pu(4,2,l,t)},useMemo:function(l,t){var a=zl();t=t===void 0?null:t;var e=l();if(ba){Gt(!0);try{l()}finally{Gt(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=zl();if(a!==void 0){var u=a(t);if(ba){Gt(!0);try{a(t)}finally{Gt(!1)}}}else u=t;return e.memoizedState=e.baseState=u,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},e.queue=l,l=l.dispatch=n1.bind(null,x,l),[e.memoizedState,l]},useRef:function(l){var t=zl();return l={current:l},t.memoizedState=l},useState:function(l){l=Tc(l);var t=l.queue,a=M0.bind(null,x,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:Tf,useDeferredValue:function(l,t){var a=zl();return Ef(a,l,t)},useTransition:function(){var l=Tc(!1);return l=z0.bind(null,x,l.queue,!0,!1),zl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=x,u=zl();if(q){if(a===void 0)throw Error(h(407));a=a()}else{if(a=t(),K===null)throw Error(h(349));(B&127)!==0||a0(e,t,a)}u.memoizedState=a;var n={value:a,getSnapshot:t};return u.queue=n,rd(u0.bind(null,e,n,l),[l]),e.flags|=2048,ue(9,{destroy:void 0},e0.bind(null,e,n,a,t),null),a},useId:function(){var l=zl(),t=K.identifierPrefix;if(q){var a=ut,e=et;a=(e&~(1<<32-Yl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=zn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof e.is=="string"?i.createElement("select",{is:e.is}):i.createElement("select"),e.multiple?n.multiple=!0:e.size&&(n.size=e.size);break;default:n=typeof e.is=="string"?i.createElement(u,{is:e.is}):i.createElement(u)}}n[vl]=t,n[_l]=e;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(bl(n,u,e),u){case"button":case"input":case"select":case"textarea":e=!!e.autoFocus;break l;case"img":e=!0;break l;default:e=!1}e&&rt(t)}}return w(t),Xi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==e&&rt(t);else{if(typeof e!="string"&&t.stateNode===null)throw Error(h(166));if(l=Vt.current,Na(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,u=yl,u!==null)switch(u.tag){case 27:case 5:e=u.memoizedProps}l[vl]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||Mr(l.nodeValue,a)),l||Pt(t,!0)}else l=Un(l).createTextNode(e),l[vl]=t,t.stateNode=l}return w(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(e=Na(t),a!==null){if(l===null){if(!e)throw Error(h(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(h(557));l[vl]=t}else va(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),l=!1}else a=Ni(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(Cl(t),t):(Cl(t),null);if((t.flags&128)!==0)throw Error(h(558))}return w(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(u=Na(t),e!==null&&e.dehydrated!==null){if(l===null){if(!u)throw Error(h(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(h(317));u[vl]=t}else va(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),u=!1}else u=Ni(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(Cl(t),t):(Cl(t),null)}return Cl(t),(t.flags&128)!==0?(t.lanes=a,t):(a=e!==null,l=l!==null&&l.memoizedState!==null,a&&(e=t.child,u=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(u=e.alternate.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==u&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),Xu(t,t.updateQueue),w(t),null);case 4:return Pa(),l===null&&Rf(t.stateNode.containerInfo),w(t),null;case 10:return Tt(t.type),w(t),null;case 19:if(rl(al),e=t.memoizedState,e===null)return w(t),null;if(u=(t.flags&128)!==0,n=e.rendering,n===null)if(u)De(e,!1);else{if(tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=pn(l),n!==null){for(t.flags|=128,De(e,!1),l=n.updateQueue,t.updateQueue=l,Xu(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)js(a,l),a=a.sibling;return J(al,al.current&1|2),q&>(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&Rl()>Dn&&(t.flags|=128,u=!0,De(e,!1),t.lanes=4194304)}else{if(!u)if(l=pn(n),l!==null){if(t.flags|=128,u=!0,l=l.updateQueue,t.updateQueue=l,Xu(t,l),De(e,!0),e.tail===null&&e.tailMode==="hidden"&&!n.alternate&&!q)return w(t),null}else 2*Rl()-e.renderingStartTime>Dn&&a!==536870912&&(t.flags|=128,u=!0,De(e,!1),t.lanes=4194304);e.isBackwards?(n.sibling=t.child,t.child=n):(l=e.last,l!==null?l.sibling=n:t.child=n,e.last=n)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=Rl(),l.sibling=null,a=al.current,J(al,u?a&1|2:a&1),q&>(t,e.treeForkCount),l):(w(t),null);case 22:case 23:return Cl(t),mf(),e=t.memoizedState!==null,l!==null?l.memoizedState!==null!==e&&(t.flags|=8192):e&&(t.flags|=8192),e?(a&536870912)!==0&&(t.flags&128)===0&&(w(t),t.subtreeFlags&6&&(t.flags|=8192)):w(t),a=t.updateQueue,a!==null&&Xu(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==a&&(t.flags|=2048),l!==null&&rl(sa),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Tt(il),w(t),null;case 25:return null;case 30:return null}throw Error(h(156,t.tag))}function d1(l,t){switch(ff(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Tt(il),Pa(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return dn(t),null;case 31:if(t.memoizedState!==null){if(Cl(t),t.alternate===null)throw Error(h(340));va()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Cl(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(h(340));va()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return rl(al),null;case 4:return Pa(),null;case 10:return Tt(t.type),null;case 22:case 23:return Cl(t),mf(),l!==null&&rl(sa),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Tt(il),null;case 25:return null;default:return null}}function j0(l,t){switch(ff(t),t.tag){case 3:Tt(il),Pa();break;case 26:case 27:case 5:dn(t);break;case 4:Pa();break;case 31:t.memoizedState!==null&&Cl(t);break;case 13:Cl(t);break;case 19:rl(al);break;case 10:Tt(t.type);break;case 22:case 23:Cl(t),mf(),l!==null&&rl(sa);break;case 24:Tt(il)}}function yu(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var u=e.next;a=u;do{if((a.tag&l)===l){e=void 0;var n=a.create,i=a.inst;e=n(),i.destroy=e}a=a.next}while(a!==u)}}catch(c){j(t,t.return,c)}}function la(l,t,a){try{var e=t.updateQueue,u=e!==null?e.lastEffect:null;if(u!==null){var n=u.next;e=n;do{if((e.tag&l)===l){var i=e.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,u=t;var f=a,s=c;try{s()}catch(y){j(u,f,y)}}}e=e.next}while(e!==n)}}catch(y){j(t,t.return,y)}}function Z0(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{Fs(t,a)}catch(e){j(l,l.return,e)}}}function V0(l,t,a){a.props=ha(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){j(l,t,e)}}function Ze(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var e=l.stateNode;break;case 30:e=l.stateNode;break;default:e=l.stateNode}typeof a=="function"?l.refCleanup=a(e):a.current=e}}catch(u){j(l,t,u)}}function nt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(u){j(l,t,u)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){j(l,t,u)}else a.current=null}function L0(l){var t=l.type,a=l.memoizedProps,e=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&e.focus();break l;case"img":a.src?e.src=a.src:a.srcSet&&(e.srcset=a.srcSet)}}catch(u){j(l,l.return,u)}}function Qi(l,t,a){try{var e=l.stateNode;N1(e,l.type,a,t),e[_l]=t}catch(u){j(l,l.return,u)}}function K0(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ea(l.type)||l.tag===4}function ji(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||K0(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ea(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function xc(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=pt));else if(e!==4&&(e===27&&ea(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(xc(l,t,a),l=l.sibling;l!==null;)xc(l,t,a),l=l.sibling}function An(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(e!==4&&(e===27&&ea(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(An(l,t,a),l=l.sibling;l!==null;)An(l,t,a),l=l.sibling}function J0(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);bl(t,e,a),t[vl]=l,t[_l]=a}catch(n){j(l,l.return,n)}}var bt=!1,nl=!1,Zi=!1,Dd=typeof WeakSet=="function"?WeakSet:Set,dl=null;function s1(l,t){if(l=l.containerInfo,qc=Rn,l=Hs(l),af(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var e=a.getSelection&&a.getSelection();if(e&&e.rangeCount!==0){a=e.anchorNode;var u=e.anchorOffset,n=e.focusNode;e=e.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var i=0,c=-1,f=-1,s=0,y=0,b=l,m=null;t:for(;;){for(var v;b!==a||u!==0&&b.nodeType!==3||(c=i+u),b!==n||e!==0&&b.nodeType!==3||(f=i+e),b.nodeType===3&&(i+=b.nodeValue.length),(v=b.firstChild)!==null;)m=b,b=v;for(;;){if(b===l)break t;if(m===a&&++s===u&&(c=i),m===n&&++y===e&&(f=i),(v=b.nextSibling)!==null)break;b=m,m=b.parentNode}b=v}a=c===-1||f===-1?null:{start:c,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Yc={focusedElem:l,selectionRange:a},Rn=!1,dl=t;dl!==null;)if(t=dl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,dl=l;else for(;dl!==null;){switch(t=dl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),bl(n,e,a),n[vl]=l,sl(n),e=n;break l;case"link":var i=kd("link","href",u).get(e+(a.href||""));if(i){for(var c=0;cH&&(i=H,H=A,A=i);var d=$o(c,A),o=$o(c,H);if(d&&o&&(v.rangeCount!==1||v.anchorNode!==d.node||v.anchorOffset!==d.offset||v.focusNode!==o.node||v.focusOffset!==o.offset)){var r=b.createRange();r.setStart(d.node,d.offset),v.removeAllRanges(),A>H?(v.addRange(r),v.extend(o.node,o.offset)):(r.setEnd(o.node,o.offset),v.addRange(r))}}}}for(b=[],v=c;v=v.parentNode;)v.nodeType===1&&b.push({element:v,left:v.scrollLeft,top:v.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ca?32:a,M.T=null,a=Cc,Cc=null;var n=wt,i=Et;if(fl=0,ie=wt=null,Et=0,(G&6)!==0)throw Error(h(331));var c=G;if(G|=4,er(n.current),lr(n,n.current,i,a),G=c,gu(0,!1),ql&&typeof ql.onPostCommitFiberRoot=="function")try{ql.onPostCommitFiberRoot(fu,n)}catch{}return!0}finally{X.p=u,M.T=e,hr(l,t)}}function xd(l,t,a){t=kl(a,t),t=Mc(l.stateNode,t,2),l=Jt(l,t,2),l!==null&&(du(l,2),ft(l))}function j(l,t,a){if(l.tag===3)xd(l,l,a);else for(;t!==null;){if(t.tag===3){xd(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(kt===null||!kt.has(e))){l=kl(a,l),a=B0(2),e=Jt(t,a,2),e!==null&&(R0(a,e,t,l),du(e,2),ft(e));break}}t=t.return}}function Li(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new v1;var u=new Set;e.set(t,u)}else u=e.get(t),u===void 0&&(u=new Set,e.set(t,u));u.has(a)||(Uf=!0,u.add(a),l=p1.bind(null,l,t,a),t.then(l,l))}function p1(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,K===l&&(B&a)===a&&(tl===4||tl===3&&(B&62914560)===B&&300>Rl()-wn?(G&2)===0&&ce(l,0):Cf|=a,ne===B&&(ne=0)),ft(l)}function Sr(l,t){t===0&&(t=ss()),l=Ta(l,t),l!==null&&(du(l,t),ft(l))}function S1(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),Sr(l,a)}function z1(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,u=l.memoizedState;u!==null&&(a=u.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(h(314))}e!==null&&e.delete(t),Sr(l,a)}function T1(l,t){return kc(l,t)}var _n=null,Ha=null,Bc=!1,xn=!1,Ki=!1,Zt=0;function ft(l){l!==Ha&&l.next===null&&(Ha===null?_n=Ha=l:Ha=Ha.next=l),xn=!0,Bc||(Bc=!0,A1())}function gu(l,t){if(!Ki&&xn){Ki=!0;do for(var a=!1,e=_n;e!==null;){if(!t)if(l!==0){var u=e.pendingLanes;if(u===0)var n=0;else{var i=e.suspendedLanes,c=e.pingedLanes;n=(1<<31-Yl(42|l)+1)-1,n&=u&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,Nd(e,n))}else n=B,n=Yn(e,e===K?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(n&3)===0||ou(e,n)||(a=!0,Nd(e,n));e=e.next}while(a);Ki=!1}}function E1(){zr()}function zr(){xn=Bc=!1;var l=0;Zt!==0&&C1()&&(l=Zt);for(var t=Rl(),a=null,e=_n;e!==null;){var u=e.next,n=Tr(e,t);n===0?(e.next=null,a===null?_n=u:a.next=u,u===null&&(Ha=a)):(a=e,(l!==0||(n&3)!==0)&&(xn=!0)),e=u}fl!==0&&fl!==5||gu(l,!1),Zt!==0&&(Zt=0)}function Tr(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,u=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var y=f.transferSize,b=f.initiatorType;y&&Yd(b)&&(f=f.responseEnd,i+=y*(f"u"?null:document;function Ur(l,t,a){var e=ye;if(e&&typeof t=="string"&&t){var u=Jl(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),Ld.has(u)||(Ld.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),bl(t,"link",l),sl(t),e.head.appendChild(t)))}}function j1(l){xt.D(l),Ur("dns-prefetch",l,null)}function Z1(l,t){xt.C(l,t),Ur("preconnect",l,t)}function V1(l,t,a){xt.L(l,t,a);var e=ye;if(e&&l&&t){var u='link[rel="preload"][as="'+Jl(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+Jl(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+Jl(a.imageSizes)+'"]')):u+='[href="'+Jl(l)+'"]';var n=u;switch(t){case"style":n=fe(l);break;case"script":n=ge(l)}Fl.has(n)||(l=$({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),Fl.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(bu(n))||t==="script"&&e.querySelector(hu(n))||(t=e.createElement("link"),bl(t,"link",l),sl(t),e.head.appendChild(t)))}}function L1(l,t){xt.m(l,t);var a=ye;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+Jl(e)+'"][href="'+Jl(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=ge(l)}if(!Fl.has(n)&&(l=$({rel:"modulepreload",href:l},t),Fl.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(hu(n)))return}e=a.createElement("link"),bl(e,"link",l),sl(e),a.head.appendChild(e)}}}function K1(l,t,a){xt.S(l,t,a);var e=ye;if(e&&l){var u=Ja(e).hoistableStyles,n=fe(l);t=t||"default";var i=u.get(n);if(!i){var c={loading:0,preload:null};if(i=e.querySelector(bu(n)))c.loading=5;else{l=$({rel:"stylesheet",href:l,"data-precedence":t},a),(a=Fl.get(n))&&qf(l,a);var f=i=e.createElement("link");sl(f),bl(f,"link",l),f._p=new Promise(function(s,y){f.onload=s,f.onerror=y}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,en(i,t,e)}i={type:"stylesheet",instance:i,count:1,state:c},u.set(n,i)}}}function J1(l,t){xt.X(l,t);var a=ye;if(a&&l){var e=Ja(a).hoistableScripts,u=ge(l),n=e.get(u);n||(n=a.querySelector(hu(u)),n||(l=$({src:l,async:!0},t),(t=Fl.get(u))&&Yf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function k1(l,t){xt.M(l,t);var a=ye;if(a&&l){var e=Ja(a).hoistableScripts,u=ge(l),n=e.get(u);n||(n=a.querySelector(hu(u)),n||(l=$({src:l,async:!0,type:"module"},t),(t=Fl.get(u))&&Yf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function Kd(l,t,a,e){var u=(u=Vt.current)?Cn(u):null;if(!u)throw Error(h(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=fe(a.href),a=Ja(u).hoistableStyles,e=a.get(t),e||(e={type:"style",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=fe(a.href);var n=Ja(u).hoistableStyles,i=n.get(l);if(i||(u=u.ownerDocument||u,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=u.querySelector(bu(l)))&&!n._p&&(i.instance=n,i.state.loading=5),Fl.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Fl.set(l,a),n||w1(u,l,a,i.state))),t&&e===null)throw Error(h(528,""));return i}if(t&&e!==null)throw Error(h(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ge(a),a=Ja(u).hoistableScripts,e=a.get(t),e||(e={type:"script",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};default:throw Error(h(444,l))}}function fe(l){return'href="'+Jl(l)+'"'}function bu(l){return'link[rel="stylesheet"]['+l+"]"}function Cr(l){return $({},l,{"data-precedence":l.precedence,precedence:null})}function w1(l,t,a,e){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?e.loading=1:(t=l.createElement("link"),e.preload=t,t.addEventListener("load",function(){return e.loading|=1}),t.addEventListener("error",function(){return e.loading|=2}),bl(t,"link",a),sl(t),l.head.appendChild(t))}function ge(l){return'[src="'+Jl(l)+'"]'}function hu(l){return"script[async]"+l}function Jd(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var e=l.querySelector('style[data-href~="'+Jl(a.href)+'"]');if(e)return t.instance=e,sl(e),e;var u=$({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),sl(e),bl(e,"style",u),en(e,a.precedence,l),t.instance=e;case"stylesheet":u=fe(a.href);var n=l.querySelector(bu(u));if(n)return t.state.loading|=4,t.instance=n,sl(n),n;e=Cr(a),(u=Fl.get(u))&&qf(e,u),n=(l.ownerDocument||l).createElement("link"),sl(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",e),t.state.loading|=4,en(n,a.precedence,l),t.instance=n;case"script":return n=ge(a.src),(u=l.querySelector(hu(n)))?(t.instance=u,sl(u),u):(e=a,(u=Fl.get(n))&&(e=$({},a),Yf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),sl(u),bl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(h(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,en(e,a.precedence,l));return t.instance}function en(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,i=0;i title"):null)}function W1(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Hr(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function $1(l,t,a,e){if(a.type==="stylesheet"&&(typeof e.media!="string"||matchMedia(e.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var u=fe(e.href),n=t.querySelector(bu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Hn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,sl(n);return}n=t.ownerDocument||t,e=Cr(e),(u=Fl.get(u))&&qf(e,u),n=n.createElement("link"),sl(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Hn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var Wi=0;function F1(l,t){return l.stylesheets&&l.count===0&&nn(l,l.stylesheets),0Wi?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function Hn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)nn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Bn=null;function nn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Bn=new Map,t.forEach(I1,l),Bn=null,Hn.call(l))}function I1(l,t){if(!(t.state.loading&4)){var a=Bn.get(l);if(a)var e=a.get(null);else{a=new Map,Bn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n{"use strict";function Zr(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Zr)}catch(l){console.error(l)}}Zr(),Vr.exports=jr()});var wr=tt(li=>{"use strict";var iy=Symbol.for("react.transitional.element"),cy=Symbol.for("react.fragment");function kr(l,t,a){var e=null;if(a!==void 0&&(e=""+a),t.key!==void 0&&(e=""+t.key),"key"in t){a={};for(var u in t)u!=="key"&&(a[u]=t[u])}else a=t;return t=a.ref,{$$typeof:iy,type:l,key:e,ref:t!==void 0?t:null,props:a}}li.Fragment=cy;li.jsx=kr;li.jsxs=kr});var Zf=tt((My,Wr)=>{"use strict";Wr.exports=wr()});var Y=zu(Eu()),lm=zu(Lr());var Kr;function Jr(){return Kr??(Kr=acquireVsCodeApi()),Kr}var p=zu(Zf()),ot=Jr(),$r="done",be=[7,14,30,0],ti={critical:{label:"Critical",color:"#e11d48"},high:{label:"High",color:"#ea580c"},normal:{label:"Normal",color:"#ca8a04"},low:{label:"Low",color:"#16a34a"}},Fr=["#6366f1","#f59e0b","#8b5cf6","#10b981","#ef4444","#3b82f6"];function Ir(l){let t=l.split(",").map(a=>a.trim()).filter(Boolean);return Array.from(new Set(t.map(a=>a.toLowerCase())))}function fy(l){return l.split(" ").slice(0,2).map(t=>t[0]?.toUpperCase()??"").join("")}function oy(l,t){return l.taskIds.map(a=>t.tasks[a]).filter(a=>a!==void 0)}function dy(l){let t=l.completedAt??l.movedAt;if(!t)return null;let a=new Date(t);return isNaN(a.getTime())?null:a}function Vf(l){if(!l)return null;let t=new Date(l);if(isNaN(t.getTime()))return null;let a=Math.floor((Date.now()-t.getTime())/864e5);return a===0?"today":a===1?"yesterday":a<7?`${a}d ago`:a<30?`${Math.floor(a/7)}w ago`:a<365?`${Math.floor(a/30)}mo ago`:`${Math.floor(a/365)}y ago`}function sy({priority:l,size:t="sm"}){let a=ti[l]??ti.normal;return(0,p.jsx)("span",{className:`priority-chip priority-chip--${t}`,style:{borderColor:`${a.color}55`,color:a.color,background:`${a.color}1a`},children:a.label})}function ry({task:l,isSelected:t,onSelect:a,isDragging:e,onDragStart:u,onDragEnd:n}){let i=Vf(l.createdAt);return(0,p.jsxs)("div",{className:`task-card${e?" is-dragging":""}${t?" is-selected":""}`,draggable:!0,onDragStart:c=>{c.dataTransfer.setData("text/task-id",l.id),c.dataTransfer.effectAllowed="move",u(l.id)},onDragEnd:n,onClick:()=>a(l),children:[(0,p.jsxs)("div",{className:"card-top",children:[(0,p.jsx)(sy,{priority:l.priority??"normal",size:"xs"}),l.assignee?(0,p.jsx)("span",{className:"assignee-avatar",title:l.assignee,children:fy(l.assignee)||"?"}):null]}),(0,p.jsx)("span",{className:"task-title",children:l.title}),l.description?(0,p.jsx)("p",{className:"task-description",children:l.description}):null,l.tags&&l.tags.length>0||i?(0,p.jsxs)("div",{className:"card-footer",children:[l.tags&&l.tags.length>0?(0,p.jsxs)("div",{className:"tag-list",children:[l.tags.slice(0,2).map(c=>(0,p.jsx)("span",{className:"tag-pill",children:c},c)),l.tags.length>2?(0,p.jsxs)("span",{className:"tag-pill",children:["+",l.tags.length-2]}):null]}):null,i?(0,p.jsx)("span",{className:"card-date",children:i}):null]}):null]})}function my({task:l,columns:t,onSave:a,onDelete:e,onClose:u}){let[n,i]=(0,Y.useState)(l.title),[c,f]=(0,Y.useState)(l.columnId),[s,y]=(0,Y.useState)(l.description??""),[b,m]=(0,Y.useState)(l.assignee??""),[v,S]=(0,Y.useState)(l.priority??"normal"),[A,H]=(0,Y.useState)((l.tags??[]).join(", ")),[d,o]=(0,Y.useState)(!1),r=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{i(l.title),f(l.columnId),y(l.description??""),m(l.assignee??""),S(l.priority??"normal"),H((l.tags??[]).join(", ")),o(!1),setTimeout(()=>r.current?.focus(),50)},[l.id]);let g=()=>o(!0),E=()=>{n.trim()&&(a(l.id,{title:n.trim(),columnId:c,description:s,assignee:b,priority:v,tags:Ir(A)}),o(!1))},N=ti[v]??ti.normal,z=Vf(l.createdAt),D=Vf(l.movedAt);return(0,p.jsxs)("aside",{className:"task-panel",children:[(0,p.jsxs)("div",{className:"panel-header",children:[(0,p.jsx)("span",{className:"panel-heading",children:"Task Detail"}),(0,p.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[d?(0,p.jsx)("span",{className:"panel-dirty",children:"unsaved"}):null,(0,p.jsx)("button",{className:"icon-btn",title:"Close panel (Esc)",onClick:u,children:"\u2715"})]})]}),(0,p.jsxs)("div",{className:"panel-body",children:[(0,p.jsx)("div",{className:"panel-field",children:(0,p.jsx)("textarea",{ref:r,className:"panel-title-input",value:n,rows:2,placeholder:"Task title",onChange:T=>{i(T.target.value),g()},onKeyDown:T=>{T.key==="Enter"&&!T.shiftKey&&(T.preventDefault(),E())}})}),(0,p.jsxs)("div",{className:"panel-row",children:[(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Priority"}),(0,p.jsxs)("select",{value:v,style:{borderLeftColor:N.color,borderLeftWidth:"3px"},onChange:T=>{S(T.target.value),g()},children:[(0,p.jsx)("option",{value:"critical",children:"Critical"}),(0,p.jsx)("option",{value:"high",children:"High"}),(0,p.jsx)("option",{value:"normal",children:"Normal"}),(0,p.jsx)("option",{value:"low",children:"Low"})]})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Column"}),(0,p.jsx)("select",{value:c,onChange:T=>{f(T.target.value),g()},children:t.map(T=>(0,p.jsx)("option",{value:T.id,children:T.title},T.id))})]})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Assignee"}),(0,p.jsx)("input",{value:b,placeholder:"Name",onChange:T=>{m(T.target.value),g()}})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Tags"}),(0,p.jsx)("input",{value:A,placeholder:"tag1, tag2",onChange:T=>{H(T.target.value),g()}}),A.trim()?(0,p.jsx)("div",{className:"tag-preview",children:Ir(A).map(T=>(0,p.jsx)("span",{className:"tag-pill",children:T},T))}):null]}),(0,p.jsxs)("div",{className:"panel-field panel-field--grow",style:{display:"flex",flexDirection:"column"},children:[(0,p.jsx)("label",{children:"Description"}),(0,p.jsx)("textarea",{style:{flex:1,minHeight:"80px",resize:"none"},value:s,placeholder:"Add a description\u2026",onChange:T=>{y(T.target.value),g()}})]}),(0,p.jsxs)("div",{className:"panel-meta",children:[z?(0,p.jsxs)("span",{children:["Created ",z]}):null,D?(0,p.jsxs)("span",{children:["Moved ",D]}):null,(0,p.jsxs)("span",{className:"panel-meta-id",children:["#",l.id]})]})]}),(0,p.jsxs)("div",{className:"panel-footer",children:[(0,p.jsx)("button",{onClick:E,disabled:!d||!n.trim(),children:"Save"}),(0,p.jsx)("button",{className:"secondary",onClick:u,children:"Close"}),(0,p.jsx)("div",{className:"spacer"}),(0,p.jsx)("button",{className:"danger",onClick:()=>e(l.id),children:"Delete"})]})]})}function vy(){let[l,t]=(0,Y.useState)("loading"),[a,e]=(0,Y.useState)(""),[u,n]=(0,Y.useState)(""),[i,c]=(0,Y.useState)({columns:[],tasks:{}}),[f,s]=(0,Y.useState)(null),[y,b]=(0,Y.useState)(""),[m,v]=(0,Y.useState)(null),[S,A]=(0,Y.useState)(null),[H,d]=(0,Y.useState)(null),[o,r]=(0,Y.useState)(7),[g,E]=(0,Y.useState)(null),[N,z]=(0,Y.useState)(""),[D,T]=(0,Y.useState)(!1),[R,Nl]=(0,Y.useState)(""),pu=(0,Y.useRef)(null),Lf=(0,Y.useRef)(null),Kf=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{let O=Tl=>{let P=Tl.data;if(P.type==="loading"){t("loading");return}if(P.type==="error"){e(P.message),t("error");return}if(P.type==="github-sign-in-required"){n(`${P.owner}/${P.repo}`),t("github-sign-in-required");return}c(P.data),P.githubRepo&&n(P.githubRepo),t("ready")};return window.addEventListener("message",O),ot.postMessage({type:"ready"}),()=>window.removeEventListener("message",O)},[]),(0,Y.useEffect)(()=>{f&&setTimeout(()=>Kf.current?.focus(),40)},[f]),(0,Y.useEffect)(()=>{g&&setTimeout(()=>pu.current?.select(),40)},[g]),(0,Y.useEffect)(()=>{D&&setTimeout(()=>Lf.current?.focus(),40)},[D]),(0,Y.useEffect)(()=>{let O=Tl=>{Tl.key==="Escape"&&d(null)};return window.addEventListener("keydown",O),()=>window.removeEventListener("keydown",O)},[]);let tm=O=>{let Tl=i.columns.find(P=>P.taskIds.includes(O.id));d({...O,columnId:Tl?.id??""})},am=O=>{E(O.id),z(O.title)},Jf=()=>{if(!g||!N.trim()){E(null);return}ot.postMessage({type:"renameColumn",columnId:g,title:N.trim()}),E(null)},em=O=>{ot.postMessage({type:"deleteColumn",columnId:O})},kf=()=>{let O=R.trim();if(!O){T(!1);return}let Tl=O.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"column";ot.postMessage({type:"addColumn",id:Tl,title:O}),Nl(""),T(!1)},wf=()=>{!y.trim()||!f||(ot.postMessage({type:"createTask",columnId:f,title:y.trim(),priority:"normal",tags:[]}),b(""),s(null))},um=(O,Tl)=>{ot.postMessage({type:"updateTask",taskId:O,...Tl}),H?.id===O&&d(P=>P&&{...P,...Tl})},nm=O=>{ot.postMessage({type:"deleteTask",taskId:O}),d(null)},im=(O,Tl)=>{O.preventDefault();let P=O.dataTransfer.getData("text/task-id");P&&ot.postMessage({type:"moveTask",taskId:P,toColumnId:Tl}),v(null)};if(l==="loading")return(0,p.jsx)("p",{style:{padding:"12px",color:"var(--vscode-descriptionForeground)"},children:"Loading board\u2026"});if(l==="error")return(0,p.jsx)("p",{style:{padding:"12px",color:"#ef4444"},children:a});if(l==="github-sign-in-required")return(0,p.jsxs)("div",{style:{padding:"12px",display:"flex",flexDirection:"column",gap:"10px"},children:[(0,p.jsxs)("p",{style:{margin:0,color:"var(--vscode-descriptionForeground)",fontSize:"0.85rem"},children:["This project uses GitHub Issues",u?` (${u})`:"","."]}),(0,p.jsx)("button",{onClick:()=>ot.postMessage({type:"githubSignIn"}),children:"Sign in to GitHub"})]});let cm=Object.keys(i.tasks).length;return(0,p.jsxs)("div",{className:"kanban-shell",children:[(0,p.jsx)("style",{children:` +`+e.stack}}var uc=Object.prototype.hasOwnProperty,wc=ol.unstable_scheduleCallback,zi=ol.unstable_cancelCallback,Vm=ol.unstable_shouldYield,Lm=ol.unstable_requestPaint,Rl=ol.unstable_now,Km=ol.unstable_getCurrentPriorityLevel,ds=ol.unstable_ImmediatePriority,ss=ol.unstable_UserBlockingPriority,rn=ol.unstable_NormalPriority,Jm=ol.unstable_LowPriority,rs=ol.unstable_IdlePriority,km=ol.log,wm=ol.unstable_setDisableYieldValue,fu=null,ql=null;function Gt(l){if(typeof km=="function"&&wm(l),ql&&typeof ql.setStrictMode=="function")try{ql.setStrictMode(fu,l)}catch{}}var Yl=Math.clz32?Math.clz32:Fm,Wm=Math.log,$m=Math.LN2;function Fm(l){return l>>>=0,l===0?32:31-(Wm(l)/$m|0)|0}var Nu=256,Uu=262144,Cu=4194304;function ia(l){var t=l&42;if(t!==0)return t;switch(l&-l){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Gn(l,t,a){var e=l.pendingLanes;if(e===0)return 0;var u=0,n=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=e&134217727;return c!==0?(e=c&~n,e!==0?u=ia(e):(i&=c,i!==0?u=ia(i):a||(a=c&~l,a!==0&&(u=ia(a))))):(c=e&~n,c!==0?u=ia(c):i!==0?u=ia(i):a||(a=e&~l,a!==0&&(u=ia(a)))),u===0?0:t!==0&&t!==u&&(t&n)===0&&(n=u&-u,a=t&-t,n>=a||n===32&&(a&4194048)!==0)?t:u}function ou(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function Im(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ms(){var l=Cu;return Cu<<=1,(Cu&62914560)===0&&(Cu=4194304),l}function Ti(l){for(var t=[],a=0;31>a;a++)t.push(l);return t}function du(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function Pm(l,t,a,e,u,n){var i=l.pendingLanes;l.pendingLanes=a,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=a,l.entangledLanes&=a,l.errorRecoveryDisabledLanes&=a,l.shellSuspendCounter=0;var c=l.entanglements,f=l.expirationTimes,s=l.hiddenUpdates;for(a=i&~a;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var nv=/[\n"\\]/g;function Jl(l){return l.replace(nv,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function cc(l,t,a,e,u,n,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+Vl(t)):l.value!==""+Vl(t)&&(l.value=""+Vl(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?fc(l,i,Vl(t)):a!=null?fc(l,i,Vl(a)):e!=null&&l.removeAttribute("value"),u==null&&n!=null&&(l.defaultChecked=!!n),u!=null&&(l.checked=u&&typeof u!="function"&&typeof u!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+Vl(c):l.removeAttribute("name")}function Ts(l,t,a,e,u,n,i,c){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(l.type=n),t!=null||a!=null){if(!(n!=="submit"&&n!=="reset"||t!=null)){ic(l);return}a=a!=null?""+Vl(a):"",t=t!=null?""+Vl(t):a,c||t===l.value||(l.value=t),l.defaultValue=t}e=e??u,e=typeof e!="function"&&typeof e!="symbol"&&!!e,l.checked=c?l.checked:!!e,l.defaultChecked=!!e,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),ic(l)}function fc(l,t,a){t==="number"&&mn(l.ownerDocument)===l||l.defaultValue===""+a||(l.defaultValue=""+a)}function ka(l,t,a,e){if(l=l.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),dc=!1;if(At)try{xa={},Object.defineProperty(xa,"passive",{get:function(){dc=!0}}),window.addEventListener("test",xa,xa),window.removeEventListener("test",xa,xa)}catch{dc=!1}var xa,Xt=null,lf=null,Wu=null;function Os(){if(Wu)return Wu;var l,t=lf,a=t.length,e,u="value"in Xt?Xt.value:Xt.textContent,n=u.length;for(l=0;l=Be),Jo=" ",ko=!1;function xs(l,t){switch(l){case"keyup":return Hv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ns(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Ga=!1;function Rv(l,t){switch(l){case"compositionend":return Ns(t);case"keypress":return t.which!==32?null:(ko=!0,Jo);case"textInput":return l=t.data,l===Jo&&ko?null:l;default:return null}}function qv(l,t){if(Ga)return l==="compositionend"||!af&&xs(l,t)?(l=Os(),Wu=lf=Xt=null,Ga=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-l};l=e}l:{for(;a;){if(a.nextSibling){a=a.nextSibling;break l}a=a.parentNode}a=void 0}a=Fo(a)}}function Bs(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?Bs(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function Rs(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=mn(l.document);t instanceof l.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)l=t.contentWindow;else break;t=mn(l.document)}return t}function ef(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var Lv=At&&"documentMode"in document&&11>=document.documentMode,Xa=null,sc=null,qe=null,rc=!1;function Po(l,t,a){var e=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;rc||Xa==null||Xa!==mn(e)||(e=Xa,"selectionStart"in e&&ef(e)?e={start:e.selectionStart,end:e.selectionEnd}:(e=(e.ownerDocument&&e.ownerDocument.defaultView||window).getSelection(),e={anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}),qe&&$e(qe,e)||(qe=e,e=Un(sc,"onSelect"),0>=i,u-=i,et=1<<32-Yl(t)+u|a<D?(x=z,z=null):x=z.sibling;var E=m(d,z,r[D],g);if(E===null){z===null&&(z=x);break}l&&z&&E.alternate===null&&t(d,z),o=n(E,o,D),U===null?T=E:U.sibling=E,U=E,z=x}if(D===r.length)return a(d,z),q&>(d,D),T;if(z===null){for(;DD?(x=z,z=null):x=z.sibling;var Tl=m(d,z,E.value,g);if(Tl===null){z===null&&(z=x);break}l&&z&&Tl.alternate===null&&t(d,z),o=n(Tl,o,D),U===null?T=Tl:U.sibling=Tl,U=Tl,z=x}if(E.done)return a(d,z),q&>(d,D),T;if(z===null){for(;!E.done;D++,E=r.next())E=b(d,E.value,g),E!==null&&(o=n(E,o,D),U===null?T=E:U.sibling=E,U=E);return q&>(d,D),T}for(z=e(z);!E.done;D++,E=r.next())E=v(z,d,D,E.value,g),E!==null&&(l&&E.alternate!==null&&z.delete(E.key===null?D:E.key),o=n(E,o,D),U===null?T=E:U.sibling=E,U=E);return l&&z.forEach(function(pu){return t(d,pu)}),q&>(d,D),T}function R(d,o,r,g){if(typeof r=="object"&&r!==null&&r.type===Ba&&r.key===null&&(r=r.props.children),typeof r=="object"&&r!==null){switch(r.$$typeof){case xu:l:{for(var T=r.key;o!==null;){if(o.key===T){if(T=r.type,T===Ba){if(o.tag===7){a(d,o.sibling),g=u(o,r.props.children),g.return=d,d=g;break l}}else if(o.elementType===T||typeof T=="object"&&T!==null&&T.$$typeof===Ct&&ca(T)===o.type){a(d,o.sibling),g=u(o,r.props),Ae(g,r),g.return=d,d=g;break l}a(d,o);break}else t(d,o);o=o.sibling}r.type===Ba?(g=da(r.props.children,d.mode,g,r.key),g.return=d,d=g):(g=Fu(r.type,r.key,r.props,null,d.mode,g),Ae(g,r),g.return=d,d=g)}return i(d);case xe:l:{for(T=r.key;o!==null;){if(o.key===T)if(o.tag===4&&o.stateNode.containerInfo===r.containerInfo&&o.stateNode.implementation===r.implementation){a(d,o.sibling),g=u(o,r.children||[]),g.return=d,d=g;break l}else{a(d,o);break}else t(d,o);o=o.sibling}g=Ni(r,d.mode,g),g.return=d,d=g}return i(d);case Ct:return r=ca(r),R(d,o,r,g)}if(Ne(r))return S(d,o,r,g);if(Te(r)){if(T=Te(r),typeof T!="function")throw Error(h(150));return r=T.call(r),A(d,o,r,g)}if(typeof r.then=="function")return R(d,o,Gu(r),g);if(r.$$typeof===ht)return R(d,o,Yu(d,r),g);Xu(d,r)}return typeof r=="string"&&r!==""||typeof r=="number"||typeof r=="bigint"?(r=""+r,o!==null&&o.tag===6?(a(d,o.sibling),g=u(o,r),g.return=d,d=g):(a(d,o),g=xi(r,d.mode,g),g.return=d,d=g),i(d)):a(d,o)}return function(d,o,r,g){try{Pe=0;var T=R(d,o,r,g);return $a=null,T}catch(z){if(z===me||z===Ln)throw z;var U=Hl(29,z,null,d.mode);return U.lanes=g,U.return=d,U}finally{}}}var ga=$s(!0),Fs=$s(!1),Ht=!1;function mf(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function pc(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function Kt(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function Jt(l,t,a){var e=l.updateQueue;if(e===null)return null;if(e=e.shared,(G&2)!==0){var u=e.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),e.pending=t,t=yn(l),Zs(l,null,a),t}return Vn(l,e,t,a),yn(l)}function Ge(l,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,ys(l,a)}}function Ci(l,t){var a=l.updateQueue,e=l.alternate;if(e!==null&&(e=e.updateQueue,a===e)){var u=null,n=null;if(a=a.firstBaseUpdate,a!==null){do{var i={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};n===null?u=n=i:n=n.next=i,a=a.next}while(a!==null);n===null?u=n=t:n=n.next=t}else u=n=t;a={baseState:e.baseState,firstBaseUpdate:u,lastBaseUpdate:n,shared:e.shared,callbacks:e.callbacks},l.updateQueue=a;return}l=a.lastBaseUpdate,l===null?a.firstBaseUpdate=t:l.next=t,a.lastBaseUpdate=t}var Sc=!1;function Xe(){if(Sc){var l=Wa;if(l!==null)throw l}}function Qe(l,t,a,e){Sc=!1;var u=l.updateQueue;Ht=!1;var n=u.firstBaseUpdate,i=u.lastBaseUpdate,c=u.shared.pending;if(c!==null){u.shared.pending=null;var f=c,s=f.next;f.next=null,i===null?n=s:i.next=s,i=f;var y=l.alternate;y!==null&&(y=y.updateQueue,c=y.lastBaseUpdate,c!==i&&(c===null?y.firstBaseUpdate=s:c.next=s,y.lastBaseUpdate=f))}if(n!==null){var b=u.baseState;i=0,y=s=f=null,c=n;do{var m=c.lane&-536870913,v=m!==c.lane;if(v?(B&m)===m:(e&m)===m){m!==0&&m===ae&&(Sc=!0),y!==null&&(y=y.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var S=l,A=c;m=t;var R=a;switch(A.tag){case 1:if(S=A.payload,typeof S=="function"){b=S.call(R,b,m);break l}b=S;break l;case 3:S.flags=S.flags&-65537|128;case 0:if(S=A.payload,m=typeof S=="function"?S.call(R,b,m):S,m==null)break l;b=$({},b,m);break l;case 2:Ht=!0}}m=c.callback,m!==null&&(l.flags|=64,v&&(l.flags|=8192),v=u.callbacks,v===null?u.callbacks=[m]:v.push(m))}else v={lane:m,tag:c.tag,payload:c.payload,callback:c.callback,next:null},y===null?(s=y=v,f=b):y=y.next=v,i|=m;if(c=c.next,c===null){if(c=u.shared.pending,c===null)break;v=c,c=v.next,v.next=null,u.lastBaseUpdate=v,u.shared.pending=null}}while(!0);y===null&&(f=b),u.baseState=f,u.firstBaseUpdate=s,u.lastBaseUpdate=y,n===null&&(u.shared.lanes=0),ta|=i,l.lanes=i,l.memoizedState=b}}function Is(l,t){if(typeof l!="function")throw Error(h(191,l));l.call(t)}function Ps(l,t){var a=l.callbacks;if(a!==null)for(l.callbacks=null,l=0;ln?n:8;var i=M.T,c={};M.T=c,Mf(l,!1,t,a);try{var f=u(),s=M.S;if(s!==null&&s(c,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var y=Pv(f,e);je(l,t,y,Gl(l))}else je(l,t,e,Gl(l))}catch(b){je(l,t,{then:function(){},status:"rejected",reason:b},Gl())}finally{X.p=n,i!==null&&c.types!==null&&(i.types=c.types),M.T=i}}function n1(){}function Dc(l,t,a,e){if(l.tag!==5)throw Error(h(476));var u=A0(l).queue;E0(l,u,t,oa,a===null?n1:function(){return D0(l),a(e)})}function A0(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:oa,baseState:oa,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mt,lastRenderedState:oa},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mt,lastRenderedState:a},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function D0(l){var t=A0(l);t.next===null&&(t=l.alternate.memoizedState),je(l,t.next.queue,{},Gl())}function Df(){return gl(uu)}function M0(){return el().memoizedState}function O0(){return el().memoizedState}function i1(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var a=Gl();l=Kt(a);var e=Jt(t,l,a);e!==null&&(_l(e,t,a),Ge(e,t,a)),t={cache:df()},l.payload=t;return}t=t.return}}function c1(l,t,a){var e=Gl();a={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},wn(l)?x0(t,a):(a=nf(l,t,a,e),a!==null&&(_l(a,l,e),N0(a,t,e)))}function _0(l,t,a){var e=Gl();je(l,t,a,e)}function je(l,t,a,e){var u={lane:e,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(wn(l))x0(t,u);else{var n=l.alternate;if(l.lanes===0&&(n===null||n.lanes===0)&&(n=t.lastRenderedReducer,n!==null))try{var i=t.lastRenderedState,c=n(i,a);if(u.hasEagerState=!0,u.eagerState=c,Xl(c,i))return Vn(l,t,u,0),K===null&&Zn(),!1}catch{}finally{}if(a=nf(l,t,u,e),a!==null)return _l(a,l,e),N0(a,t,e),!0}return!1}function Mf(l,t,a,e){if(e={lane:2,revertLane:Rf(),gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},wn(l)){if(t)throw Error(h(479))}else t=nf(l,a,e,2),t!==null&&_l(t,l,2)}function wn(l){var t=l.alternate;return l===N||t!==null&&t===N}function x0(l,t){Fa=zn=!0;var a=l.pending;a===null?t.next=t:(t.next=a.next,a.next=t),l.pending=t}function N0(l,t,a){if((a&4194048)!==0){var e=t.lanes;e&=l.pendingLanes,a|=e,t.lanes=a,ys(l,a)}}var tu={readContext:gl,use:Jn,useCallback:ll,useContext:ll,useEffect:ll,useImperativeHandle:ll,useLayoutEffect:ll,useInsertionEffect:ll,useMemo:ll,useReducer:ll,useRef:ll,useState:ll,useDebugValue:ll,useDeferredValue:ll,useTransition:ll,useSyncExternalStore:ll,useId:ll,useHostTransitionStatus:ll,useFormState:ll,useActionState:ll,useOptimistic:ll,useMemoCache:ll,useCacheRefresh:ll};tu.useEffectEvent=ll;var U0={readContext:gl,use:Jn,useCallback:function(l,t){return zl().memoizedState=[l,t===void 0?null:t],l},useContext:gl,useEffect:vd,useImperativeHandle:function(l,t,a){a=a!=null?a.concat([l]):null,ln(4194308,4,h0.bind(null,t,l),a)},useLayoutEffect:function(l,t){return ln(4194308,4,l,t)},useInsertionEffect:function(l,t){ln(4,2,l,t)},useMemo:function(l,t){var a=zl();t=t===void 0?null:t;var e=l();if(ba){Gt(!0);try{l()}finally{Gt(!1)}}return a.memoizedState=[e,t],e},useReducer:function(l,t,a){var e=zl();if(a!==void 0){var u=a(t);if(ba){Gt(!0);try{a(t)}finally{Gt(!1)}}}else u=t;return e.memoizedState=e.baseState=u,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:u},e.queue=l,l=l.dispatch=c1.bind(null,N,l),[e.memoizedState,l]},useRef:function(l){var t=zl();return l={current:l},t.memoizedState=l},useState:function(l){l=Ec(l);var t=l.queue,a=_0.bind(null,N,t);return t.dispatch=a,[l.memoizedState,a]},useDebugValue:Ef,useDeferredValue:function(l,t){var a=zl();return Af(a,l,t)},useTransition:function(){var l=Ec(!1);return l=E0.bind(null,N,l.queue,!0,!1),zl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,a){var e=N,u=zl();if(q){if(a===void 0)throw Error(h(407));a=a()}else{if(a=t(),K===null)throw Error(h(349));(B&127)!==0||u0(e,t,a)}u.memoizedState=a;var n={value:a,getSnapshot:t};return u.queue=n,vd(i0.bind(null,e,n,l),[l]),e.flags|=2048,ue(9,{destroy:void 0},n0.bind(null,e,n,a,t),null),a},useId:function(){var l=zl(),t=K.identifierPrefix;if(q){var a=ut,e=et;a=(e&~(1<<32-Yl(e)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Tn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof e.is=="string"?i.createElement("select",{is:e.is}):i.createElement("select"),e.multiple?n.multiple=!0:e.size&&(n.size=e.size);break;default:n=typeof e.is=="string"?i.createElement(u,{is:e.is}):i.createElement(u)}}n[vl]=t,n[xl]=e;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=n;l:switch(bl(n,u,e),u){case"button":case"input":case"select":case"textarea":e=!!e.autoFocus;break l;case"img":e=!0;break l;default:e=!1}e&&rt(t)}}return w(t),Qi(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,a),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==e&&rt(t);else{if(typeof e!="string"&&t.stateNode===null)throw Error(h(166));if(l=Vt.current,Na(t)){if(l=t.stateNode,a=t.memoizedProps,e=null,u=yl,u!==null)switch(u.tag){case 27:case 5:e=u.memoizedProps}l[vl]=t,l=!!(l.nodeValue===a||e!==null&&e.suppressHydrationWarning===!0||_r(l.nodeValue,a)),l||Pt(t,!0)}else l=Cn(l).createTextNode(e),l[vl]=t,t.stateNode=l}return w(t),null;case 31:if(a=t.memoizedState,l===null||l.memoizedState!==null){if(e=Na(t),a!==null){if(l===null){if(!e)throw Error(h(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(h(557));l[vl]=t}else va(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),l=!1}else a=Ui(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=a),l=!0;if(!l)return t.flags&256?(Cl(t),t):(Cl(t),null);if((t.flags&128)!==0)throw Error(h(558))}return w(t),null;case 13:if(e=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(u=Na(t),e!==null&&e.dehydrated!==null){if(l===null){if(!u)throw Error(h(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(h(317));u[vl]=t}else va(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;w(t),u=!1}else u=Ui(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(Cl(t),t):(Cl(t),null)}return Cl(t),(t.flags&128)!==0?(t.lanes=a,t):(a=e!==null,l=l!==null&&l.memoizedState!==null,a&&(e=t.child,u=null,e.alternate!==null&&e.alternate.memoizedState!==null&&e.alternate.memoizedState.cachePool!==null&&(u=e.alternate.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==u&&(e.flags|=2048)),a!==l&&a&&(t.child.flags|=8192),Qu(t,t.updateQueue),w(t),null);case 4:return Pa(),l===null&&qf(t.stateNode.containerInfo),w(t),null;case 10:return Tt(t.type),w(t),null;case 19:if(rl(al),e=t.memoizedState,e===null)return w(t),null;if(u=(t.flags&128)!==0,n=e.rendering,n===null)if(u)De(e,!1);else{if(tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(n=Sn(l),n!==null){for(t.flags|=128,De(e,!1),l=n.updateQueue,t.updateQueue=l,Qu(t,l),t.subtreeFlags=0,l=a,a=t.child;a!==null;)Vs(a,l),a=a.sibling;return J(al,al.current&1|2),q&>(t,e.treeForkCount),t.child}l=l.sibling}e.tail!==null&&Rl()>Mn&&(t.flags|=128,u=!0,De(e,!1),t.lanes=4194304)}else{if(!u)if(l=Sn(n),l!==null){if(t.flags|=128,u=!0,l=l.updateQueue,t.updateQueue=l,Qu(t,l),De(e,!0),e.tail===null&&e.tailMode==="hidden"&&!n.alternate&&!q)return w(t),null}else 2*Rl()-e.renderingStartTime>Mn&&a!==536870912&&(t.flags|=128,u=!0,De(e,!1),t.lanes=4194304);e.isBackwards?(n.sibling=t.child,t.child=n):(l=e.last,l!==null?l.sibling=n:t.child=n,e.last=n)}return e.tail!==null?(l=e.tail,e.rendering=l,e.tail=l.sibling,e.renderingStartTime=Rl(),l.sibling=null,a=al.current,J(al,u?a&1|2:a&1),q&>(t,e.treeForkCount),l):(w(t),null);case 22:case 23:return Cl(t),vf(),e=t.memoizedState!==null,l!==null?l.memoizedState!==null!==e&&(t.flags|=8192):e&&(t.flags|=8192),e?(a&536870912)!==0&&(t.flags&128)===0&&(w(t),t.subtreeFlags&6&&(t.flags|=8192)):w(t),a=t.updateQueue,a!==null&&Qu(t,a.retryQueue),a=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==a&&(t.flags|=2048),l!==null&&rl(sa),null;case 24:return a=null,l!==null&&(a=l.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),Tt(il),w(t),null;case 25:return null;case 30:return null}throw Error(h(156,t.tag))}function r1(l,t){switch(of(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Tt(il),Pa(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return sn(t),null;case 31:if(t.memoizedState!==null){if(Cl(t),t.alternate===null)throw Error(h(340));va()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(Cl(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(h(340));va()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return rl(al),null;case 4:return Pa(),null;case 10:return Tt(t.type),null;case 22:case 23:return Cl(t),vf(),l!==null&&rl(sa),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Tt(il),null;case 25:return null;default:return null}}function V0(l,t){switch(of(t),t.tag){case 3:Tt(il),Pa();break;case 26:case 27:case 5:sn(t);break;case 4:Pa();break;case 31:t.memoizedState!==null&&Cl(t);break;case 13:Cl(t);break;case 19:rl(al);break;case 10:Tt(t.type);break;case 22:case 23:Cl(t),vf(),l!==null&&rl(sa);break;case 24:Tt(il)}}function yu(l,t){try{var a=t.updateQueue,e=a!==null?a.lastEffect:null;if(e!==null){var u=e.next;a=u;do{if((a.tag&l)===l){e=void 0;var n=a.create,i=a.inst;e=n(),i.destroy=e}a=a.next}while(a!==u)}}catch(c){j(t,t.return,c)}}function la(l,t,a){try{var e=t.updateQueue,u=e!==null?e.lastEffect:null;if(u!==null){var n=u.next;e=n;do{if((e.tag&l)===l){var i=e.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,u=t;var f=a,s=c;try{s()}catch(y){j(u,f,y)}}}e=e.next}while(e!==n)}}catch(y){j(t,t.return,y)}}function L0(l){var t=l.updateQueue;if(t!==null){var a=l.stateNode;try{Ps(t,a)}catch(e){j(l,l.return,e)}}}function K0(l,t,a){a.props=ha(l.type,l.memoizedProps),a.state=l.memoizedState;try{a.componentWillUnmount()}catch(e){j(l,t,e)}}function Ze(l,t){try{var a=l.ref;if(a!==null){switch(l.tag){case 26:case 27:case 5:var e=l.stateNode;break;case 30:e=l.stateNode;break;default:e=l.stateNode}typeof a=="function"?l.refCleanup=a(e):a.current=e}}catch(u){j(l,t,u)}}function nt(l,t){var a=l.ref,e=l.refCleanup;if(a!==null)if(typeof e=="function")try{e()}catch(u){j(l,t,u)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(u){j(l,t,u)}else a.current=null}function J0(l){var t=l.type,a=l.memoizedProps,e=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&e.focus();break l;case"img":a.src?e.src=a.src:a.srcSet&&(e.srcset=a.srcSet)}}catch(u){j(l,l.return,u)}}function ji(l,t,a){try{var e=l.stateNode;C1(e,l.type,a,t),e[xl]=t}catch(u){j(l,l.return,u)}}function k0(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ea(l.type)||l.tag===4}function Zi(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||k0(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ea(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Nc(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(l,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(l),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=pt));else if(e!==4&&(e===27&&ea(l.type)&&(a=l.stateNode,t=null),l=l.child,l!==null))for(Nc(l,t,a),l=l.sibling;l!==null;)Nc(l,t,a),l=l.sibling}function Dn(l,t,a){var e=l.tag;if(e===5||e===6)l=l.stateNode,t?a.insertBefore(l,t):a.appendChild(l);else if(e!==4&&(e===27&&ea(l.type)&&(a=l.stateNode),l=l.child,l!==null))for(Dn(l,t,a),l=l.sibling;l!==null;)Dn(l,t,a),l=l.sibling}function w0(l){var t=l.stateNode,a=l.memoizedProps;try{for(var e=l.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);bl(t,e,a),t[vl]=l,t[xl]=a}catch(n){j(l,l.return,n)}}var bt=!1,nl=!1,Vi=!1,Od=typeof WeakSet=="function"?WeakSet:Set,dl=null;function m1(l,t){if(l=l.containerInfo,Yc=qn,l=Rs(l),ef(l)){if("selectionStart"in l)var a={start:l.selectionStart,end:l.selectionEnd};else l:{a=(a=l.ownerDocument)&&a.defaultView||window;var e=a.getSelection&&a.getSelection();if(e&&e.rangeCount!==0){a=e.anchorNode;var u=e.anchorOffset,n=e.focusNode;e=e.focusOffset;try{a.nodeType,n.nodeType}catch{a=null;break l}var i=0,c=-1,f=-1,s=0,y=0,b=l,m=null;t:for(;;){for(var v;b!==a||u!==0&&b.nodeType!==3||(c=i+u),b!==n||e!==0&&b.nodeType!==3||(f=i+e),b.nodeType===3&&(i+=b.nodeValue.length),(v=b.firstChild)!==null;)m=b,b=v;for(;;){if(b===l)break t;if(m===a&&++s===u&&(c=i),m===n&&++y===e&&(f=i),(v=b.nextSibling)!==null)break;b=m,m=b.parentNode}b=v}a=c===-1||f===-1?null:{start:c,end:f}}else a=null}a=a||{start:0,end:0}}else a=null;for(Gc={focusedElem:l,selectionRange:a},qn=!1,dl=t;dl!==null;)if(t=dl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,dl=l;else for(;dl!==null;){switch(t=dl,n=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(a=0;a title"))),bl(n,e,a),n[vl]=l,sl(n),e=n;break l;case"link":var i=Wd("link","href",u).get(e+(a.href||""));if(i){for(var c=0;cR&&(i=R,R=A,A=i);var d=Io(c,A),o=Io(c,R);if(d&&o&&(v.rangeCount!==1||v.anchorNode!==d.node||v.anchorOffset!==d.offset||v.focusNode!==o.node||v.focusOffset!==o.offset)){var r=b.createRange();r.setStart(d.node,d.offset),v.removeAllRanges(),A>R?(v.addRange(r),v.extend(o.node,o.offset)):(r.setEnd(o.node,o.offset),v.addRange(r))}}}}for(b=[],v=c;v=v.parentNode;)v.nodeType===1&&b.push({element:v,left:v.scrollLeft,top:v.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ca?32:a,M.T=null,a=Hc,Hc=null;var n=wt,i=Et;if(fl=0,ie=wt=null,Et=0,(G&6)!==0)throw Error(h(331));var c=G;if(G|=4,nr(n.current),ar(n,n.current,i,a),G=c,gu(0,!1),ql&&typeof ql.onPostCommitFiberRoot=="function")try{ql.onPostCommitFiberRoot(fu,n)}catch{}return!0}finally{X.p=u,M.T=e,Sr(l,t)}}function Ud(l,t,a){t=kl(a,t),t=Oc(l.stateNode,t,2),l=Jt(l,t,2),l!==null&&(du(l,2),ft(l))}function j(l,t,a){if(l.tag===3)Ud(l,l,a);else for(;t!==null;){if(t.tag===3){Ud(t,l,a);break}else if(t.tag===1){var e=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof e.componentDidCatch=="function"&&(kt===null||!kt.has(e))){l=kl(a,l),a=q0(2),e=Jt(t,a,2),e!==null&&(Y0(a,e,t,l),du(e,2),ft(e));break}}t=t.return}}function Ki(l,t,a){var e=l.pingCache;if(e===null){e=l.pingCache=new g1;var u=new Set;e.set(t,u)}else u=e.get(t),u===void 0&&(u=new Set,e.set(t,u));u.has(a)||(Cf=!0,u.add(a),l=z1.bind(null,l,t,a),t.then(l,l))}function z1(l,t,a){var e=l.pingCache;e!==null&&e.delete(t),l.pingedLanes|=l.suspendedLanes&a,l.warmLanes&=~a,K===l&&(B&a)===a&&(tl===4||tl===3&&(B&62914560)===B&&300>Rl()-Wn?(G&2)===0&&ce(l,0):Hf|=a,ne===B&&(ne=0)),ft(l)}function Tr(l,t){t===0&&(t=ms()),l=Ta(l,t),l!==null&&(du(l,t),ft(l))}function T1(l){var t=l.memoizedState,a=0;t!==null&&(a=t.retryLane),Tr(l,a)}function E1(l,t){var a=0;switch(l.tag){case 31:case 13:var e=l.stateNode,u=l.memoizedState;u!==null&&(a=u.retryLane);break;case 19:e=l.stateNode;break;case 22:e=l.stateNode._retryCache;break;default:throw Error(h(314))}e!==null&&e.delete(t),Tr(l,a)}function A1(l,t){return wc(l,t)}var xn=null,Ha=null,Rc=!1,Nn=!1,Ji=!1,Zt=0;function ft(l){l!==Ha&&l.next===null&&(Ha===null?xn=Ha=l:Ha=Ha.next=l),Nn=!0,Rc||(Rc=!0,M1())}function gu(l,t){if(!Ji&&Nn){Ji=!0;do for(var a=!1,e=xn;e!==null;){if(!t)if(l!==0){var u=e.pendingLanes;if(u===0)var n=0;else{var i=e.suspendedLanes,c=e.pingedLanes;n=(1<<31-Yl(42|l)+1)-1,n&=u&~(i&~c),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(a=!0,Cd(e,n))}else n=B,n=Gn(e,e===K?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),(n&3)===0||ou(e,n)||(a=!0,Cd(e,n));e=e.next}while(a);Ji=!1}}function D1(){Er()}function Er(){Nn=Rc=!1;var l=0;Zt!==0&&B1()&&(l=Zt);for(var t=Rl(),a=null,e=xn;e!==null;){var u=e.next,n=Ar(e,t);n===0?(e.next=null,a===null?xn=u:a.next=u,u===null&&(Ha=a)):(a=e,(l!==0||(n&3)!==0)&&(Nn=!0)),e=u}fl!==0&&fl!==5||gu(l,!1),Zt!==0&&(Zt=0)}function Ar(l,t){for(var a=l.suspendedLanes,e=l.pingedLanes,u=l.expirationTimes,n=l.pendingLanes&-62914561;0c)break;var y=f.transferSize,b=f.initiatorType;y&&Xd(b)&&(f=f.responseEnd,i+=y*(f"u"?null:document;function Hr(l,t,a){var e=ye;if(e&&typeof t=="string"&&t){var u=Jl(t);u='link[rel="'+l+'"][href="'+u+'"]',typeof a=="string"&&(u+='[crossorigin="'+a+'"]'),Jd.has(u)||(Jd.add(u),l={rel:l,crossOrigin:a,href:t},e.querySelector(u)===null&&(t=e.createElement("link"),bl(t,"link",l),sl(t),e.head.appendChild(t)))}}function V1(l){xt.D(l),Hr("dns-prefetch",l,null)}function L1(l,t){xt.C(l,t),Hr("preconnect",l,t)}function K1(l,t,a){xt.L(l,t,a);var e=ye;if(e&&l&&t){var u='link[rel="preload"][as="'+Jl(t)+'"]';t==="image"&&a&&a.imageSrcSet?(u+='[imagesrcset="'+Jl(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(u+='[imagesizes="'+Jl(a.imageSizes)+'"]')):u+='[href="'+Jl(l)+'"]';var n=u;switch(t){case"style":n=fe(l);break;case"script":n=ge(l)}Fl.has(n)||(l=$({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:l,as:t},a),Fl.set(n,l),e.querySelector(u)!==null||t==="style"&&e.querySelector(bu(n))||t==="script"&&e.querySelector(hu(n))||(t=e.createElement("link"),bl(t,"link",l),sl(t),e.head.appendChild(t)))}}function J1(l,t){xt.m(l,t);var a=ye;if(a&&l){var e=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+Jl(e)+'"][href="'+Jl(l)+'"]',n=u;switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=ge(l)}if(!Fl.has(n)&&(l=$({rel:"modulepreload",href:l},t),Fl.set(n,l),a.querySelector(u)===null)){switch(e){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(hu(n)))return}e=a.createElement("link"),bl(e,"link",l),sl(e),a.head.appendChild(e)}}}function k1(l,t,a){xt.S(l,t,a);var e=ye;if(e&&l){var u=Ja(e).hoistableStyles,n=fe(l);t=t||"default";var i=u.get(n);if(!i){var c={loading:0,preload:null};if(i=e.querySelector(bu(n)))c.loading=5;else{l=$({rel:"stylesheet",href:l,"data-precedence":t},a),(a=Fl.get(n))&&Yf(l,a);var f=i=e.createElement("link");sl(f),bl(f,"link",l),f._p=new Promise(function(s,y){f.onload=s,f.onerror=y}),f.addEventListener("load",function(){c.loading|=1}),f.addEventListener("error",function(){c.loading|=2}),c.loading|=4,un(i,t,e)}i={type:"stylesheet",instance:i,count:1,state:c},u.set(n,i)}}}function w1(l,t){xt.X(l,t);var a=ye;if(a&&l){var e=Ja(a).hoistableScripts,u=ge(l),n=e.get(u);n||(n=a.querySelector(hu(u)),n||(l=$({src:l,async:!0},t),(t=Fl.get(u))&&Gf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function W1(l,t){xt.M(l,t);var a=ye;if(a&&l){var e=Ja(a).hoistableScripts,u=ge(l),n=e.get(u);n||(n=a.querySelector(hu(u)),n||(l=$({src:l,async:!0,type:"module"},t),(t=Fl.get(u))&&Gf(l,t),n=a.createElement("script"),sl(n),bl(n,"link",l),a.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},e.set(u,n))}}function kd(l,t,a,e){var u=(u=Vt.current)?Hn(u):null;if(!u)throw Error(h(446));switch(l){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=fe(a.href),a=Ja(u).hoistableStyles,e=a.get(t),e||(e={type:"style",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){l=fe(a.href);var n=Ja(u).hoistableStyles,i=n.get(l);if(i||(u=u.ownerDocument||u,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(l,i),(n=u.querySelector(bu(l)))&&!n._p&&(i.instance=n,i.state.loading=5),Fl.has(l)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Fl.set(l,a),n||$1(u,l,a,i.state))),t&&e===null)throw Error(h(528,""));return i}if(t&&e!==null)throw Error(h(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ge(a),a=Ja(u).hoistableScripts,e=a.get(t),e||(e={type:"script",instance:null,count:0,state:null},a.set(t,e)),e):{type:"void",instance:null,count:0,state:null};default:throw Error(h(444,l))}}function fe(l){return'href="'+Jl(l)+'"'}function bu(l){return'link[rel="stylesheet"]['+l+"]"}function Br(l){return $({},l,{"data-precedence":l.precedence,precedence:null})}function $1(l,t,a,e){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?e.loading=1:(t=l.createElement("link"),e.preload=t,t.addEventListener("load",function(){return e.loading|=1}),t.addEventListener("error",function(){return e.loading|=2}),bl(t,"link",a),sl(t),l.head.appendChild(t))}function ge(l){return'[src="'+Jl(l)+'"]'}function hu(l){return"script[async]"+l}function wd(l,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var e=l.querySelector('style[data-href~="'+Jl(a.href)+'"]');if(e)return t.instance=e,sl(e),e;var u=$({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return e=(l.ownerDocument||l).createElement("style"),sl(e),bl(e,"style",u),un(e,a.precedence,l),t.instance=e;case"stylesheet":u=fe(a.href);var n=l.querySelector(bu(u));if(n)return t.state.loading|=4,t.instance=n,sl(n),n;e=Br(a),(u=Fl.get(u))&&Yf(e,u),n=(l.ownerDocument||l).createElement("link"),sl(n);var i=n;return i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",e),t.state.loading|=4,un(n,a.precedence,l),t.instance=n;case"script":return n=ge(a.src),(u=l.querySelector(hu(n)))?(t.instance=u,sl(u),u):(e=a,(u=Fl.get(n))&&(e=$({},a),Gf(e,u)),l=l.ownerDocument||l,u=l.createElement("script"),sl(u),bl(u,"link",e),l.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(h(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(e=t.instance,t.state.loading|=4,un(e,a.precedence,l));return t.instance}function un(l,t,a){for(var e=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=e.length?e[e.length-1]:null,n=u,i=0;i title"):null)}function F1(l,t,a){if(a===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Rr(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function I1(l,t,a,e){if(a.type==="stylesheet"&&(typeof e.media!="string"||matchMedia(e.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var u=fe(e.href),n=t.querySelector(bu(u));if(n){t=n._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Bn.bind(l),t.then(l,l)),a.state.loading|=4,a.instance=n,sl(n);return}n=t.ownerDocument||t,e=Br(e),(u=Fl.get(u))&&Yf(e,u),n=n.createElement("link"),sl(n);var i=n;i._p=new Promise(function(c,f){i.onload=c,i.onerror=f}),bl(n,"link",e),a.instance=n}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(l.count++,a=Bn.bind(l),t.addEventListener("load",a),t.addEventListener("error",a))}}var $i=0;function P1(l,t){return l.stylesheets&&l.count===0&&cn(l,l.stylesheets),0$i?50:800)+t);return l.unsuspend=a,function(){l.unsuspend=null,clearTimeout(e),clearTimeout(u)}}:null}function Bn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)cn(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Rn=null;function cn(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Rn=new Map,t.forEach(ly,l),Rn=null,Bn.call(l))}function ly(l,t){if(!(t.state.loading&4)){var a=Rn.get(l);if(a)var e=a.get(null);else{a=new Map,Rn.set(l,a);for(var u=l.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n{"use strict";function Lr(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Lr)}catch(l){console.error(l)}}Lr(),Kr.exports=Vr()});var $r=tt(ti=>{"use strict";var fy=Symbol.for("react.transitional.element"),oy=Symbol.for("react.fragment");function Wr(l,t,a){var e=null;if(a!==void 0&&(e=""+a),t.key!==void 0&&(e=""+t.key),"key"in t){a={};for(var u in t)u!=="key"&&(a[u]=t[u])}else a=t;return t=a.ref,{$$typeof:fy,type:l,key:e,ref:t!==void 0?t:null,props:a}}ti.Fragment=oy;ti.jsx=Wr;ti.jsxs=Wr});var Vf=tt((_y,Fr)=>{"use strict";Fr.exports=$r()});var Y=Tu(Au()),am=Tu(Jr());var kr;function wr(){return kr??(kr=acquireVsCodeApi()),kr}var p=Tu(Vf()),ot=wr(),Ir="done",be=[7,14,30,0],ai={critical:{label:"Critical",color:"#e11d48"},high:{label:"High",color:"#ea580c"},normal:{label:"Normal",color:"#ca8a04"},low:{label:"Low",color:"#16a34a"}},Pr=["#6366f1","#f59e0b","#8b5cf6","#10b981","#ef4444","#3b82f6"];function lm(l){let t=l.split(",").map(a=>a.trim()).filter(Boolean);return Array.from(new Set(t.map(a=>a.toLowerCase())))}function dy(l){return l.split(" ").slice(0,2).map(t=>t[0]?.toUpperCase()??"").join("")}function sy(l,t){return l.taskIds.map(a=>t.tasks[a]).filter(a=>a!==void 0)}function ry(l){let t=l.completedAt??l.movedAt;if(!t)return null;let a=new Date(t);return isNaN(a.getTime())?null:a}function Lf(l){if(!l)return null;let t=new Date(l);if(isNaN(t.getTime()))return null;let a=Math.floor((Date.now()-t.getTime())/864e5);return a===0?"today":a===1?"yesterday":a<7?`${a}d ago`:a<30?`${Math.floor(a/7)}w ago`:a<365?`${Math.floor(a/30)}mo ago`:`${Math.floor(a/365)}y ago`}function my({priority:l,size:t="sm"}){let a=ai[l]??ai.normal;return(0,p.jsx)("span",{className:`priority-chip priority-chip--${t}`,style:{borderColor:`${a.color}55`,color:a.color,background:`${a.color}1a`},children:a.label})}function vy({task:l,isSelected:t,onSelect:a,isDragging:e,onDragStart:u,onDragEnd:n}){let i=Lf(l.createdAt);return(0,p.jsxs)("div",{className:`task-card${e?" is-dragging":""}${t?" is-selected":""}`,draggable:!0,onDragStart:c=>{c.dataTransfer.setData("text/task-id",l.id),c.dataTransfer.effectAllowed="move",u(l.id)},onDragEnd:n,onClick:()=>a(l),children:[(0,p.jsxs)("div",{className:"card-top",children:[(0,p.jsx)(my,{priority:l.priority??"normal",size:"xs"}),l.assignee?(0,p.jsx)("span",{className:"assignee-avatar",title:l.assignee,children:dy(l.assignee)||"?"}):null]}),(0,p.jsx)("span",{className:"task-title",children:l.title}),l.description?(0,p.jsx)("p",{className:"task-description",children:l.description}):null,l.tags&&l.tags.length>0||i?(0,p.jsxs)("div",{className:"card-footer",children:[l.tags&&l.tags.length>0?(0,p.jsxs)("div",{className:"tag-list",children:[l.tags.slice(0,2).map(c=>(0,p.jsx)("span",{className:"tag-pill",children:c},c)),l.tags.length>2?(0,p.jsxs)("span",{className:"tag-pill",children:["+",l.tags.length-2]}):null]}):null,i?(0,p.jsx)("span",{className:"card-date",children:i}):null]}):null]})}function yy({task:l,columns:t,agents:a,onSave:e,onDelete:u,onClose:n}){let[i,c]=(0,Y.useState)(l.title),[f,s]=(0,Y.useState)(l.columnId),[y,b]=(0,Y.useState)(l.description??""),[m,v]=(0,Y.useState)(l.assignee??""),[S,A]=(0,Y.useState)(l.priority??"normal"),[R,d]=(0,Y.useState)((l.tags??[]).join(", ")),[o,r]=(0,Y.useState)(!1),g=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{c(l.title),s(l.columnId),b(l.description??""),v(l.assignee??""),A(l.priority??"normal"),d((l.tags??[]).join(", ")),r(!1),setTimeout(()=>g.current?.focus(),50)},[l.id]);let T=()=>r(!0),U=()=>{i.trim()&&(e(l.id,{title:i.trim(),columnId:f,description:y,assignee:m,priority:S,tags:lm(R)}),r(!1))},z=ai[S]??ai.normal,D=Lf(l.createdAt),x=Lf(l.movedAt);return(0,p.jsxs)("aside",{className:"task-panel",children:[(0,p.jsxs)("div",{className:"panel-header",children:[(0,p.jsx)("span",{className:"panel-heading",children:"Task Detail"}),(0,p.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[o?(0,p.jsx)("span",{className:"panel-dirty",children:"unsaved"}):null,(0,p.jsx)("button",{className:"icon-btn",title:"Close panel (Esc)",onClick:n,children:"\u2715"})]})]}),(0,p.jsxs)("div",{className:"panel-body",children:[(0,p.jsx)("div",{className:"panel-field",children:(0,p.jsx)("textarea",{ref:g,className:"panel-title-input",value:i,rows:2,placeholder:"Task title",onChange:E=>{c(E.target.value),T()},onKeyDown:E=>{E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),U())}})}),(0,p.jsxs)("div",{className:"panel-row",children:[(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Priority"}),(0,p.jsxs)("select",{value:S,style:{borderLeftColor:z.color,borderLeftWidth:"3px"},onChange:E=>{A(E.target.value),T()},children:[(0,p.jsx)("option",{value:"critical",children:"Critical"}),(0,p.jsx)("option",{value:"high",children:"High"}),(0,p.jsx)("option",{value:"normal",children:"Normal"}),(0,p.jsx)("option",{value:"low",children:"Low"})]})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Column"}),(0,p.jsx)("select",{value:f,onChange:E=>{s(E.target.value),T()},children:t.map(E=>(0,p.jsx)("option",{value:E.id,children:E.title},E.id))})]})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Assignee"}),(0,p.jsxs)("select",{value:m,onChange:E=>{v(E.target.value),T()},children:[(0,p.jsx)("option",{value:"",children:"Unassigned"}),a.map(E=>(0,p.jsx)("option",{value:E.slug,children:E.slug},E.slug))]})]}),(0,p.jsxs)("div",{className:"panel-field",children:[(0,p.jsx)("label",{children:"Tags"}),(0,p.jsx)("input",{value:R,placeholder:"tag1, tag2",onChange:E=>{d(E.target.value),T()}}),R.trim()?(0,p.jsx)("div",{className:"tag-preview",children:lm(R).map(E=>(0,p.jsx)("span",{className:"tag-pill",children:E},E))}):null]}),(0,p.jsxs)("div",{className:"panel-field panel-field--grow",style:{display:"flex",flexDirection:"column"},children:[(0,p.jsx)("label",{children:"Description"}),(0,p.jsx)("textarea",{style:{flex:1,minHeight:"80px",resize:"none"},value:y,placeholder:"Add a description\u2026",onChange:E=>{b(E.target.value),T()}})]}),(0,p.jsxs)("div",{className:"panel-meta",children:[D?(0,p.jsxs)("span",{children:["Created ",D]}):null,x?(0,p.jsxs)("span",{children:["Moved ",x]}):null,(0,p.jsxs)("span",{className:"panel-meta-id",children:["#",l.id]})]})]}),(0,p.jsxs)("div",{className:"panel-footer",children:[(0,p.jsx)("button",{onClick:U,disabled:!o||!i.trim(),children:"Save"}),(0,p.jsx)("button",{className:"secondary",onClick:n,children:"Close"}),(0,p.jsx)("div",{className:"spacer"}),(0,p.jsx)("button",{className:"danger",onClick:()=>u(l.id),children:"Delete"})]})]})}function gy(){let[l,t]=(0,Y.useState)("loading"),[a,e]=(0,Y.useState)(""),[u,n]=(0,Y.useState)(""),[i,c]=(0,Y.useState)({columns:[],tasks:{}}),[f,s]=(0,Y.useState)([]),[y,b]=(0,Y.useState)(null),[m,v]=(0,Y.useState)(""),[S,A]=(0,Y.useState)(null),[R,d]=(0,Y.useState)(null),[o,r]=(0,Y.useState)(null),[g,T]=(0,Y.useState)(7),[U,z]=(0,Y.useState)(null),[D,x]=(0,Y.useState)(""),[E,Tl]=(0,Y.useState)(!1),[pu,Su]=(0,Y.useState)(""),Kf=(0,Y.useRef)(null),Jf=(0,Y.useRef)(null),kf=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{let O=El=>{let P=El.data;if(P.type==="loading"){t("loading");return}if(P.type==="error"){e(P.message),t("error");return}if(P.type==="github-sign-in-required"){n(`${P.owner}/${P.repo}`),t("github-sign-in-required");return}c(P.data),s(P.agents),P.githubRepo&&n(P.githubRepo),t("ready")};return window.addEventListener("message",O),ot.postMessage({type:"ready"}),()=>window.removeEventListener("message",O)},[]),(0,Y.useEffect)(()=>{y&&setTimeout(()=>kf.current?.focus(),40)},[y]),(0,Y.useEffect)(()=>{U&&setTimeout(()=>Kf.current?.select(),40)},[U]),(0,Y.useEffect)(()=>{E&&setTimeout(()=>Jf.current?.focus(),40)},[E]),(0,Y.useEffect)(()=>{let O=El=>{El.key==="Escape"&&r(null)};return window.addEventListener("keydown",O),()=>window.removeEventListener("keydown",O)},[]);let em=O=>{let El=i.columns.find(P=>P.taskIds.includes(O.id));r({...O,columnId:El?.id??""})},um=O=>{z(O.id),x(O.title)},wf=()=>{if(!U||!D.trim()){z(null);return}ot.postMessage({type:"renameColumn",columnId:U,title:D.trim()}),z(null)},nm=O=>{ot.postMessage({type:"deleteColumn",columnId:O})},Wf=()=>{let O=pu.trim();if(!O){Tl(!1);return}let El=O.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"column";ot.postMessage({type:"addColumn",id:El,title:O}),Su(""),Tl(!1)},$f=()=>{!m.trim()||!y||(ot.postMessage({type:"createTask",columnId:y,title:m.trim(),priority:"normal",tags:[]}),v(""),b(null))},im=(O,El)=>{ot.postMessage({type:"updateTask",taskId:O,...El}),o?.id===O&&r(P=>P&&{...P,...El})},cm=O=>{ot.postMessage({type:"deleteTask",taskId:O}),r(null)},fm=(O,El)=>{O.preventDefault();let P=O.dataTransfer.getData("text/task-id");P&&ot.postMessage({type:"moveTask",taskId:P,toColumnId:El}),A(null)};if(l==="loading")return(0,p.jsx)("p",{style:{padding:"12px",color:"var(--vscode-descriptionForeground)"},children:"Loading board\u2026"});if(l==="error")return(0,p.jsx)("p",{style:{padding:"12px",color:"#ef4444"},children:a});if(l==="github-sign-in-required")return(0,p.jsxs)("div",{style:{padding:"12px",display:"flex",flexDirection:"column",gap:"10px"},children:[(0,p.jsxs)("p",{style:{margin:0,color:"var(--vscode-descriptionForeground)",fontSize:"0.85rem"},children:["This project uses GitHub Issues",u?` (${u})`:"","."]}),(0,p.jsx)("button",{onClick:()=>ot.postMessage({type:"githubSignIn"}),children:"Sign in to GitHub"})]});let om=Object.keys(i.tasks).length;return(0,p.jsxs)("div",{className:"kanban-shell",children:[(0,p.jsx)("style",{children:` *, *::before, *::after { box-sizing: border-box; } :root { @@ -570,7 +570,7 @@ Error generating stack: `+e.message+` } .spacer { flex: 1; } - `}),(0,p.jsxs)("div",{className:"board-header",children:[(0,p.jsxs)("div",{children:[(0,p.jsx)("h3",{className:"board-title",children:"Project Board"}),u?(0,p.jsxs)("div",{className:"board-repo",children:["\u2387 ",u]}):null]}),(0,p.jsxs)("div",{className:"header-right",children:[(0,p.jsx)("span",{className:"task-count",children:cm}),D?null:(0,p.jsx)("button",{className:"icon-btn",title:"Add column",onClick:()=>T(!0),children:"+"}),(0,p.jsx)("button",{className:"icon-btn",title:"Refresh board",onClick:()=>{t("loading"),ot.postMessage({type:"refresh"})},children:"\u21BB"})]})]}),(0,p.jsxs)("div",{className:"kanban-body",children:[(0,p.jsx)("div",{className:"board-scroll",children:(0,p.jsxs)("div",{className:"board-columns",children:[i.columns.map((O,Tl)=>{let P=oy(O,i),Wf=O.id===$r,Su=O.id===$r||O.id==="backlog",$f=Wf&&o>0?new Date(Date.now()-o*864e5):null,Aa=$f?P.filter(L=>{let If=dy(L);return If===null||If>=$f}):P,Ff=P.length-Aa.length,fm=Fr[Tl%Fr.length];return(0,p.jsxs)("section",{className:`board-column${m===O.id?" drag-over":""}`,style:{"--col-accent":fm},onDragOver:L=>{L.preventDefault(),v(O.id)},onDragLeave:L=>{L.currentTarget.contains(L.relatedTarget)||v(null)},onDrop:L=>im(L,O.id),children:[(0,p.jsxs)("div",{className:"column-head",children:[g===O.id?(0,p.jsx)("input",{ref:pu,className:"column-rename-input",value:N,onChange:L=>z(L.target.value),onKeyDown:L=>{L.key==="Enter"&&Jf(),L.key==="Escape"&&E(null)},onBlur:Jf}):(0,p.jsx)("h4",{className:`column-title${Su?"":" column-title--editable"}`,title:Su?void 0:"Double-click to rename",onDoubleClick:()=>{Su||am(O)},children:O.title}),(0,p.jsxs)("div",{className:"column-head-right",children:[Wf?(0,p.jsx)("button",{className:"done-window-btn",title:"Cycle time window",onClick:()=>{let L=be.indexOf(o);r(be[(L+1)%be.length])},children:o===0?"all":`${o}d`}):null,(0,p.jsx)("span",{className:"column-count",children:Aa.length}),Su?null:(0,p.jsx)("button",{className:"col-delete-btn",title:Aa.length>0?"Move tasks before deleting":"Delete column",disabled:Aa.length>0,onClick:()=>em(O.id),children:"\u2715"})]})]}),(0,p.jsxs)("div",{className:"column-cards",children:[Aa.length===0&&m!==O.id?(0,p.jsx)("div",{className:"empty-column",children:"Drop tasks here"}):null,Aa.map(L=>(0,p.jsx)(ry,{task:L,isSelected:H?.id===L.id,onSelect:tm,isDragging:S===L.id,onDragStart:A,onDragEnd:()=>A(null)},L.id))]}),Ff>0?(0,p.jsxs)("button",{className:"done-hidden-btn",onClick:()=>{let L=be.indexOf(o);r(be[(L+1)%be.length])},children:[Ff," older \xB7 show more"]}):null,f===O.id?(0,p.jsxs)("div",{className:"task-create",children:[(0,p.jsx)("input",{ref:Kf,value:y,placeholder:"Task title\u2026",onChange:L=>b(L.target.value),onKeyDown:L=>{L.key==="Enter"&&wf(),L.key==="Escape"&&s(null)}}),(0,p.jsxs)("div",{className:"task-create-actions",children:[(0,p.jsx)("button",{onClick:wf,children:"Add"}),(0,p.jsx)("button",{className:"secondary",onClick:()=>s(null),children:"Cancel"})]})]}):(0,p.jsx)("button",{className:"add-task-btn",onClick:()=>{s(O.id),b("")},children:"+ Add task"})]},O.id)}),D?(0,p.jsxs)("div",{className:"board-column add-column-card",children:[(0,p.jsx)("input",{ref:Lf,className:"add-column-input",value:R,placeholder:"Column name\u2026",onChange:O=>Nl(O.target.value),onKeyDown:O=>{O.key==="Enter"&&kf(),O.key==="Escape"&&(T(!1),Nl(""))}}),(0,p.jsxs)("div",{className:"task-create-actions",children:[(0,p.jsx)("button",{onClick:kf,children:"Add"}),(0,p.jsx)("button",{className:"secondary",onClick:()=>{T(!1),Nl("")},children:"Cancel"})]})]}):null]})}),H?(0,p.jsx)(my,{task:H,columns:i.columns,onSave:um,onDelete:nm,onClose:()=>d(null)}):null]})]})}var Pr=document.getElementById("root");Pr&&(0,lm.createRoot)(Pr).render((0,p.jsx)(vy,{}));})(); + `}),(0,p.jsxs)("div",{className:"board-header",children:[(0,p.jsxs)("div",{children:[(0,p.jsx)("h3",{className:"board-title",children:"Project Board"}),u?(0,p.jsxs)("div",{className:"board-repo",children:["\u2387 ",u]}):null]}),(0,p.jsxs)("div",{className:"header-right",children:[(0,p.jsx)("span",{className:"task-count",children:om}),E?null:(0,p.jsx)("button",{className:"icon-btn",title:"Add column",onClick:()=>Tl(!0),children:"+"}),(0,p.jsx)("button",{className:"icon-btn",title:"Refresh board",onClick:()=>{t("loading"),ot.postMessage({type:"refresh"})},children:"\u21BB"})]})]}),(0,p.jsxs)("div",{className:"kanban-body",children:[(0,p.jsx)("div",{className:"board-scroll",children:(0,p.jsxs)("div",{className:"board-columns",children:[i.columns.map((O,El)=>{let P=sy(O,i),Ff=O.id===Ir,zu=O.id===Ir||O.id==="backlog",If=Ff&&g>0?new Date(Date.now()-g*864e5):null,Aa=If?P.filter(L=>{let lo=ry(L);return lo===null||lo>=If}):P,Pf=P.length-Aa.length,dm=Pr[El%Pr.length];return(0,p.jsxs)("section",{className:`board-column${S===O.id?" drag-over":""}`,style:{"--col-accent":dm},onDragOver:L=>{L.preventDefault(),A(O.id)},onDragLeave:L=>{L.currentTarget.contains(L.relatedTarget)||A(null)},onDrop:L=>fm(L,O.id),children:[(0,p.jsxs)("div",{className:"column-head",children:[U===O.id?(0,p.jsx)("input",{ref:Kf,className:"column-rename-input",value:D,onChange:L=>x(L.target.value),onKeyDown:L=>{L.key==="Enter"&&wf(),L.key==="Escape"&&z(null)},onBlur:wf}):(0,p.jsx)("h4",{className:`column-title${zu?"":" column-title--editable"}`,title:zu?void 0:"Double-click to rename",onDoubleClick:()=>{zu||um(O)},children:O.title}),(0,p.jsxs)("div",{className:"column-head-right",children:[Ff?(0,p.jsx)("button",{className:"done-window-btn",title:"Cycle time window",onClick:()=>{let L=be.indexOf(g);T(be[(L+1)%be.length])},children:g===0?"all":`${g}d`}):null,(0,p.jsx)("span",{className:"column-count",children:Aa.length}),zu?null:(0,p.jsx)("button",{className:"col-delete-btn",title:Aa.length>0?"Move tasks before deleting":"Delete column",disabled:Aa.length>0,onClick:()=>nm(O.id),children:"\u2715"})]})]}),(0,p.jsxs)("div",{className:"column-cards",children:[Aa.length===0&&S!==O.id?(0,p.jsx)("div",{className:"empty-column",children:"Drop tasks here"}):null,Aa.map(L=>(0,p.jsx)(vy,{task:L,isSelected:o?.id===L.id,onSelect:em,isDragging:R===L.id,onDragStart:d,onDragEnd:()=>d(null)},L.id))]}),Pf>0?(0,p.jsxs)("button",{className:"done-hidden-btn",onClick:()=>{let L=be.indexOf(g);T(be[(L+1)%be.length])},children:[Pf," older \xB7 show more"]}):null,y===O.id?(0,p.jsxs)("div",{className:"task-create",children:[(0,p.jsx)("input",{ref:kf,value:m,placeholder:"Task title\u2026",onChange:L=>v(L.target.value),onKeyDown:L=>{L.key==="Enter"&&$f(),L.key==="Escape"&&b(null)}}),(0,p.jsxs)("div",{className:"task-create-actions",children:[(0,p.jsx)("button",{onClick:$f,children:"Add"}),(0,p.jsx)("button",{className:"secondary",onClick:()=>b(null),children:"Cancel"})]})]}):(0,p.jsx)("button",{className:"add-task-btn",onClick:()=>{b(O.id),v("")},children:"+ Add task"})]},O.id)}),E?(0,p.jsxs)("div",{className:"board-column add-column-card",children:[(0,p.jsx)("input",{ref:Jf,className:"add-column-input",value:pu,placeholder:"Column name\u2026",onChange:O=>Su(O.target.value),onKeyDown:O=>{O.key==="Enter"&&Wf(),O.key==="Escape"&&(Tl(!1),Su(""))}}),(0,p.jsxs)("div",{className:"task-create-actions",children:[(0,p.jsx)("button",{onClick:Wf,children:"Add"}),(0,p.jsx)("button",{className:"secondary",onClick:()=>{Tl(!1),Su("")},children:"Cancel"})]})]}):null]})}),o?(0,p.jsx)(yy,{task:o,columns:i.columns,agents:f,onSave:im,onDelete:cm,onClose:()=>r(null)}):null]})]})}var tm=document.getElementById("root");tm&&(0,am.createRoot)(tm).render((0,p.jsx)(gy,{}));})(); /*! Bundled license information: react/cjs/react.production.js: diff --git a/ai-dev-vscode/dist/webviews/kanban/main.js.map b/ai-dev-vscode/dist/webviews/kanban/main.js.map index 35e47bf..f619701 100644 --- a/ai-dev-vscode/dist/webviews/kanban/main.js.map +++ b/ai-dev-vscode/dist/webviews/kanban/main.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../node_modules/react/cjs/react.production.js", "../../../node_modules/react/index.js", "../../../node_modules/scheduler/cjs/scheduler.production.js", "../../../node_modules/scheduler/index.js", "../../../node_modules/react-dom/cjs/react-dom.production.js", "../../../node_modules/react-dom/index.js", "../../../node_modules/react-dom/cjs/react-dom-client.production.js", "../../../node_modules/react-dom/client.js", "../../../node_modules/react/cjs/react-jsx-runtime.production.js", "../../../node_modules/react/jsx-runtime.js", "../../../src/webviews/kanban/main.tsx", "../../../src/webviews/shared/vscodeApi.ts"], - "sourcesContent": ["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n", "/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n", "/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.6\";\n", "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n", "/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" ()\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"\") &&\n (frame = frame.replace(\"\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[: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]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle 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(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \"