From d623ede37c34d4f87b6f311fa92bde38eeb17cbc Mon Sep 17 00:00:00 2001 From: teh_coderer Date: Wed, 3 May 2023 18:28:52 -0400 Subject: add trace labels space --- frontend-components/plotly/src/App.tsx | 15 ++- .../plotly/src/components/ResizeHandler.tsx | 15 ++- openbb_terminal/core/plots/backend.py | 12 -- openbb_terminal/core/plots/plotly.html | 142 ++++++++++----------- 4 files changed, 95 insertions(+), 89 deletions(-) diff --git a/frontend-components/plotly/src/App.tsx b/frontend-components/plotly/src/App.tsx index bcadf56acd6..27915ab4a33 100644 --- a/frontend-components/plotly/src/App.tsx +++ b/frontend-components/plotly/src/App.tsx @@ -71,7 +71,20 @@ function App() { } }); } - let title = data.layout?.title?.text; + + // We add spaces to all trace names, due to Fira Code font width issues + // to make sure that the legend is not cut off + data.data.forEach(function (trace) { + if (trace.name != undefined) { + const name_length = trace.name.length; + trace.name = trace.name + " "; + trace.hoverlabel = { + namelength: name_length, + }; + } + }); + + let title = data.layout?.title?.text || "Interactive Chart"; globals.title = title; return { data: data, diff --git a/frontend-components/plotly/src/components/ResizeHandler.tsx b/frontend-components/plotly/src/components/ResizeHandler.tsx index e2997905c1c..ced5fff3e73 100644 --- a/frontend-components/plotly/src/components/ResizeHandler.tsx +++ b/frontend-components/plotly/src/components/ResizeHandler.tsx @@ -5,7 +5,7 @@ import { hideModebar } from "./PlotlyConfig"; export default async function ResizeHandler({ plotData, volumeBars, - setMaximizePlot + setMaximizePlot, }: { plotData: Figure; volumeBars: any; @@ -14,7 +14,11 @@ export default async function ResizeHandler({ // We hide the modebar and set the number of ticks to 5 const XAXIS = Object.keys(plotData.layout) .filter((x) => x.startsWith("xaxis")) - .filter((x) => plotData.layout[x].showticklabels); + .filter( + (x) => + plotData.layout[x].showticklabels || + plotData.layout[x].matches == undefined + ); const TRACES = plotData.data.filter((trace) => trace?.name?.startsWith("Volume") @@ -29,7 +33,7 @@ export default async function ResizeHandler({ height > 420 && width < 920 ? 8 : height > 420 && width < 500 ? 9 : 7; if (width < 750) { - // We hide the modebar and set the number of ticks to 5 + // We hide the modebar and set the number of ticks to 6 TRACES.forEach((trace) => { if (trace.type == "bar") { @@ -44,8 +48,9 @@ export default async function ResizeHandler({ } } }); + XAXIS.forEach((x) => { - if (volume.old_nticks?.[x] == undefined) { + if (volumeBars.old_nticks?.[x] == undefined) { layout_update[x + ".nticks"] = 6; volume.old_nticks[x] = plotData.layout[x].nticks || 10; } @@ -60,7 +65,7 @@ export default async function ResizeHandler({ if (volumeBars.old_nticks != undefined) { XAXIS.forEach((x) => { - if (volume.old_nticks[x] != undefined) { + if (volumeBars.old_nticks[x] != undefined) { layout_update[x + ".nticks"] = volume.old_nticks[x]; volume.old_nticks[x] = undefined; } diff --git a/openbb_terminal/core/plots/backend.py b/openbb_terminal/core/plots/backend.py index 5629acf18bf..7ffc2e2e966 100644 --- a/openbb_terminal/core/plots/backend.py +++ b/openbb_terminal/core/plots/backend.py @@ -188,18 +188,6 @@ class Backend(PyWry): title = "Interactive Chart" - # We check if figure is a subplot and has a title annotation - if not fig.layout.title.text and fig._has_subplots(): # pylint: disable=W0212 - for annotation in fig.select_annotations( - selector=dict(xref="paper", yref="paper") - ): - # Subplots always set the first annotation as the title - # so we break after the first one - if annotation.text: - title = annotation.text - annotation.text = "" - break - fig.layout.title.text = re.sub( r"<[^>]*>", "", fig.layout.title.text if fig.layout.title.text else title ) diff --git a/openbb_terminal/core/plots/plotly.html b/openbb_terminal/core/plots/plotly.html index 3206a5cdf6d..1517166b5cc 100644 --- a/openbb_terminal/core/plots/plotly.html +++ b/openbb_terminal/core/plots/plotly.html @@ -58,7 +58,7 @@ object-assign * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(P){var F,J,fe,Pe;if(typeof performance=="object"&&typeof performance.now=="function"){var D=performance;P.unstable_now=function(){return D.now()}}else{var E=Date,e=E.now();P.unstable_now=function(){return E.now()-e}}if(typeof window>"u"||typeof MessageChannel!="function"){var _=null,T=null,s=function(){if(_!==null)try{var I=P.unstable_now();_(!0,I),_=null}catch(R){throw setTimeout(s,0),R}};F=function(I){_!==null?setTimeout(F,0,I):(_=I,setTimeout(s,0))},J=function(I,R){T=setTimeout(I,R)},fe=function(){clearTimeout(T)},P.unstable_shouldYield=function(){return!1},Pe=P.unstable_forceFrameRate=function(){}}else{var w=window.setTimeout,m=window.clearTimeout;if(typeof console<"u"){var f=window.cancelAnimationFrame;typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof f!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var l=!1,t=null,i=-1,r=5,n=0;P.unstable_shouldYield=function(){return P.unstable_now()>=n},Pe=function(){},P.unstable_forceFrameRate=function(I){0>I||125>>1,G=I[B];if(G!==void 0&&0b(j,U))H!==void 0&&0>b(H,j)?(I[B]=H,I[V]=U,B=V):(I[B]=j,I[N]=U,B=N);else if(H!==void 0&&0>b(H,U))I[B]=H,I[V]=U,B=V;else break e}}return R}return null}function b(I,R){var U=I.sortIndex-R.sortIndex;return U!==0?U:I.id-R.id}var d=[],v=[],x=1,g=null,y=3,k=!1,h=!1,M=!1;function A(I){for(var R=p(v);R!==null;){if(R.callback===null)c(v);else if(R.startTime<=I)c(v),R.sortIndex=R.expirationTime,u(d,R);else break;R=p(v)}}function C(I){if(M=!1,A(I),!h)if(p(d)!==null)h=!0,F(L);else{var R=p(v);R!==null&&J(C,R.startTime-I)}}function L(I,R){h=!1,M&&(M=!1,fe()),k=!0;var U=y;try{for(A(R),g=p(d);g!==null&&(!(g.expirationTime>R)||I&&!P.unstable_shouldYield());){var B=g.callback;if(typeof B=="function"){g.callback=null,y=g.priorityLevel;var G=B(g.expirationTime<=R);R=P.unstable_now(),typeof G=="function"?g.callback=G:g===p(d)&&c(d),A(R)}else c(d);g=p(d)}if(g!==null)var N=!0;else{var j=p(v);j!==null&&J(C,j.startTime-R),N=!1}return N}finally{g=null,y=U,k=!1}}var O=Pe;P.unstable_IdlePriority=5,P.unstable_ImmediatePriority=1,P.unstable_LowPriority=4,P.unstable_NormalPriority=3,P.unstable_Profiling=null,P.unstable_UserBlockingPriority=2,P.unstable_cancelCallback=function(I){I.callback=null},P.unstable_continueExecution=function(){h||k||(h=!0,F(L))},P.unstable_getCurrentPriorityLevel=function(){return y},P.unstable_getFirstCallbackNode=function(){return p(d)},P.unstable_next=function(I){switch(y){case 1:case 2:case 3:var R=3;break;default:R=y}var U=y;y=R;try{return I()}finally{y=U}},P.unstable_pauseExecution=function(){},P.unstable_requestPaint=O,P.unstable_runWithPriority=function(I,R){switch(I){case 1:case 2:case 3:case 4:case 5:break;default:I=3}var U=y;y=I;try{return R()}finally{y=U}},P.unstable_scheduleCallback=function(I,R,U){var B=P.unstable_now();switch(typeof U=="object"&&U!==null?(U=U.delay,U=typeof U=="number"&&0B?(I.sortIndex=U,u(v,I),p(d)===null&&I===p(v)&&(M?fe():M=!0,J(C,U-B))):(I.sortIndex=G,u(d,I),h||k||(h=!0,F(L))),I},P.unstable_wrapCallback=function(I){var R=y;return function(){var U=y;y=R;try{return I.apply(this,arguments)}finally{y=U}}}})(h_);f_.exports=h_;var j4=f_.exports;/** @license React v17.0.2 + */(function(P){var F,J,fe,Pe;if(typeof performance=="object"&&typeof performance.now=="function"){var D=performance;P.unstable_now=function(){return D.now()}}else{var E=Date,e=E.now();P.unstable_now=function(){return E.now()-e}}if(typeof window>"u"||typeof MessageChannel!="function"){var _=null,T=null,s=function(){if(_!==null)try{var I=P.unstable_now();_(!0,I),_=null}catch(R){throw setTimeout(s,0),R}};F=function(I){_!==null?setTimeout(F,0,I):(_=I,setTimeout(s,0))},J=function(I,R){T=setTimeout(I,R)},fe=function(){clearTimeout(T)},P.unstable_shouldYield=function(){return!1},Pe=P.unstable_forceFrameRate=function(){}}else{var w=window.setTimeout,m=window.clearTimeout;if(typeof console<"u"){var f=window.cancelAnimationFrame;typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof f!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var l=!1,t=null,i=-1,n=5,r=0;P.unstable_shouldYield=function(){return P.unstable_now()>=r},Pe=function(){},P.unstable_forceFrameRate=function(I){0>I||125>>1,G=I[B];if(G!==void 0&&0b(j,U))H!==void 0&&0>b(H,j)?(I[B]=H,I[V]=U,B=V):(I[B]=j,I[N]=U,B=N);else if(H!==void 0&&0>b(H,U))I[B]=H,I[V]=U,B=V;else break e}}return R}return null}function b(I,R){var U=I.sortIndex-R.sortIndex;return U!==0?U:I.id-R.id}var d=[],v=[],x=1,g=null,y=3,k=!1,h=!1,M=!1;function A(I){for(var R=p(v);R!==null;){if(R.callback===null)c(v);else if(R.startTime<=I)c(v),R.sortIndex=R.expirationTime,u(d,R);else break;R=p(v)}}function C(I){if(M=!1,A(I),!h)if(p(d)!==null)h=!0,F(L);else{var R=p(v);R!==null&&J(C,R.startTime-I)}}function L(I,R){h=!1,M&&(M=!1,fe()),k=!0;var U=y;try{for(A(R),g=p(d);g!==null&&(!(g.expirationTime>R)||I&&!P.unstable_shouldYield());){var B=g.callback;if(typeof B=="function"){g.callback=null,y=g.priorityLevel;var G=B(g.expirationTime<=R);R=P.unstable_now(),typeof G=="function"?g.callback=G:g===p(d)&&c(d),A(R)}else c(d);g=p(d)}if(g!==null)var N=!0;else{var j=p(v);j!==null&&J(C,j.startTime-R),N=!1}return N}finally{g=null,y=U,k=!1}}var O=Pe;P.unstable_IdlePriority=5,P.unstable_ImmediatePriority=1,P.unstable_LowPriority=4,P.unstable_NormalPriority=3,P.unstable_Profiling=null,P.unstable_UserBlockingPriority=2,P.unstable_cancelCallback=function(I){I.callback=null},P.unstable_continueExecution=function(){h||k||(h=!0,F(L))},P.unstable_getCurrentPriorityLevel=function(){return y},P.unstable_getFirstCallbackNode=function(){return p(d)},P.unstable_next=function(I){switch(y){case 1:case 2:case 3:var R=3;break;default:R=y}var U=y;y=R;try{return I()}finally{y=U}},P.unstable_pauseExecution=function(){},P.unstable_requestPaint=O,P.unstable_runWithPriority=function(I,R){switch(I){case 1:case 2:case 3:case 4:case 5:break;default:I=3}var U=y;y=I;try{return R()}finally{y=U}},P.unstable_scheduleCallback=function(I,R,U){var B=P.unstable_now();switch(typeof U=="object"&&U!==null?(U=U.delay,U=typeof U=="number"&&0B?(I.sortIndex=U,u(v,I),p(d)===null&&I===p(v)&&(M?fe():M=!0,J(C,U-B))):(I.sortIndex=G,u(d,I),h||k||(h=!0,F(L))),I},P.unstable_wrapCallback=function(I){var R=y;return function(){var U=y;y=R;try{return I.apply(this,arguments)}finally{y=U}}}})(h_);f_.exports=h_;var j4=f_.exports;/** @license React v17.0.2 * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. @@ -69,24 +69,24 @@ object-assign `+tg+P}var ng=!1;function zd(P,F){if(!P||ng)return"";ng=!0;var J=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(F)if(F=function(){throw Error()},Object.defineProperty(F.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(F,[])}catch(_){var fe=_}Reflect.construct(P,[],F)}else{try{F.call()}catch(_){fe=_}P.call(F.prototype)}else{try{throw Error()}catch(_){fe=_}P()}}catch(_){if(_&&fe&&typeof _.stack=="string"){for(var Pe=_.stack.split(` `),D=fe.stack.split(` `),E=Pe.length-1,e=D.length-1;1<=E&&0<=e&&Pe[E]!==D[e];)e--;for(;1<=E&&0<=e;E--,e--)if(Pe[E]!==D[e]){if(E!==1||e!==1)do if(E--,e--,0>e||Pe[E]!==D[e])return` -`+Pe[E].replace(" at new "," at ");while(1<=E&&0<=e);break}}}finally{ng=!1,Error.prepareStackTrace=J}return(P=P?P.displayName||P.name:"")?np(P):""}function G4(P){switch(P.tag){case 5:return np(P.type);case 16:return np("Lazy");case 13:return np("Suspense");case 19:return np("SuspenseList");case 0:case 2:case 15:return P=zd(P.type,!1),P;case 11:return P=zd(P.type.render,!1),P;case 22:return P=zd(P.type._render,!1),P;case 1:return P=zd(P.type,!0),P;default:return""}}function Zf(P){if(P==null)return null;if(typeof P=="function")return P.displayName||P.name||null;if(typeof P=="string")return P;switch(P){case tc:return"Fragment";case Xc:return"Portal";case lp:return"Profiler";case tm:return"StrictMode";case up:return"Suspense";case x0:return"SuspenseList"}if(typeof P=="object")switch(P.$$typeof){case rm:return(P.displayName||"Context")+".Consumer";case nm:return(P._context.displayName||"Context")+".Provider";case X0:var F=P.render;return F=F.displayName||F.name||"",P.displayName||(F!==""?"ForwardRef("+F+")":"ForwardRef");case $0:return Zf(P.type);case am:return Zf(P._render);case im:F=P._payload,P=P._init;try{return Zf(P(F))}catch{}}return null}function bc(P){switch(typeof P){case"boolean":case"number":case"object":case"string":case"undefined":return P;default:return""}}function g_(P){var F=P.type;return(P=P.nodeName)&&P.toLowerCase()==="input"&&(F==="checkbox"||F==="radio")}function W4(P){var F=g_(P)?"checked":"value",J=Object.getOwnPropertyDescriptor(P.constructor.prototype,F),fe=""+P[F];if(!P.hasOwnProperty(F)&&typeof J<"u"&&typeof J.get=="function"&&typeof J.set=="function"){var Pe=J.get,D=J.set;return Object.defineProperty(P,F,{configurable:!0,get:function(){return Pe.call(this)},set:function(E){fe=""+E,D.call(this,E)}}),Object.defineProperty(P,F,{enumerable:J.enumerable}),{getValue:function(){return fe},setValue:function(E){fe=""+E},stopTracking:function(){P._valueTracker=null,delete P[F]}}}}function Dd(P){P._valueTracker||(P._valueTracker=W4(P))}function v_(P){if(!P)return!1;var F=P._valueTracker;if(!F)return!0;var J=F.getValue(),fe="";return P&&(fe=g_(P)?P.checked?"true":"false":P.value),P=fe,P!==J?(F.setValue(P),!0):!1}function b0(P){if(P=P||(typeof document<"u"?document:void 0),typeof P>"u")return null;try{return P.activeElement||P.body}catch{return P.body}}function jg(P,F){var J=F.checked;return da({},F,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:J??P._wrapperState.initialChecked})}function qx(P,F){var J=F.defaultValue==null?"":F.defaultValue,fe=F.checked!=null?F.checked:F.defaultChecked;J=bc(F.value!=null?F.value:J),P._wrapperState={initialChecked:fe,initialValue:J,controlled:F.type==="checkbox"||F.type==="radio"?F.checked!=null:F.value!=null}}function m_(P,F){F=F.checked,F!=null&&em(P,"checked",F,!1)}function Ug(P,F){m_(P,F);var J=bc(F.value),fe=F.type;if(J!=null)fe==="number"?(J===0&&P.value===""||P.value!=J)&&(P.value=""+J):P.value!==""+J&&(P.value=""+J);else if(fe==="submit"||fe==="reset"){P.removeAttribute("value");return}F.hasOwnProperty("value")?Vg(P,F.type,J):F.hasOwnProperty("defaultValue")&&Vg(P,F.type,bc(F.defaultValue)),F.checked==null&&F.defaultChecked!=null&&(P.defaultChecked=!!F.defaultChecked)}function Gx(P,F,J){if(F.hasOwnProperty("value")||F.hasOwnProperty("defaultValue")){var fe=F.type;if(!(fe!=="submit"&&fe!=="reset"||F.value!==void 0&&F.value!==null))return;F=""+P._wrapperState.initialValue,J||F===P.value||(P.value=F),P.defaultValue=F}J=P.name,J!==""&&(P.name=""),P.defaultChecked=!!P._wrapperState.initialChecked,J!==""&&(P.name=J)}function Vg(P,F,J){(F!=="number"||b0(P.ownerDocument)!==P)&&(J==null?P.defaultValue=""+P._wrapperState.initialValue:P.defaultValue!==""+J&&(P.defaultValue=""+J))}function Z4(P){var F="";return Y0.Children.forEach(P,function(J){J!=null&&(F+=J)}),F}function Hg(P,F){return P=da({children:void 0},F),(F=Z4(F.children))&&(P.children=F),P}function Yf(P,F,J,fe){if(P=P.options,F){F={};for(var Pe=0;Pe=J.length))throw Error(Dr(93));J=J[0]}F=J}F==null&&(F=""),J=F}P._wrapperState={initialValue:bc(J)}}function y_(P,F){var J=bc(F.value),fe=bc(F.defaultValue);J!=null&&(J=""+J,J!==P.value&&(P.value=J),F.defaultValue==null&&P.defaultValue!==J&&(P.defaultValue=J)),fe!=null&&(P.defaultValue=""+fe)}function Zx(P){var F=P.textContent;F===P._wrapperState.initialValue&&F!==""&&F!==null&&(P.value=F)}var Gg={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function x_(P){switch(P){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Wg(P,F){return P==null||P==="http://www.w3.org/1999/xhtml"?x_(F):P==="http://www.w3.org/2000/svg"&&F==="foreignObject"?"http://www.w3.org/1999/xhtml":P}var Fd,b_=function(P){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(F,J,fe,Pe){MSApp.execUnsafeLocalFunction(function(){return P(F,J,fe,Pe)})}:P}(function(P,F){if(P.namespaceURI!==Gg.svg||"innerHTML"in P)P.innerHTML=F;else{for(Fd=Fd||document.createElement("div"),Fd.innerHTML=""+F.valueOf().toString()+"",F=Fd.firstChild;P.firstChild;)P.removeChild(P.firstChild);for(;F.firstChild;)P.appendChild(F.firstChild)}});function Tp(P,F){if(F){var J=P.firstChild;if(J&&J===P.lastChild&&J.nodeType===3){J.nodeValue=F;return}}P.textContent=F}var cp={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Y4=["Webkit","ms","Moz","O"];Object.keys(cp).forEach(function(P){Y4.forEach(function(F){F=F+P.charAt(0).toUpperCase()+P.substring(1),cp[F]=cp[P]})});function __(P,F,J){return F==null||typeof F=="boolean"||F===""?"":J||typeof F!="number"||F===0||cp.hasOwnProperty(P)&&cp[P]?(""+F).trim():F+"px"}function w_(P,F){P=P.style;for(var J in F)if(F.hasOwnProperty(J)){var fe=J.indexOf("--")===0,Pe=__(J,F[J],fe);J==="float"&&(J="cssFloat"),fe?P.setProperty(J,Pe):P[J]=Pe}}var X4=da({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Zg(P,F){if(F){if(X4[P]&&(F.children!=null||F.dangerouslySetInnerHTML!=null))throw Error(Dr(137,P));if(F.dangerouslySetInnerHTML!=null){if(F.children!=null)throw Error(Dr(60));if(!(typeof F.dangerouslySetInnerHTML=="object"&&"__html"in F.dangerouslySetInnerHTML))throw Error(Dr(61))}if(F.style!=null&&typeof F.style!="object")throw Error(Dr(62))}}function Yg(P,F){if(P.indexOf("-")===-1)return typeof F.is=="string";switch(P){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function lm(P){return P=P.target||P.srcElement||window,P.correspondingUseElement&&(P=P.correspondingUseElement),P.nodeType===3?P.parentNode:P}var Xg=null,Xf=null,$f=null;function Yx(P){if(P=qp(P)){if(typeof Xg!="function")throw Error(Dr(280));var F=P.stateNode;F&&(F=n1(F),Xg(P.stateNode,P.type,F))}}function T_(P){Xf?$f?$f.push(P):$f=[P]:Xf=P}function k_(){if(Xf){var P=Xf,F=$f;if($f=Xf=null,Yx(P),F)for(P=0;Pfe?0:1<J;J++)F.push(P);return F}function K0(P,F,J){P.pendingLanes|=F;var fe=F-1;P.suspendedLanes&=fe,P.pingedLanes&=fe,P=P.eventTimes,F=31-_c(F),P[F]=J}var _c=Math.clz32?Math.clz32:f6,u6=Math.log,c6=Math.LN2;function f6(P){return P===0?32:31-(u6(P)/c6|0)|0}var h6=xo.unstable_UserBlockingPriority,p6=xo.unstable_runWithPriority,i0=!0;function d6(P,F,J,fe){$c||cm();var Pe=gm,D=$c;$c=!0;try{A_(Pe,P,F,J,fe)}finally{($c=D)||fm()}}function g6(P,F,J,fe){p6(h6,gm.bind(null,P,F,J,fe))}function gm(P,F,J,fe){if(i0){var Pe;if((Pe=(F&4)===0)&&0=hp),i2=String.fromCharCode(32),a2=!1;function V_(P,F){switch(P){case"keyup":return B6.indexOf(F.keyCode)!==-1;case"keydown":return F.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function H_(P){return P=P.detail,typeof P=="object"&&"data"in P?P.data:null}var Uf=!1;function j6(P,F){switch(P){case"compositionend":return H_(F);case"keypress":return F.which!==32?null:(a2=!0,i2);case"textInput":return P=F.data,P===i2&&a2?null:P;default:return null}}function U6(P,F){if(Uf)return P==="compositionend"||!bm&&V_(P,F)?(P=j_(),a0=mm=ic=null,Uf=!1,P):null;switch(P){case"paste":return null;case"keypress":if(!(F.ctrlKey||F.altKey||F.metaKey)||F.ctrlKey&&F.altKey){if(F.char&&1=F)return{node:J,offset:F-P};P=fe}e:{for(;J;){if(J.nextSibling){J=J.nextSibling;break e}J=J.parentNode}J=void 0}J=u2(J)}}function Z_(P,F){return P&&F?P===F?!0:P&&P.nodeType===3?!1:F&&F.nodeType===3?Z_(P,F.parentNode):"contains"in P?P.contains(F):P.compareDocumentPosition?!!(P.compareDocumentPosition(F)&16):!1:!1}function f2(){for(var P=window,F=b0();F instanceof P.HTMLIFrameElement;){try{var J=typeof F.contentWindow.location.href=="string"}catch{J=!1}if(J)P=F.contentWindow;else break;F=b0(P.document)}return F}function ev(P){var F=P&&P.nodeName&&P.nodeName.toLowerCase();return F&&(F==="input"&&(P.type==="text"||P.type==="search"||P.type==="tel"||P.type==="url"||P.type==="password")||F==="textarea"||P.contentEditable==="true")}var J6=Bu&&"documentMode"in document&&11>=document.documentMode,Vf=null,tv=null,dp=null,nv=!1;function h2(P,F,J){var fe=J.window===J?J.document:J.nodeType===9?J:J.ownerDocument;nv||Vf==null||Vf!==b0(fe)||(fe=Vf,"selectionStart"in fe&&ev(fe)?fe={start:fe.selectionStart,end:fe.selectionEnd}:(fe=(fe.ownerDocument&&fe.ownerDocument.defaultView||window).getSelection(),fe={anchorNode:fe.anchorNode,anchorOffset:fe.anchorOffset,focusNode:fe.focusNode,focusOffset:fe.focusOffset}),dp&&Cp(dp,fe)||(dp=fe,fe=k0(tv,"onSelect"),0qf||(P.current=iv[qf],iv[qf]=null,qf--)}function Pa(P,F){qf++,iv[qf]=P.current,P.current=F}var wc={},Go=Mc(wc),Es=Mc(!1),af=wc;function ih(P,F){var J=P.type.contextTypes;if(!J)return wc;var fe=P.stateNode;if(fe&&fe.__reactInternalMemoizedUnmaskedChildContext===F)return fe.__reactInternalMemoizedMaskedChildContext;var Pe={},D;for(D in J)Pe[D]=F[D];return fe&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=F,P.__reactInternalMemoizedMaskedChildContext=Pe),Pe}function Cs(P){return P=P.childContextTypes,P!=null}function S0(){ca(Es),ca(Go)}function _2(P,F,J){if(Go.current!==wc)throw Error(Dr(168));Pa(Go,F),Pa(Es,J)}function t3(P,F,J){var fe=P.stateNode;if(P=F.childContextTypes,typeof fe.getChildContext!="function")return J;fe=fe.getChildContext();for(var Pe in fe)if(!(Pe in P))throw Error(Dr(108,Zf(F)||"Unknown",Pe));return da({},J,fe)}function s0(P){return P=(P=P.stateNode)&&P.__reactInternalMemoizedMergedChildContext||wc,af=Go.current,Pa(Go,P),Pa(Es,Es.current),!0}function w2(P,F,J){var fe=P.stateNode;if(!fe)throw Error(Dr(169));J?(P=t3(P,F,af),fe.__reactInternalMemoizedMergedChildContext=P,ca(Es),ca(Go),Pa(Go,P)):ca(Es),Pa(Es,J)}var wm=null,ef=null,e8=xo.unstable_runWithPriority,Tm=xo.unstable_scheduleCallback,av=xo.unstable_cancelCallback,t8=xo.unstable_shouldYield,T2=xo.unstable_requestPaint,ov=xo.unstable_now,n8=xo.unstable_getCurrentPriorityLevel,r1=xo.unstable_ImmediatePriority,n3=xo.unstable_UserBlockingPriority,r3=xo.unstable_NormalPriority,i3=xo.unstable_LowPriority,a3=xo.unstable_IdlePriority,gg={},r8=T2!==void 0?T2:function(){},Ou=null,l0=null,vg=!1,k2=ov(),Ho=1e4>k2?ov:function(){return ov()-k2};function ah(){switch(n8()){case r1:return 99;case n3:return 98;case r3:return 97;case i3:return 96;case a3:return 95;default:throw Error(Dr(332))}}function o3(P){switch(P){case 99:return r1;case 98:return n3;case 97:return r3;case 96:return i3;case 95:return a3;default:throw Error(Dr(332))}}function of(P,F){return P=o3(P),e8(P,F)}function Pp(P,F,J){return P=o3(P),Tm(P,F,J)}function hu(){if(l0!==null){var P=l0;l0=null,av(P)}s3()}function s3(){if(!vg&&Ou!==null){vg=!0;var P=0;try{var F=Ou;of(99,function(){for(;Pc?(b=p,p=null):b=p.sibling;var d=m(i,p,n[c],o);if(d===null){p===null&&(p=b);break}P&&p&&d.alternate===null&&F(i,p),r=D(d,r,c),u===null?a=d:u.sibling=d,u=d,p=b}if(c===n.length)return J(i,p),a;if(p===null){for(;cc?(b=p,p=null):b=p.sibling;var v=m(i,p,d.value,o);if(v===null){p===null&&(p=b);break}P&&p&&v.alternate===null&&F(i,p),r=D(v,r,c),u===null?a=v:u.sibling=v,u=v,p=b}if(d.done)return J(i,p),a;if(p===null){for(;!d.done;c++,d=n.next())d=w(i,d.value,o),d!==null&&(r=D(d,r,c),u===null?a=d:u.sibling=d,u=d);return a}for(p=fe(i,p);!d.done;c++,d=n.next())d=f(p,i,c,d.value,o),d!==null&&(P&&d.alternate!==null&&p.delete(d.key===null?c:d.key),r=D(d,r,c),u===null?a=d:u.sibling=d,u=d);return P&&p.forEach(function(x){return F(i,x)}),a}return function(i,r,n,o){var a=typeof n=="object"&&n!==null&&n.type===tc&&n.key===null;a&&(n=n.props.children);var u=typeof n=="object"&&n!==null;if(u)switch(n.$$typeof){case tp:e:{for(u=n.key,a=r;a!==null;){if(a.key===u){switch(a.tag){case 7:if(n.type===tc){J(i,a.sibling),r=Pe(a,n.props.children),r.return=i,i=r;break e}break;default:if(a.elementType===n.type){J(i,a.sibling),r=Pe(a,n.props),r.ref=Zh(i,a,n),r.return=i,i=r;break e}}J(i,a);break}else F(i,a);a=a.sibling}n.type===tc?(r=nh(n.props.children,i.mode,o,n.key),r.return=i,i=r):(o=h0(n.type,n.key,n.props,null,i.mode,o),o.ref=Zh(i,r,n),o.return=i,i=o)}return E(i);case Xc:e:{for(a=n.key;r!==null;){if(r.key===a)if(r.tag===4&&r.stateNode.containerInfo===n.containerInfo&&r.stateNode.implementation===n.implementation){J(i,r.sibling),r=Pe(r,n.children||[]),r.return=i,i=r;break e}else{J(i,r);break}else F(i,r);r=r.sibling}r=wg(n,i.mode,o),r.return=i,i=r}return E(i)}if(typeof n=="string"||typeof n=="number")return n=""+n,r!==null&&r.tag===6?(J(i,r.sibling),r=Pe(r,n),r.return=i,i=r):(J(i,r),r=_g(n,i.mode,o),r.return=i,i=r),E(i);if(jd(n))return l(i,r,n,o);if(Uh(n))return t(i,r,n,o);if(u&&Ud(i,n),typeof n>"u"&&!a)switch(i.tag){case 1:case 22:case 0:case 11:case 15:throw Error(Dr(152,Zf(i.type)||"Component"))}return J(i,r)}}var O0=h3(!0),p3=h3(!1),Gp={},uu=Mc(Gp),Ip=Mc(Gp),Rp=Mc(Gp);function Kc(P){if(P===Gp)throw Error(Dr(174));return P}fu