@ndmspc/ndmvr-core 1.1.0-rc.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/assets/{RCanvasPainter-DQGWienR.js → RCanvasPainter-BN1wz_jA.js} +1 -1
- package/dist/assets/RNTuple-B19bW6t4.js +1 -0
- package/dist/assets/{RPavePainter-CQHUOnSn.js → RPavePainter-BOw0-OFU.js} +1 -1
- package/dist/assets/{RTreeMapPainter-B2r2zCJG.js → RTreeMapPainter-DNojexp9.js} +1 -1
- package/dist/assets/{TASImagePainter-DRdiRLt1.js → TASImagePainter-BNJ5OAGP.js} +1 -1
- package/dist/assets/{TAnnotation3DPainter-BCJen6cS.js → TAnnotation3DPainter-BCGBhq-q.js} +1 -1
- package/dist/assets/{TArrowPainter-Dspl2Ikh.js → TArrowPainter-C7a0r3SV.js} +1 -1
- package/dist/assets/{TBoxPainter-BQEN4gj8.js → TBoxPainter-Djh43LYY.js} +1 -1
- package/dist/assets/{TEfficiencyPainter-TxRejkVD.js → TEfficiencyPainter-dXd5DL3h.js} +1 -1
- package/dist/assets/{TF1Painter-BuwSTmhs.js → TF1Painter-DwE8KsBp.js} +1 -1
- package/dist/assets/{TF2Painter-BTh6LWBk.js → TF2Painter-SGNNKiK5.js} +1 -1
- package/dist/assets/{TF3Painter-R5EVXlD4.js → TF3Painter-yaRyTX9u.js} +1 -1
- package/dist/assets/{TGaxisPainter-BJuDLLel.js → TGaxisPainter-DSiIbikC.js} +1 -1
- package/dist/assets/{TGraph2DPainter-aeM0xqgu.js → TGraph2DPainter-COqZBIPT.js} +1 -1
- package/dist/assets/{TGraphPainter-DLkx_1ES.js → TGraphPainter-Bp7xEbQz.js} +1 -1
- package/dist/assets/{TGraphPainter-CtqNpDiH.js → TGraphPainter-CurXuifu.js} +1 -1
- package/dist/assets/{TGraphPolarPainter-bMuBuvEZ.js → TGraphPolarPainter-u-FCb_Gb.js} +1 -1
- package/dist/assets/{TGraphTimePainter-D_1RHDMz.js → TGraphTimePainter-DDPwiVGX.js} +1 -1
- package/dist/assets/{TH1Painter-CMr7gXzd.js → TH1Painter-BXzutgI3.js} +1 -1
- package/dist/assets/{TH1Painter--tuoUZTH.js → TH1Painter-DyN-WKyv.js} +1 -1
- package/dist/assets/{TH2Painter-DHaL_lR_.js → TH2Painter-BpixRP4j.js} +1 -1
- package/dist/assets/{TH2Painter-BLfyBVB5.js → TH2Painter-DceuYQAL.js} +1 -1
- package/dist/assets/{TH3Painter-DLCndhZ0.js → TH3Painter-BA_W8tmJ.js} +1 -1
- package/dist/assets/{THStackPainter-B3TUpsVt.js → THStackPainter-BWLN_w9A.js} +1 -1
- package/dist/assets/{THistPainter-Df-RmCQH.js → THistPainter-B2S5BnuY.js} +1 -1
- package/dist/assets/{TLinePainter-RinEQkrM.js → TLinePainter-D8inyuoX.js} +1 -1
- package/dist/assets/{TMultiGraphPainter-BQyL8zWX.js → TMultiGraphPainter-DcwdyhOr.js} +1 -1
- package/dist/assets/{TPavePainter-Dx40jhkF.js → TPavePainter-1yngbgp8.js} +1 -1
- package/dist/assets/{TPiePainter-BaTIH6-e.js → TPiePainter-BgDv4srX.js} +1 -1
- package/dist/assets/{TPolyLinePainter-7_jf8MLI.js → TPolyLinePainter-BYlrAjCB.js} +1 -1
- package/dist/assets/{TPolyMarker3D-DYlLB9Ww.js → TPolyMarker3D-BaWOSDy6.js} +1 -1
- package/dist/assets/{TRatioPlotPainter-BvUop_Na.js → TRatioPlotPainter-CJgkL58z.js} +1 -1
- package/dist/assets/{TScatterPainter-CvLCMGW2.js → TScatterPainter-Bt11j8z8.js} +1 -1
- package/dist/assets/{TSplinePainter-DJPtQW6I.js → TSplinePainter-p6k_OB02.js} +1 -1
- package/dist/assets/{TTextPainter-BwCh-g5B.js → TTextPainter-B26aOYGd.js} +1 -1
- package/dist/assets/{TTree-CE4EQRMu.js → TTree-BtFtnLeD.js} +1 -1
- package/dist/assets/{TWebPaintingPainter-CexNsDDp.js → TWebPaintingPainter-CZ6lo-7N.js} +1 -1
- package/dist/assets/{draw3d-BPJMZpwL.js → draw3d-ejHvJRmG.js} +1 -1
- package/dist/assets/{func-C1jNXIub.js → func-C6FX2eN2.js} +1 -1
- package/dist/assets/{hist3d-DCmav5Ga.js → hist3d-D9VevdP6.js} +1 -1
- package/dist/assets/{latex3d-ITrfFgp8.js → latex3d-8Hbnfz6c.js} +1 -1
- package/dist/assets/{main-CvPDcTGr.js → main-DwRPe_ox.js} +191 -191
- package/dist/assets/{more-CGvLPt4r.js → more-64laEJ4X.js} +1 -1
- package/dist/assets/{ndmvr-aframe-core-Cw91_9_Y.js → ndmvr-aframe-core-DEHQ38JB.js} +4 -4
- package/dist/assets/{rntuple-BCwqxNeP.js → rntuple-i8TaG-6V.js} +1 -1
- package/dist/assets/{stress-Ihg3ljmc.js → stress-KrXoDujC.js} +1 -1
- package/dist/assets/{v7more-H3D-KQGQ.js → v7more-C-UZAxz1.js} +1 -1
- package/dist/docs/components/configuration/configuration/index.html +243 -238
- package/dist/docs/components/tutorial/canvas/canvas/index.html +1 -1
- package/dist/docs/components/tutorial/configurationChapter/configuration-chapter/index.html +1 -1
- package/dist/docs/components/tutorial/firstVisualization/first-visualization/index.html +1 -1
- package/dist/docs/components/tutorial/interactions/interactions/index.html +1 -1
- package/dist/docs/downloads/canvas.zip +0 -0
- package/dist/docs/downloads/configuration.zip +0 -0
- package/dist/docs/downloads/first-visualization.zip +0 -0
- package/dist/docs/downloads/interactions.zip +0 -0
- package/dist/docs/index.html +1 -1
- package/dist/docs/search/search_index.json +1 -1
- package/dist/docs/sitemap.xml.gz +0 -0
- package/dist/index.es.js +962 -953
- package/dist/index.html +2 -2
- package/dist/index.umd.js +10 -10
- package/dist/stress.html +2 -2
- package/package.json +1 -1
- package/dist/assets/RNTuple-L4uyxl3s.js +0 -1
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ This section is intended to configure the camera's position. Note: This feature
|
|
|
59
59
|
>**Scale**: width/height/depth scaling (Three.js units).<br>
|
|
60
60
|
|
|
61
61
|
```json
|
|
62
|
-
"
|
|
62
|
+
"canvas": {
|
|
63
63
|
"position": { "x": 0, "y": 5, "z": -15 },
|
|
64
64
|
"rotation": { "x": 10, "y": 0, "z": 0 },
|
|
65
65
|
"scale": { "x": 10, "y": 10, "z": 0 }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a7 as _t,aK as S,bG as q,bc as Z,aA as y,cu as pt,cv as xt,cw as C,a5 as p,cx as vt,b$ as D,bP as I,bO as F,cy as yt,cz as bt,cn as wt,aF as Pt,cA as J,cB as Q,bT as tt,$ as z,cC as Ct,cD as N,aR as G,cf as ct,aE as ft,ba as M,ae as A,cE as zt,cF as St,bN as B,s as W,bn as et,al as gt,aq as ut,cG as it,cH as R,cI as At,cJ as kt,cK as Mt,bu as O,am as K,cL as st,cM as Ft,cN as H,cO as k,cP as Ot,cQ as Et,ay as at,cR as Rt,bg as Tt,cS as rt,cg as nt,cT as Dt,cU as It,c5 as $t,c6 as Lt,c7 as jt,cV as Bt,cW as ht,cX as Nt,a3 as Gt,cY as Wt,cZ as Ht,co as L,bf as ot,c_ as Ut,bi as Xt,b7 as Yt,c$ as Kt,Z as $,b0 as Vt,d0 as Zt,bd as qt,d1 as E,d2 as Jt,d3 as Qt,bv as V}from"./ndmvr-aframe-core-Cw91_9_Y.js";const lt=1,dt=3;class U extends _t{#i;#s;constructor(t,e,i,s){super(t,e,i),this.csstype=s}addToPadPrimitives(t){const e=super.addToPadPrimitives(t);return e&&!this.rstyle&&e.next_rstyle&&(this.rstyle=e.next_rstyle),e}v7EvalAttr(t,e){const i=this.getObject();if(!i)return e;this.cssprefix&&(t=this.cssprefix+t);const s=a=>{if(e===void 0)return a;const r=typeof e,n=typeof a;return r===n?a:r==="boolean"?n==="string"?a!==""&&a!=="0"&&a!=="no"&&a!=="off":!!a:r==="number"&&n==="string"?parseFloat(a):a};if(i.fAttr?.m){const a=i.fAttr.m[t];if(a)return s(a.v)}if(this.rstyle?.fBlocks){const a=this.rstyle.fBlocks;for(let r=0;r<a.length;++r){const n=a[r];if((this.csstype&&n.selector===this.csstype||i.fId&&n.selector==="#"+i.fId||i.fCssClass&&n.selector==="."+i.fCssClass)&&n.map?.m){const o=n.map.m[t.toLowerCase()];if(o)return s(o.v)}}}return e}v7SetAttr(t,e){const i=this.getObject();this.cssprefix&&(t=this.cssprefix+t),i?.fAttr?.m&&(i.fAttr.m[t]={v:e})}v7EvalLength(t,e,i){e<=0&&(e=1);const s=this.v7EvalAttr(t);if(s===void 0)return Math.round(i*e);if(typeof s=="number")return Math.round(s*e);if(s===null)return 0;let a=0,r=0,n=s,h=0,o=0;for(;n;){for(;o<n.length&&(n[o]===" "||n[o]===" ");)++o;if(o>=n.length)break;if(n[o]==="-"||n[o]==="+"){if(h)return console.log(`Fail to parse RPadLength ${s}`),i;h=n[o]==="-"?-1:1,o++;continue}for(o>0&&(n=n.slice(o),o=0);o<n.length&&(n[o]>="0"&&n[o]<="9"||n[o]===".");)o++;const d=parseFloat(n.slice(0,o));if(!Number.isFinite(d))return console.log(`Fail to parse RPadLength ${s}`),Math.round(i*e);n=n.slice(o),o=0,h||(h=1),n&&n[0]==="%"?(n=n.slice(1),a+=h*d*.01):n.length>1&&n[0]==="p"&&n[1]==="x"?(n=n.slice(2),r+=h*d):a+=h*d,h=0}return Math.round(a*e+r)}v7EvalColor(t,e){let i=this.v7EvalAttr(t,"");if(!i||!S(i))return e;if(i==="auto"){const s=this.getPadPainter();s?(i=s.getAutoColor(),this.#s||(this.#s={}),this.#s[t]=i):this.#s&&this.#s[t]?i=this.#s[t]:(console.error(`Autocolor ${t} not defined yet - please check code`),i="")}else if(i[0]==="["){const s=parseFloat(i.slice(1,i.length-1));if(i="black",Number.isFinite(s)){const a=this.getPadPainter()?.getHistPalette();a&&(i=a.getColorOrdinal(s))}}if(i[0]==="#"&&(q()||Z()&&y.ApproxTextSize)){const s=pt(i);return s.opacity!==1&&(s.opacity=s.opacity.toFixed(2)),s.formatRgb()}return i}v7EvalFont(t,e,i){e?typeof e=="number"&&(e={size:e}):e={};const s=this.getPadPainter(),a=s?._dfltRFont||{fFamily:"Arial",fStyle:"",fWeight:""},r=this.v7EvalAttr(t+"_angle",0),n=this.v7EvalAttr(t+"_align",e.align||"none"),h=this.v7EvalColor(t+"_color",e.color||"none"),o=this.v7EvalAttr(t+"_font_family",a.fFamily||"Arial"),d=this.v7EvalAttr(t+"_font_style",a.fStyle||""),c=this.v7EvalAttr(t+"_font_weight",a.fWeight||"");let l=this.v7EvalAttr(t+"_size",e.size||12);S(l)&&(l=parseFloat(l)),(!Number.isFinite(l)||l<=0)&&(l=12),i||(i=s?.getPadHeight()||100);const f=new xt(null,l,i);return f.setNameStyleWeight(o,d,c),r&&f.setAngle(360-r),n!=="none"&&f.setAlign(n),h!=="none"&&f.setColor(h),f}createv7AttFill(t){(!t||!S(t))&&(t="fill_");const e=this.v7EvalColor(t+"color",""),i=this.v7EvalAttr(t+"style",0);this.createAttFill({pattern:i,color:e,color_as_svg:!0})}createv7AttLine(t){(!t||!S(t))&&(t="line_");const e=this.v7EvalColor(t+"color","black"),i=this.v7EvalAttr(t+"width",1),s=this.v7EvalAttr(t+"style",1);let a=this.v7EvalAttr(t+"pattern");a&&q()&&(a=a.split(",").join(", ")),this.createAttLine({color:e,width:i,style:s,pattern:a}),t==="border_"&&this.lineatt.setBorder(this.v7EvalAttr(t+"rx",0),this.v7EvalAttr(t+"ry",0))}createv7AttMarker(t){(!t||!S(t))&&(t="marker_");const e=this.v7EvalColor(t+"color","black"),i=this.v7EvalAttr(t+"size",.01),s=this.v7EvalAttr(t+"style",1),a=i>=1?1:this.getPadPainter()?.getPadHeight()||100;this.createAttMarker({color:e,size:i,style:s,refsize:a})}v7AttrChange(t,e,i,s){if(!this.getSnapId())return!1;if(t._typename||(t._typename=`${C}RChangeAttrRequest`,t.ids=[],t.names=[],t.values=[],t.update=!0),this.cssprefix&&(e=this.cssprefix+e),t.ids.push(this.getSnapId()),t.names.push(e),i==null&&(s||(s="none"),s!=="none"&&console.error(`Trying to set ${s} for none value`)),!s)switch(typeof i){case"number":s="double";break;case"boolean":s="boolean";break}const a={_typename:`${C}RAttrMap::`};switch(s){case"none":a._typename+="NoValue_t";break;case"boolean":a._typename+="BoolValue_t",a.v=!!i;break;case"int":a._typename+="IntValue_t",a.v=parseInt(i);break;case"double":a._typename+="DoubleValue_t",a.v=parseFloat(i);break;default:a._typename+="StringValue_t",a.v=S(i)?i:JSON.stringify(i);break}return t.values.push(a),!0}v7SendAttrChanges(t,e){const i=this.getCanvPainter();i&&t?._typename&&(e!==void 0&&(t.update=!!e),i.v7SubmitRequest("",t))}v7SubmitRequest(t,e,i){const s=this.getCanvPainter();return p(s?.submitDrawableRequest)?this.getSnapId()?s.submitDrawableRequest(t,e,this,i):(this.#i={kind:t,req:e,method:i},e):null}assignSnapId(t){if(super.assignSnapId(t),this.getSnapId()&&this.#i){const e=this.#i;this.#i=void 0,this.v7SubmitRequest(e.kind,e.req,e.method)}}v7CommMode(){const t=this.getCanvPainter();return!t||!t.submitDrawableRequest||!t.getWebsocket()?dt:lt}v7NormalMode(){return this.v7CommMode()===lt}v7OfflineMode(){return this.v7CommMode()===dt}}class T extends U{constructor(t,e,i,s){const a=s?e.getObject():e;super(t,a,"",s?e.csstype:"axis"),Object.assign(this,vt),this.initAxisPainter(),this.axis=i,s?(this.embedded=!0,this.cssprefix=s,this.rstyle=e.rstyle):this.cssprefix="axis_"}cleanup(){delete this.axis,delete this.axis_g,this.cleanupAxisPainter(),super.cleanup()}getAxisType(){return"RAttrAxis"}configureZAxis(t,e){this.name=t,this.kind=D,this.log=!1;const i=this.v7EvalAttr("log",0);i&&(this.log=!0,this.logbase=10,Math.abs(i-Math.exp(1))<.1?this.logbase=Math.exp(1):i>1.9&&(this.logbase=Math.round(i))),e.logz=this.log}configureAxis(t,e,i,s,a,r,n,h,o){o||(o={}),this.name=t,this.full_min=e,this.full_max=i,this.kind=D,this.vertical=r,this.log=!1;const d=this.v7EvalAttr("log",0),c=this.v7EvalAttr("symlog",0);if(this.reverse=o.reverse||!1,this.v7EvalAttr("time")){this.kind=I,this.timeoffset=0;let m=this.v7EvalAttr("timeOffset");m!==void 0&&(m=parseFloat(m),Number.isFinite(m)&&(this.timeoffset=m*1e3))}else this.axis?.fLabelsIndex?(this.kind=F,delete this.own_labels):o.labels?this.kind=F:this.kind=D;this.kind===I?this.func=yt().domain([this.convertDate(s),this.convertDate(a)]):c&&c>0?(this.symlog=c,this.func=bt().constant(c).domain([s,a])):d?(a<=0&&(a=1),(s<=0||s>=a)&&(s=a*1e-4),this.log=!0,this.logbase=10,Math.abs(d-Math.exp(1))<.1?this.logbase=Math.exp(1):d>1.9&&(this.logbase=Math.round(d)),this.func=wt().base(this.logbase).domain([s,a])):this.func=Pt().domain([s,a]),this.scale_min=s,this.scale_max=a,this.gr_range=h||1e3;const l=n??[0,this.gr_range];this.axis_shift=l[1]-this.gr_range,this.reverse?this.func.range([l[1],l[0]]):this.func.range(l),this.kind===I?this.gr=m=>this.func(this.convertDate(m)):this.log?this.gr=m=>m<this.scale_min?this.vertical?this.func.range()[0]+5:-5:this.func(m):this.gr=this.func,delete this.format;const f=this.v7EvalAttr("ndiv",508);this.nticks=f%100,this.nticks2=(f%1e4-this.nticks)/100,this.nticks3=Math.floor(f/1e4),this.nticks=Math.min(this.nticks,20);const g=Math.abs(this.gr_range)||100;if(this.kind===I){this.nticks=Math.min(this.nticks,8);const m=this.scale_max-this.scale_min,v=J(m/g,!1);let x=this.v7EvalAttr("timeFormat","");(!x||m<.1*(this.full_max-this.full_min))&&(x=J(m/this.nticks,!0)),this.tfunc1=this.tfunc2=Q(x),v!==x&&(this.tfunc2=Q(v)),this.format=this.formatTime}else if(this.log)this.nticks2>1&&(this.nticks*=this.nticks2,this.nticks2=1),this.noexp=this.v7EvalAttr("noexp",!1),this.scale_max<300&&this.scale_min>.3&&this.logbase===10&&(this.noexp=!0),this.moreloglabels=this.v7EvalAttr("moreloglbls",!1),this.format=this.formatLog;else if(this.kind===F){this.nticks=50;const m=this.scale_max-this.scale_min;this.nticks>m&&(this.nticks=Math.round(m)),this.nticks2=1,this.format=this.formatLabels}else this.order=0,this.ndig=0,this.format=this.formatNormal}getScaleMin(){return this.func?this.func.domain()[0]:0}getScaleMax(){return this.func?this.func.domain()[1]:0}formatLabels(t){const e=Math.round(t);if(this.axis?.fLabelsIndex){if(e<0||e>=this.axis.fNBinsNoOver)return null;for(let i=0;i<this.axis.fLabelsIndex.length;++i){const s=this.axis.fLabelsIndex[i];if(s.second===e)return s.first}}else{const i=this.getObject().fLabels;if(i&&e>=0&&e<i.length)return i[e]}return null}createTicks(t,e,i,s){i&&this.nticks&&this.kind===D&&(this.noticksopt=!0);const a=this.produceTicks(this.nticks),r={nminor:0,nmiddle:0,nmajor:0,func:this.func,minor:a,middle:a,major:a};if(t){const n=r.major,h=(this.scale_max-this.scale_min)*1e-5;return n.at(0)>this.scale_min+h&&n.unshift(this.scale_min),n.at(-1)<this.scale_max-h&&n.push(this.scale_max),n}if(this.nticks2>1&&(!this.log||this.logbase===10)){r.minor=r.middle=this.produceTicks(r.major.length,this.nticks2);const n=Math.abs(this.func.range()[1]-this.func.range()[0]);r.middle.length<=r.major.length||r.middle.length>n?r.minor=r.middle=r.major:this.nticks3>1&&!this.log&&(r.minor=this.produceTicks(r.middle.length,this.nticks3),(r.minor.length<=r.middle.length||r.minor.length>n)&&(r.minor=r.middle))}if(r.reset=function(){this.nminor=this.nmiddle=this.nmajor=0},r.next=function(n){return this.nminor>=this.minor.length?!1:(this.tick=this.minor[this.nminor++],this.grpos=this.func(this.tick),n&&(this.grpos=Math.round(this.grpos)),this.kind=3,this.nmiddle<this.middle.length&&Math.abs(this.grpos-this.func(this.middle[this.nmiddle]))<1&&(this.nmiddle++,this.kind=2),this.nmajor<this.major.length&&Math.abs(this.grpos-this.func(this.major[this.nmajor]))<1&&(this.nmajor++,this.kind=1),!0)},r.last_major=function(){return this.kind!==1?!1:this.nmajor===this.major.length},r.next_major_grpos=function(){return this.nmajor>=this.major.length?null:this.func(this.major[this.nmajor])},r.get_modifier=function(){return null},this.order=0,this.ndig=0,this.kind===D&&!this.log&&r.major.length){let n=0,h=0,o=!1;if(!e){const f=Math.max(Math.abs(r.major.at(0)),Math.abs(r.major.at(-1))),g=Math.min(Math.abs(r.major.at(0)),Math.abs(r.major.at(-1))),m=f>0?Math.round(Math.log10(f)/3)*3:0,v=g>0?Math.round(Math.log10(g)/3)*3:0;o=f<2e4,(f||g)&&(n=Math.max(m,v)+3,h=Math.min(m,v)-3)}let d=0,c=this.ndig,l=1e10;for(let f=h;f<=n;f+=3){if(o&&f===3)continue;this.order=f,this.ndig=0;let g=[],m=0,v=0;for(;m<r.major.length;){const x=r.major[m],P=this.format(x,!0);let _=g.indexOf(P)>=0;if(!_)try{const w=parseFloat(P)*Math.pow(10,f);_=Math.abs(x)>1e-30&&Math.abs(w-x)/Math.abs(x)>1e-8}catch{console.warn("Failure by parsing of",P),_=!0}if(_){if(++this.ndig>15){v+=1e10;break}g=[],m=v=0}else g.push(P),v+=P.length,m++}!f&&this.ndig<4&&(v-=r.major.length*2+3),v<l&&(l=v,d=this.order,c=this.ndig)}this.order=d,this.ndig=c,s&&(this.order&&console.warn(`Axis painter - integer labels are configured, but axis order ${this.order} is preferable`),this.ndig&&console.warn(`Axis painter - integer labels are configured, but ${this.ndig} decimal digits are required`),this.ndig=0,this.order=0)}return r}isCenteredLabels(){return this.kind===F?!0:this.kind==="log"?!1:this.v7EvalAttr("labels_center",!1)}isRotateLabels(){return!1}processLabelsMove(t,e){if(this.optionUnlab||!this.axis_g)return!1;const i=this.axis_g.select(".axis_labels");if(!i||i.size()!==1)return!1;if(t==="start"){const a=i.node().getBBox();return i.append("rect").classed("drag",!0).attr("x",a.x).attr("y",a.y).attr("width",a.width).attr("height",a.height).style("cursor","move").call(tt,!0),this.vertical?this.drag_pos0=e[0]:this.drag_pos0=e[1],!0}let s=i.property("fix_offset");if(this.vertical?(s+=Math.round(e[0]-this.drag_pos0),z(i,s)):(s+=Math.round(e[1]-this.drag_pos0),z(i,0,s)),s||z(i),t==="stop"&&(i.select("rect.drag").remove(),delete this.drag_pos0,s!==i.property("fix_offset"))){i.property("fix_offset",s);const a=i.property("side")||1;this.labelsOffset=s/(this.vertical?-a:a),this.changeAxisAttr(1,"labels_offset",this.labelsOffset/this.scalingSize)}return!0}addTitleDrag(t,e){if(!y.MoveResize||this.isBatchMode())return;let i=null,s,a,r,n,h,o;const d=Ct().subject(Object);d.on("start",c=>{c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation();const l=t.node().getBBox(),f=this.vertical?l.height:l.width;r=s=t.property("shift_x"),n=a=t.property("shift_y"),this.titlePos==="center"?o=1:o=this.titlePos==="left"?0:2,h=[0,this.gr_range/2,this.gr_range];const g=this.vertical?-f:f,m=this.isReverseAxis()?2:0;this.title_align==="middle"?(h[m]+=g/2,h[2-m]-=g/2):this.title_align==="begin"^this.isTitleRotated()?(h[1]-=g/2,h[2-m]-=g):(h[m]+=g,h[1]+=g/2),h[o]=this.vertical?a:s,i=t.append("rect").attr("x",l.x).attr("y",l.y).attr("width",l.width).attr("height",l.height).style("cursor","move").call(tt,!0)}).on("drag",c=>{if(!i)return;c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation(),s+=c.dx,a+=c.dy;const l=this.vertical?a:s;let f,g,m=0;for(let v=1;v<3;++v)Math.abs(l-h[v])<Math.abs(l-h[m])&&(m=v);this.vertical?(f=s,g=h[m]):(f=h[m],g=a),r=f,n=g,o=m,z(t,r,n)}).on("end",c=>{if(!i)return;c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation();const l=t.property("basepos")||0;t.property("shift_x",r).property("shift_y",n),this.titleOffset=(this.vertical?l-r:n-l)*e,o===1?this.titlePos="center":o===0?this.titlePos="left":this.titlePos="right",this.changeAxisAttr(0,"title_position",this.titlePos,"title_offset",this.titleOffset/this.scalingSize),i.remove(),i=null}),t.style("cursor","move").call(d)}isInsideGrRange(t,e,i){return e||(e=0),i===void 0&&(i=e),this.gr_range<0?t>=this.gr_range-i&&t<=e:t>=-e&&t<=this.gr_range+i}getGrRange(t){return t||(t=0),this.gr_range<0?this.gr_range-t:this.gr_range+t}isReverseAxis(){return!this.vertical!=this.getGrRange()>0}drawMainLine(t){let e="";if(this.endingSize&&this.endingStyle){let i=this.gr_range>0?-this.endingSize:this.endingSize;const s=Math.round(i*.7);i=Math.round(i),this.vertical?e=`l${s},${i}M0,${this.gr_range}l${-s},${i}`:e=`l${i},${s}M${this.gr_range},0l${i},${-s}`}t.append("svg:path").attr("d","M0,0"+(this.vertical?"v":"h")+this.gr_range+e).call(this.lineatt.func).style("fill",e?"none":null)}drawTicks(t,e,i){i&&(this.ticks=[]),this.handle.reset();let s="",a=0;for(this.ticksSide==="both"&&(e=1,a=1);this.handle.next(!0);){let h=Math.round(this.ticksSize/4),o;this.handle.kind<3&&(h=Math.round(this.ticksSize/2));const d=this.handle.grpos-this.axis_shift;(this.startingSize||this.endingSize)&&!this.isInsideGrRange(d,-Math.abs(this.startingSize),-Math.abs(this.endingSize))||(this.handle.kind===1&&((this.kind===F||this.format(this.handle.tick,!0)!==null)&&(h=this.ticksSize),i&&this.ticks.push(d)),a>0?o=-h:e<0?(o=-h,h=0):o=0,s+=this.vertical?`M${h},${d}H${o}`:`M${d},${-h}V${-o}`)}s&&t.append("svg:path").attr("d",s).style("stroke",this.ticksColor||this.lineatt.color).style("stroke-width",!this.ticksWidth||this.ticksWidth===1?null:this.ticksWidth);const r=Math.round(.25*this.ticksSize),n=Math.round(1.25*this.ticksSize);return{"-1":e>0||a?n:r,1:e<0||a?n:r}}async drawLabels(t,e,i){const s=this.isCenteredLabels(),a=!!this.labelsFont.angle,r=t.append("svg:g").attr("class","axis_labels").property("side",e),n=this.handle.lbl_pos||this.handle.major;let h=1,o=0,d=!1,c=0,l=0;function f(x){c=Math.max(c,this.result_width),l=Math.max(l,this.result_height);const P=this.result_width;if(P&&(!x.vertical&&!a||x.vertical&&a)&&!x.log){const w=this.gap_before?this.gap_after?this.gap_before*.45+this.gap_after*.45:.9*this.gap_before:.9*this.gap_after;h=Math.min(h,w/P)}h>1e-4&&h<.8&&!x.vertical&&!a&&o>5&&e>0&&(d=!0);const _=h*(d?3:1);_>1e-4&&_<1&&x.scaleTextDrawing(1/_,r)}const g=Math.round((this.vertical?-e:e)*this.labelsOffset),m=Math.round((this.vertical?-e:e)*i[e]);let v=0;return g&&z(r,this.vertical?g:0,this.vertical?0:g),r.property("fix_offset",g),this.startTextDrawingAsync(this.labelsFont,"font",r).then(()=>{for(let x=0;x<n.length;++x){const P=this.format(n[x],!0);if(P===null)continue;const _={text:P,latex:1,draw_g:r};let w=Math.round(this.func(n[x]));if(_.gap_before=x>0?Math.abs(Math.round(w-this.func(n[x-1]))):0,_.gap_after=x<n.length-1?Math.abs(Math.round(this.func(n[x+1])-w)):0,s){const b=_.gap_after||_.gap_before;if(w=Math.round(w-(this.vertical?.5*b:-.5*b)),!this.isInsideGrRange(w,5))continue}if(o=Math.max(o,P.length),w-=this.axis_shift,!((this.startingSize||this.endingSize)&&!this.isInsideGrRange(w,-Math.abs(this.startingSize),-Math.abs(this.endingSize)))){if(this.vertical?(_.x=m,_.y=w,_.align=a?e<0?23:20:e<0?12:32):(_.x=w,_.y=m,_.align=a?e<0?12:32:e<0?20:23,this.log&&!this.noexp&&!this.vertical&&_.align===23&&(_.align=21,_.y+=this.labelsFont.size)),_.post_process=f,this.drawText(_),v&&w!==v&&(this.vertical&&!a||!this.vertical&&a)){const b=Math.abs(w-v);h=Math.min(h,.9*b/this.labelsFont.size)}v=w}}return this.order&&this.drawText({x:this.vertical?e*5:this.getGrRange(5),y:this.has_obstacle?m:this.vertical?this.getGrRange(3):-3*e,align:this.vertical?e<0?30:10:this.has_obstacle^e<0?13:10,latex:1,text:"#times"+this.formatExp(10,this.order),draw_g:r}),this.finishTextDrawing(r)}).then(()=>{if(d&&r.selectAll("text").each(function(){const x=M(this),P=x.attr("transform");x.attr("transform",P+" rotate(25)").style("text-anchor","start")}),this.vertical)i[e]+=Math.round(a?1.2*l:c+.4*this.labelsFont.size)-e*g;else{const x=d?c*Math.sin(.1388888888888889*Math.PI)+l*(Math.cos(.1388888888888889*Math.PI)+.2):0;i[e]+=Math.round(Math.max(a?c+.4*this.labelsFont.size:1.2*l,1.2*this.labelsFont.size,x))+g}return i})}addZoomingRect(t,e,i){if(y.Zooming&&!this.disable_zooming&&!this.isBatchMode()){const s=Math.max(i[e],10),a=this.vertical?`v${this.gr_range}h${-e*s}v${-this.gr_range}`:`h${this.gr_range}v${e*s}h${-this.gr_range}`;t.append("svg:path").attr("d",`M0,0${a}z`).attr("class","axis_zoom").style("opacity","0").style("cursor","crosshair")}}isTitleRotated(){return this.titleFont&&this.titleFont.angle!==(this.vertical?270:0)}async drawTitle(t,e,i){if(!this.fTitle)return this;const s=t.append("svg:g").attr("class","axis_title"),a=this.isTitleRotated();return this.startTextDrawingAsync(this.titleFont,"font",s).then(()=>{let r,n,h;return this.title_align=this.titleCenter?"middle":this.titleOpposite^(this.isReverseAxis()||a)?"begin":"end",this.vertical?(h=Math.round(-e*i[e]),r=h+Math.round(-e*this.titleOffset),n=Math.round(this.titleCenter?this.gr_range/2:this.titleOpposite?0:this.gr_range),this.drawText({align:[this.title_align,e<0^a?"top":"bottom"],text:this.fTitle,draw_g:s})):(r=Math.round(this.titleCenter?this.gr_range/2:this.titleOpposite?0:this.gr_range),h=Math.round(e*i[e]),n=h+Math.round(e*this.titleOffset),this.drawText({align:[this.title_align,e>0^a?"top":"bottom"],text:this.fTitle,draw_g:s})),z(s,r,n).property("basepos",h).property("shift_x",r).property("shift_y",n),this.addTitleDrag(s,e),this.finishTextDrawing(s)})}extractDrawAttributes(t){const e=this.getPadPainter(),i=e?.getPadRect()||{width:10,height:10};this.scalingSize=t||(this.vertical?i.width:i.height),this.createv7AttLine("line_"),this.optionUnlab=this.v7EvalAttr("labels_hide",!1),this.endingStyle=this.v7EvalAttr("ending_style",""),this.endingSize=Math.round(this.v7EvalLength("ending_size",this.scalingSize,this.endingStyle?.02:0)),this.startingSize=Math.round(this.v7EvalLength("starting_size",this.scalingSize,0)),this.ticksSize=this.v7EvalLength("ticks_size",this.scalingSize,.02),this.ticksSide=this.v7EvalAttr("ticks_side","normal"),this.ticksColor=this.v7EvalColor("ticks_color",""),this.ticksWidth=this.v7EvalAttr("ticks_width",1),t&&this.ticksSize<0&&(this.ticksSize=-this.ticksSize),this.fTitle=this.v7EvalAttr("title_value",""),this.fTitle?(this.titleFont=this.v7EvalFont("title",{size:.03},t||e?.getPadHeight()||10),this.titleFont.roundAngle(180,this.vertical?270:0),this.titleOffset=this.v7EvalLength("title_offset",this.scalingSize,0),this.titlePos=this.v7EvalAttr("title_position","right"),this.titleCenter=this.titlePos==="center",this.titleOpposite=this.titlePos==="left"):(delete this.titleFont,delete this.titleOffset,delete this.titlePos),this.labelsFont=this.v7EvalFont("labels",{size:t?.05:.03}),this.labelsFont.roundAngle(180),this.labelsFont.angle&&(this.labelsFont.angle=270),this.labelsOffset=this.v7EvalLength("labels_offset",this.scalingSize,0),t&&(this.ticksSize=this.labelsFont.size*.5),this.maxTickSize&&this.ticksSize>this.maxTickSize&&(this.ticksSize=this.maxTickSize)}async drawAxis(t,e,i){let s=t;i===void 0&&(i=1),this.standalone||(s=t.selectChild(`.${this.name}_container`),s.empty()?s=t.append("svg:g").attr("class",`${this.name}_container`):s.selectAll("*").remove()),s.attr("transform",e),this.extractDrawAttributes(),this.axis_g=s,this.side=i,this.ticksSide==="invert"&&(i=-i),this.standalone&&this.drawMainLine(s);const a=!1,r=!1,n=!1;this.handle=this.createTicks(!1,n,a,r);const h=this.drawTicks(s,i,!0);return(this.optionUnlab?Promise.resolve(h):this.drawLabels(s,i,h)).then(d=>(this.addZoomingRect(s,this.standalone?i:this.side,d),this.drawTitle(s,i,d)))}setAfterDrawHandler(t){this._afterDrawAgain=t}drawAxisAgain(){if(!this.axis_g||!this.side)return;this.axis_g.selectAll("*").remove(),this.extractDrawAttributes();let t=this.side;this.ticksSide==="invert"&&(t=-t),this.standalone&&this.drawMainLine(this.axis_g);const e=this.drawTicks(this.axis_g,t,!1);return(this.optionUnlab?Promise.resolve(e):this.drawLabels(this.axis_g,t,e)).then(s=>(this.addZoomingRect(this.axis_g,this.standalone?t:this.side,s),this.drawTitle(this.axis_g,t,s))).then(()=>{p(this._afterDrawAgain)&&this._afterDrawAgain()})}drawAxisOtherPlace(t,e,i,s){let a=t.selectChild(`.${this.name}_container2`);a.empty()?a=t.append("svg:g").attr("class",`${this.name}_container2`):a.selectAll("*").remove(),a.attr("transform",e),this.ticksSide==="invert"&&(i=-i);const r=this.drawTicks(a,i,!1);return(this.optionUnlab||s?Promise.resolve(r):this.drawLabels(a,i,r)).then(h=>(this.addZoomingRect(a,i,h),!0))}zoomStandalone(t,e){return this.changeAxisAttr(1,"zoomMin",t,"zoomMax",e)}redraw(){const t=this.getObject(),e=this.getPadPainter(),i=e.getCoordinate(t.fPos),s=this.v7EvalAttr("reverse",!1),a=t.fLabels.length,r=a>0?0:this.v7EvalAttr("min",0),n=a>0?a:this.v7EvalAttr("max",100);let h=e.getPadLength(t.fVertical,t.fLength),o=this.v7EvalAttr("zoomMin"),d=this.v7EvalAttr("zoomMax");t.fVertical&&(h-=e.getPadHeight()),o===d&&(o=r,d=n),this.configureAxis("axis",r,n,o,d,t.fVertical,void 0,h,{reverse:s,labels:a>0});const c=this.createG();this.standalone=!0;const l=this.drawAxis(c,z(i.x,i.y));return this.isBatchMode()?l:l.then(()=>{y.ContextMenu&&c.on("contextmenu",f=>{f.stopPropagation(),f.preventDefault(),N(f,this).then(g=>{g.header("RAxisDrawable",`${G}ROOT_1_1Experimental_1_1RAxisBase.html`),g.add("Unzoom",()=>this.zoomStandalone()),this.fillAxisContextMenu(g,""),g.show()})}),ct(this,{x:i.x,y:i.y,width:this.vertical?10:h,height:this.vertical?h:10,only_move:!0,redraw:f=>this.positionChanged(f)}),c.on("dblclick",()=>this.zoomStandalone()),y.ZoomWheel&&c.on("wheel",f=>{f.stopPropagation(),f.preventDefault();const g=ft(f,this.getG().node()),m=this.vertical?1-g[1]/h:g[0]/h,v=this.analyzeWheelEvent(f,m);v.changed&&this.zoomStandalone(v.min,v.max)})})}positionChanged(t){const e=this.getObject(),i=this.getPadPainter().getPadRect(),s=t.x/i.width,a=1-t.y/i.height;e.fPos.fHoriz.fArr=[s],e.fPos.fVert.fArr=[a],this.submitCanvExec(`SetPos({${s.toFixed(4)},${a.toFixed(4)}})`)}changeAxisAttr(t,...e){const i={};let s=0;for(;s<e.length;)this.v7AttrChange(i,e[s],e[s+1]),this.v7SetAttr(e[s],e[s+1]),s+=2;this.v7SendAttrChanges(i,!1),t===1?this.standalone?this.redraw():this.drawAxisAgain():t&&this.redrawPad()}changeAxisLog(t){this.kind===F||this.kind===I||(t==="toggle"&&(t=this.log?0:10),t=parseFloat(t),Number.isFinite(t)&&this.changeAxisAttr(2,"log",t,"symlog",0))}fillAxisContextMenu(t,e){return e&&t.add("Unzoom",()=>this.getFramePainter().unzoom(e)),t.sub("Log scale",()=>this.changeAxisLog("toggle")),t.addchk(!this.log&&!this.symlog,"linear",0,i=>this.changeAxisLog(i)),t.addchk(this.log&&!this.symlog&&this.logbase===10,"log10",()=>this.changeAxisLog(10)),t.addchk(this.log&&!this.symlog&&this.logbase===2,"log2",()=>this.changeAxisLog(2)),t.addchk(this.log&&!this.symlog&&Math.abs(this.logbase-Math.exp(1))<.1,"ln",()=>this.changeAxisLog(Math.exp(1))),t.addchk(!this.log&&this.symlog,"symlog",0,()=>t.input("set symlog constant",this.symlog||10,"float").then(i=>this.changeAxisAttr(2,"symlog",i))),t.endsub(),t.add("Divisions",()=>t.input("Set axis devisions",this.v7EvalAttr("ndiv",508),"int").then(i=>this.changeAxisAttr(2,"ndiv",i))),t.sub("Ticks"),t.addRColorMenu("color",this.ticksColor,i=>this.changeAxisAttr(1,"ticks_color",i)),t.addSizeMenu("size",0,.05,.01,this.ticksSize/this.scalingSize,i=>this.changeAxisAttr(1,"ticks_size",i)),t.addSelectMenu("side",["normal","invert","both"],this.ticksSide,i=>this.changeAxisAttr(1,"ticks_side",i)),t.endsub(),!this.optionUnlab&&this.labelsFont&&(t.sub("Labels"),t.addSizeMenu("offset",-.05,.05,.01,this.labelsOffset/this.scalingSize,i=>this.changeAxisAttr(1,"labels_offset",i)),t.addRAttrTextItems(this.labelsFont,{noangle:1,noalign:1},i=>this.changeAxisAttr(1,"labels_"+i.name,i.value)),t.addchk(this.labelsFont.angle,"rotate",i=>this.changeAxisAttr(1,"labels_angle",i?180:0)),t.endsub()),t.sub("Title",()=>t.input("Enter axis title",this.fTitle).then(i=>this.changeAxisAttr(1,"title_value",i))),this.fTitle&&(t.addSizeMenu("offset",-.05,.05,.01,this.titleOffset/this.scalingSize,i=>this.changeAxisAttr(1,"title_offset",i)),t.addSelectMenu("position",["left","center","right"],this.titlePos,i=>this.changeAxisAttr(1,"title_position",i)),t.addchk(this.isTitleRotated(),"rotate",i=>this.changeAxisAttr(1,"title_angle",i?180:0)),t.addRAttrTextItems(this.titleFont,{noangle:1,noalign:1},i=>this.changeAxisAttr(1,"title_"+i.name,i.value))),t.endsub(),!0}}class te extends U{#i;#s;#e;#t;#m;#a;#c;#o;#n;#r;#f;#l;#h;#d;#g;constructor(t,e){super(t,e,"","frame"),this.mode3d=!1,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.#n=!1,this.#r=0,this.v7_frame=!0}getFramePainter(){return this}is_root6(){return!1}setFrameActive(t){this.#d=t&&y.HandleKeys,this.control&&(this.control.enableKeys=this.#d)}isEnabledKeys(){return this.#d}swap_xy(){return this.#a}reverse_x(){return this.#c}reverse_y(){return this.#o}setLastEventPos(t){this.#g=t}getLastEventPos(){return this.#g}updateAttributes(t){if(this.fX1NDC===void 0||t&&!this.$modifiedNDC){const e=this.getPadPainter().getPadRect();this.fX1NDC=this.v7EvalLength("margins_left",e.width,A.fPadLeftMargin)/e.width,this.fY1NDC=this.v7EvalLength("margins_bottom",e.height,A.fPadBottomMargin)/e.height,this.fX2NDC=1-this.v7EvalLength("margins_right",e.width,A.fPadRightMargin)/e.width,this.fY2NDC=1-this.v7EvalLength("margins_top",e.height,A.fPadTopMargin)/e.height}this.fillatt||this.createv7AttFill(),this.createv7AttLine("border_")}getProjectionFunc(){return zt(this.#r)}recalculateRange(t){this.#r=t||0,this.#r===2&&(this.scale_ymin<=-90||this.scale_ymax>=90)&&(console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`),this.#r=0);const e=this.getProjectionFunc();if(!e)return;const i=[e(this.scale_xmin,this.scale_ymin),e(this.scale_xmin,this.scale_ymax),e(this.scale_xmax,this.scale_ymax),e(this.scale_xmax,this.scale_ymin)];this.scale_xmin<0&&this.scale_xmax>0&&(i.push(e(0,this.scale_ymin)),i.push(e(0,this.scale_ymax))),this.scale_ymin<0&&this.scale_ymax>0&&(i.push(e(this.scale_xmin,0)),i.push(e(this.scale_xmax,0))),this.original_xmin=this.scale_xmin,this.original_xmax=this.scale_xmax,this.original_ymin=this.scale_ymin,this.original_ymax=this.scale_ymax,this.scale_xmin=this.scale_xmax=i[0].x,this.scale_ymin=this.scale_ymax=i[0].y;for(let s=1;s<i.length;++s)this.scale_xmin=Math.min(this.scale_xmin,i[s].x),this.scale_xmax=Math.max(this.scale_xmax,i[s].x),this.scale_ymin=Math.min(this.scale_ymin,i[s].y),this.scale_ymax=Math.max(this.scale_ymax,i[s].y)}getFrameSvg(){return this.getPadPainter().getFrameSvg()}drawGrids(){const t=this.getFrameSvg().selectChild(".axis_layer");t.selectAll(".xgrid").remove(),t.selectAll(".ygrid").remove();const e=this.getFrameHeight(),i=this.getFrameWidth(),s=this.v7EvalAttr("gridX",!1),a=this.v7EvalAttr("gridY",!1),r=St(A.fGridStyle),n=A.fGridColor>0?this.getColor(A.fGridColor):"black";if(this.x_handle&&(this.x_handle.draw_grid=s),this.x_handle?.draw_grid){let h="";for(let o=0;o<this.x_handle.ticks.length;++o)h+=this.#a?`M0,${e+this.x_handle.ticks[o]}h${i}`:`M${this.x_handle.ticks[o]},0v${e}`;h&&t.append("svg:path").attr("class","xgrid").attr("d",h).style("stroke",n).style("stroke-width",A.fGridWidth).style("stroke-dasharray",r)}if(this.y_handle&&(this.y_handle.draw_grid=a),this.y_handle?.draw_grid){let h="";for(let o=0;o<this.y_handle.ticks.length;++o)h+=this.#a?`M${this.y_handle.ticks[o]},0v${e}`:`M0,${e+this.y_handle.ticks[o]}h${i}`;h&&t.append("svg:path").attr("class","ygrid").attr("d",h).style("stroke",n).style("stroke-width",A.fGridWidth).style("stroke-dasharray",r)}}axisAsText(t,e){const i=this[`${t}_handle`];return i?i.axisAsText(e,y[t.toUpperCase()+"ValuesFormat"]):e.toPrecision(4)}_setAxisRange(t,e,i){const s=`${t}min`,a=`${t}max`;if(this[s]!==this[a])return;let r=this.v7EvalAttr(`${t}_min`),n=this.v7EvalAttr(`${t}_max`);r!==void 0&&(e=r),n!==void 0&&(i=n),e<i&&(this[s]=e,this[a]=i);const h=`zoom_${t}min`,o=`zoom_${t}max`;this[h]===this[o]&&!this.zoomChangedInteractive(t)&&(r=this.v7EvalAttr(`${t}_zoomMin`),n=this.v7EvalAttr(`${t}_zoomMax`),(r!==void 0||n!==void 0)&&(this[h]=r===void 0?this[s]:r,this[o]=n===void 0?this[a]:n))}setAxesRanges(t,e,i,s,a,r,n,h,o){this.#n||(this.xaxis=t,this._setAxisRange("x",e,i),this.yaxis=s,this._setAxisRange("y",a,r),this.zaxis=n,this._setAxisRange("z",h,o))}setAxes2Ranges(t,e,i,s,a,r,n,h){t&&(this.x2axis=e,this._setAxisRange("x2",i,s)),a&&(this.y2axis=r,this._setAxisRange("y2",n,h))}createXY(t){if(this.self_drawaxes)return;this.cleanXY(),t||(t={ndim:1}),this.v6axes=!0,this.#a=t.swap_xy||!1,this.#c=t.reverse_x||!1,this.#o=t.reverse_y||!1,this.logx=this.v7EvalAttr("x_log",0),this.logy=this.v7EvalAttr("y_log",0);const e=this.getFrameWidth(),i=this.getFrameHeight(),s=this.getPadPainter();this.scales_ndim=t.ndim,this.scale_xmin=this.xmin,this.scale_xmax=this.xmax,this.scale_ymin=this.ymin,this.scale_ymax=this.ymax,t.extra_y_space&&((this.#a?this.logx:this.logy)&&this.scale_ymax>0?this.scale_ymax=Math.exp(Math.log(this.scale_ymax)*1.1):this.scale_ymax+=(this.scale_ymax-this.scale_ymin)*.1),t.zoom_xmin!==t.zoom_xmax&&(this.zoom_xmin===this.zoom_xmax||!this.zoomChangedInteractive("x"))&&(this.zoom_xmin=t.zoom_xmin,this.zoom_xmax=t.zoom_xmax),t.zoom_ymin!==t.zoom_ymax&&(this.zoom_ymin===this.zoom_ymax||!this.zoomChangedInteractive("y"))&&(this.zoom_ymin=t.zoom_ymin,this.zoom_ymax=t.zoom_ymax),this.zoom_xmin!==this.zoom_xmax&&(this.scale_xmin=this.zoom_xmin,this.scale_xmax=this.zoom_xmax),this.zoom_ymin!==this.zoom_ymax&&(this.scale_ymin=this.zoom_ymin,this.scale_ymax=this.zoom_ymax);let a=this.xaxis,r=this.yaxis;a?._typename!==B&&(a=W(B)),r?._typename!==B&&(r=W(B)),this.x_handle=new et(s,a,!0),this.x_handle.optionUnlab=this.v7EvalAttr("x_labels_hide",!1),this.x_handle.configureAxis("xaxis",this.xmin,this.xmax,this.scale_xmin,this.scale_xmax,this.#a,this.#a?[0,i]:[0,e],{reverse:this.#c,log:this.#a?this.logy:this.logx,symlog:this.#a?t.symlog_y:t.symlog_x,logcheckmin:t.ndim>1||!this.#a,logminfactor:1e-4}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle=new et(s,r,!0),this.y_handle.optionUnlab=this.v7EvalAttr("y_labels_hide",!1),this.y_handle.configureAxis("yaxis",this.ymin,this.ymax,this.scale_ymin,this.scale_ymax,!this.#a,this.#a?[0,e]:[0,i],{reverse:this.#o,log:this.#a?this.logx:this.logy,symlog:this.#a?t.symlog_x:t.symlog_y,logcheckmin:t.ndim>1||this.#a,log_min_nz:t.ymin_nz&&t.ymin_nz<this.ymax?.5*t.ymin_nz:0,logminfactor:3e-4}),this.y_handle.assignFrameMembers(this,"y")}hasDrawnAxes(t,e){return!t&&!e?this.#n:!1}async drawAxes(){if(this.#n||this.xmin===this.xmax||this.ymin===this.ymax)return this.#n;const t=this.v7EvalAttr("ticksX",1),e=this.v7EvalAttr("ticksY",1),i=this.v7EvalAttr("swapX",!1)?-1:1,s=this.v7EvalAttr("swapY",!1)?-1:1,a=this.getFrameWidth(),r=this.getFrameHeight(),n=this.getPadPainter();this.v6axes||(this.cleanupAxes(),this.#a=!1,this.zoom_xmin!==this.zoom_xmax?(this.scale_xmin=this.zoom_xmin,this.scale_xmax=this.zoom_xmax):(this.scale_xmin=this.xmin,this.scale_xmax=this.xmax),this.zoom_ymin!==this.zoom_ymax?(this.scale_ymin=this.zoom_ymin,this.scale_ymax=this.zoom_ymax):(this.scale_ymin=this.ymin,this.scale_ymax=this.ymax),this.recalculateRange(0),this.x_handle=new T(n,this,this.xaxis,"x_"),this.x_handle.assignSnapId(this.getSnapId()),this.x_handle.draw_swapside=i<0,this.x_handle.draw_ticks=t,this.y_handle=new T(n,this,this.yaxis,"y_"),this.y_handle.assignSnapId(this.getSnapId()),this.y_handle.draw_swapside=s<0,this.y_handle.draw_ticks=e,this.z_handle=new T(n,this,this.zaxis,"z_"),this.z_handle.assignSnapId(this.getSnapId()),this.x_handle.configureAxis("xaxis",this.xmin,this.xmax,this.scale_xmin,this.scale_xmax,!1,[0,a],a,{reverse:!1}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle.configureAxis("yaxis",this.ymin,this.ymax,this.scale_ymin,this.scale_ymax,!0,[r,0],-r,{reverse:!1}),this.y_handle.assignFrameMembers(this,"y"),this.z_handle.configureZAxis("zaxis",this));const h=this.getFrameSvg().selectChild(".axis_layer");this.x_handle.has_obstacle=!1;const o=this.#a?this.y_handle:this.x_handle,d=this.#a?this.x_handle:this.y_handle;let c;if(this.getPadPainter()?.isFastDrawing())c=Promise.resolve(!0);else if(this.v6axes){o.disable_ticks=t<=0,d.disable_ticks=e<=0;const m=o.drawAxis(h,a,r,o.invert_side?null:`translate(0,${r})`,t>1?-r:0,!1,void 0,!1,this.getPadPainter().getPadHeight()-r-this.getFrameY()),v=d.drawAxis(h,a,r,d.invert_side?`translate(${a})`:null,e>1?a:0,!1,d.invert_side?0:this.#i,!1);c=Promise.all([m,v]).then(()=>this.drawGrids())}else{let l=[];t>0&&l.push(o.drawAxis(h,z(0,i>0?r:0),i)),e>0&&l.push(d.drawAxis(h,z(s>0?0:a,r),s)),c=Promise.all(l).then(()=>(l=[],t>1&&l.push(o.drawAxisOtherPlace(h,z(0,i<0?r:0),-i,t===2)),e>1&&l.push(d.drawAxisOtherPlace(h,z(s<0?0:a,r),-s,e===2)),Promise.all(l))).then(()=>this.drawGrids())}return c.then(()=>(this.#n=!0,!0))}drawAxes2(t,e){const i=this.getFrameWidth(),s=this.getFrameHeight(),a=this.getPadPainter(),r=this.getFrameSvg().selectChild(".axis_layer");let n,h;return t&&(this.zoom_x2min!==this.zoom_x2max?(this.scale_x2min=this.zoom_x2min,this.scale_x2max=this.zoom_x2max):(this.scale_x2min=this.x2min,this.scale_x2max=this.x2max),this.x2_handle=new T(a,this,this.x2axis,"x2_"),this.x2_handle.assignSnapId(this.getSnapId()),this.x2_handle.configureAxis("x2axis",this.x2min,this.x2max,this.scale_x2min,this.scale_x2max,!1,[0,i],i,{reverse:!1}),this.x2_handle.assignFrameMembers(this,"x2"),n=this.x2_handle.drawAxis(r,null,-1)),e&&(this.zoom_y2min!==this.zoom_y2max?(this.scale_y2min=this.zoom_y2min,this.scale_y2max=this.zoom_y2max):(this.scale_y2min=this.y2min,this.scale_y2max=this.y2max),this.y2_handle=new T(a,this,this.y2axis,"y2_"),this.y2_handle.assignSnapId(this.getSnapId()),this.y2_handle.configureAxis("y2axis",this.y2min,this.y2max,this.scale_y2min,this.scale_y2max,!0,[s,0],-s,{reverse:!1}),this.y2_handle.assignFrameMembers(this,"y2"),h=this.y2_handle.drawAxis(r,z(i,s),-1)),Promise.all([n,h])}getGrFuncs(t,e){const i=t&&this.grx2,s=e&&this.gry2;return!i&&!s?this:{use_x2:i,grx:i?this.grx2:this.grx,x_handle:i?this.x2_handle:this.x_handle,logx:i?this.x2_handle.log:this.x_handle.log,scale_xmin:i?this.scale_x2min:this.scale_xmin,scale_xmax:i?this.scale_x2max:this.scale_xmax,use_y2:s,gry:s?this.gry2:this.gry,y_handle:s?this.y2_handle:this.y_handle,logy:s?this.y2_handle.log:this.y_handle.log,scale_ymin:s?this.scale_y2min:this.scale_ymin,scale_ymax:s?this.scale_y2max:this.scale_ymax,fp:this,swap_xy(){return this.fp.swap_xy()},revertAxis(a,r){return a==="x"&&this.use_x2&&(a="x2"),a==="y"&&this.use_y2&&(a="y2"),this.fp.revertAxis(a,r)},axisAsText(a,r){return a==="x"&&this.use_x2&&(a="x2"),a==="y"&&this.use_y2&&(a="y2"),this.fp.axisAsText(a,r)}}}sizeChanged(){const t={};this.v7AttrChange(t,"margins_left",this.fX1NDC),this.v7AttrChange(t,"margins_bottom",this.fY1NDC),this.v7AttrChange(t,"margins_right",1-this.fX2NDC),this.v7AttrChange(t,"margins_top",1-this.fY2NDC),this.v7SendAttrChanges(t,!1),this.redrawPad()}cleanXY(){const t=(e,i)=>{this[e]?.cleanup(),delete this[e],delete this[i]};t("x_handle","grx"),t("y_handle","gry"),t("z_handle","grz"),t("x2_handle","grx2"),t("y2_handle","gry2"),delete this.v6axes}cleanupAxes(){this.cleanXY(),this.getG()?.selectChild(".axis_layer").selectAll("*").remove(),this.#n=!1}cleanFrameDrawings(){p(this.create3DScene)&&this.create3DScene(-1),this.cleanupAxes();const t=e=>{this[e+"min"]=this[e+"max"]=0,this[`zoom_${e}min`]=this[`zoom_${e}max`]=0,this[`scale_${e}min`]=this[`scale_${e}max`]=0};t("x"),t("y"),t("z"),t("x2"),t("y2"),this.getG()?.selectChild(".main_layer").selectAll("*").remove(),this.getG()?.selectChild(".upper_layer").selectAll("*").remove()}cleanup(){this.cleanFrameDrawings(),this.getG()?.selectAll("*").remove(),this.getG()?.on("mousedown",null).on("dblclick",null).on("wheel",null).on("contextmenu",null).property("interactive_set",null),this.#h&&(window.removeEventListener("keydown",this.#h,!1),this.#h=void 0),this.#d=void 0,delete this.self_drawaxes,delete this.xaxis,delete this.yaxis,delete this.zaxis,delete this.x2axis,delete this.y2axis,this.setG(void 0),this.#f=void 0,this.#l=void 0,this.getPadPainter()?.setFramePainter(this,!1),super.cleanup()}redraw(){const t=this.getPadPainter();t?.setFramePainter(this,!0),this.updateAttributes();const e=t?.getPadRect()??{width:10,height:10},i=Math.round(e.width*this.fX1NDC),s=Math.round(e.height*(1-this.fY2NDC)),a=t?.options?.RotateFrame,r=Math.round(e.width*(this.fX2NDC-this.fX1NDC)),n=Math.round(e.height*(this.fY2NDC-this.fY1NDC));return this.#i=i,this.#s=s,this.#e=a?n:r,this.#t=a?r:n,this.#m=a?`rotate(-90,${i},${s}) translate(${i-n},${s})`:z(i,s),this.$can_drag=!a&&!t?.options?.FixFrame,this.mode3d?this:this.createFrameG()}createFrameG(){let t=this.setG(this.getFrameSvg()),e,i;t.empty()?(t=this.setG(this.getPadPainter().getLayerSvg("primitives_layer").append("svg:g").attr("class","root_frame")),this.isBatchMode()||t.append("svg:title").text(""),e=t.append("svg:rect"),i=t.append("svg:svg").attr("class","main_layer").attr("x",0).attr("y",0).attr("overflow","hidden"),t.append("svg:g").attr("class","axis_layer"),t.append("svg:g").attr("class","upper_layer")):(e=t.selectChild("rect"),i=t.selectChild(".main_layer")),this.#n=!1,t.attr("transform",this.#m),e.attr("x",0).attr("y",0).attr("width",this.#e).attr("height",this.#t).attr("rx",this.lineatt.rx||null).attr("ry",this.lineatt.ry||null).call(this.fillatt.func).call(this.lineatt.func),i.attr("width",this.#e).attr("height",this.#t).attr("viewBox",`0 0 ${this.#e} ${this.#t}`);let s=Promise.resolve(!0);return this.v7EvalAttr("drawAxes")&&(this.self_drawaxes=!0,this.setAxesRanges(),s=this.drawAxes().then(()=>this.addInteractivity())),s.then(()=>this)}getFrameX(){return this.#i||0}getFrameY(){return this.#s||0}getFrameWidth(){return this.#e||0}getFrameHeight(){return this.#t||0}getFrameRect(){return{x:this.#i||0,y:this.#s||0,width:this.getFrameWidth(),height:this.getFrameHeight(),transform:this.getG()?.attr("transform")||"",hint_delta_x:0,hint_delta_y:0}}getHistPalette(){return this.getPadPainter().getHistPalette()}configureUserClickHandler(t){this.#f=p(t)?t:null}getClickHandler(){return this.#f}configureUserDblclickHandler(t){this.#l=p(t)?t:null}getDblclickHandler(){return this.#l}async zoom(t,e,i,s,a,r,n){if(this.#r)return!1;t==="x"?(t=e,e=i,n=s,i=s=void 0):t==="y"?(n=s,s=i,i=e,t=e=void 0):t==="z"&&(n=s,a=e,r=i,t=e=i=s=void 0);let h=t!==e,o=i!==s,d=a!==r,c=!1,l=!1,f=!1;if(h){let b=0;t<=this.xmin&&(t=this.xmin,b++),e>=this.xmax&&(e=this.xmax,b++),b===2&&(h=!1,c=!0)}else c=t===e&&t===0;if(o){let b=0;i<=this.ymin&&(i=this.ymin,b++),s>=this.ymax&&(s=this.ymax,b++),b===2&&(o=!1,l=!0)}else l=i===s&&i===0;if(d){let b=0;a<=this.zmin&&(a=this.zmin,b++),r>=this.zmax&&(r=this.zmax,b++),b===2&&(d=!1,f=!0)}else f=a===r&&a===0;let g=!1,m="",v="",x="",P=!1;const _={_typename:`${C}RFrame::RUserRanges`,values:[0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1]},w=(b,j)=>{!j&&!p(b.canZoomInside)||(P=!0,h&&(j||b.canZoomInside("x",t,e))&&(this.zoom_xmin=t,this.zoom_xmax=e,g=!0,m="0",h=!1,_.values[0]=t,_.values[1]=e,_.flags[0]=_.flags[1]=!0,n&&this.zoomChangedInteractive("x",n)),o&&(j||b.canZoomInside("y",i,s))&&(this.zoom_ymin=i,this.zoom_ymax=s,g=!0,v="1",o=!1,_.values[2]=i,_.values[3]=s,_.flags[2]=_.flags[3]=!0,n&&this.zoomChangedInteractive("y",n)),d&&(j||b.canZoomInside("z",a,r))&&(this.zoom_zmin=a,this.zoom_zmax=r,g=!0,x="2",d=!1,_.values[4]=a,_.values[5]=r,_.flags[4]=_.flags[5]=!0,n&&this.zoomChangedInteractive("z",n)))};return(h||o||d)&&this.forEachPainter(b=>w(b)),!P&&this.self_drawaxes&&w(null,!0),(c||l||f)&&(c&&(this.zoom_xmin!==this.zoom_xmax&&(g=!0,m="0"),this.zoom_xmin=this.zoom_xmax=0,_.values[0]=_.values[1]=-1,n&&this.zoomChangedInteractive("x",n)),l&&(this.zoom_ymin!==this.zoom_ymax&&(g=!0,v="1"),this.zoom_ymin=this.zoom_ymax=0,_.values[2]=_.values[3]=-1,n&&this.zoomChangedInteractive("y",n)),f&&(this.zoom_zmin!==this.zoom_zmax&&(g=!0,x="2"),this.zoom_zmin=this.zoom_zmax=0,_.values[4]=_.values[5]=-1,n&&this.zoomChangedInteractive("z",n))),g?(this.v7NormalMode()&&this.v7SubmitRequest("zoom",{_typename:`${C}RFrame::RZoomRequest`,ranges:_}),this.interactiveRedraw("pad","zoom"+m+v+x).then(()=>!0)):!1}async zoomSingle(t,e,i,s){const a=["x","y","z","x2","y2"],r=a.indexOf(t);if(this.#r||!this[`${t}_handle`]&&t!=="z"||r<0)return!1;let n=e!==i,h=!1;if(n){let f=0;e<=this[t+"min"]&&(e=this[t+"min"],f++),i>=this[t+"max"]&&(i=this[t+"max"],f++),f===2&&(n=!1,h=!0)}else h=e===i&&e===0;let o=!1,d=!1;const c={_typename:`${C}RFrame::RUserRanges`,values:[0,0,0,0,0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1]},l=(f,g)=>{!g&&!p(f?.canZoomInside)||(d=!0,n&&(g||f.canZoomInside(t[0],e,i))&&(this[`zoom_${t}min`]=e,this[`zoom_${t}max`]=i,o=!0,n=!1,c.values[r*2]=e,c.values[r*2+1]=i,c.flags[r*2]=c.flags[r*2+1]=!0))};return n&&this.forEachPainter(f=>l(f)),!d&&this.self_drawaxes&&l(null,!0),h&&(this[`zoom_${t}min`]!==this[`zoom_${t}max`]&&(o=!0),this[`zoom_${t}min`]=this[`zoom_${t}max`]=0,c.values[r*2]=c.values[r*2+1]=-1),o?(s&&this.zoomChangedInteractive(t,s),this.v7NormalMode()&&this.v7SubmitRequest("zoom",{_typename:`${C}RFrame::RZoomRequest`,ranges:c}),this.interactiveRedraw("pad",`zoom${r}`).then(()=>!0)):!1}async unzoomSingle(t,e){return this.zoomSingle(t,0,0,typeof e>"u"?"unzoom":e)}isAxisZoomed(t){return this[`zoom_${t}min`]!==this[`zoom_${t}max`]}async unzoom(t,e,i){return t==="all"?this.unzoom("x2").then(()=>this.unzoom("y2")).then(()=>this.unzoom("xyz")):t==="x2"||t==="y2"?this.unzoomSingle(t):(typeof t>"u"?t=e=i=!0:S(t)&&(i=t.indexOf("z")>=0,e=t.indexOf("y")>=0,t=t.indexOf("x")>=0),this.zoom(t?0:void 0,t?0:void 0,e?0:void 0,e?0:void 0,i?0:void 0,i?0:void 0,"unzoom"))}resetZoom(){["x","y","z","x2","y2"].forEach(t=>{this[`zoom_${t}min`]=void 0,this[`zoom_${t}max`]=void 0,this[`zoom_changed_${t}`]=void 0})}zoomChangedInteractive(t,e){if(t==="reset"){this.zoom_changed_x=this.zoom_changed_y=this.zoom_changed_z=void 0;return}if(!t||t==="any")return this.zoom_changed_x||this.zoom_changed_y||this.zoom_changed_z;if(t!=="x"&&t!=="y"&&t!=="z")return;const i="zoom_changed_"+t;if(e===void 0)return this[i];if(e==="unzoom"){this[i]=this[i]===void 0;return}e&&(this[i]=!0)}fillObjectOfflineMenu(t,e){e!=="x"&&e!=="y"||t.add("Unzoom",()=>this.unzoom(e))}changeFrameAttr(t,e){const i={};this.v7AttrChange(i,t,e),this.v7SetAttr(t,e),this.v7SendAttrChanges(i,!1),this.redrawPad()}fillContextMenu(t,e,i){if(e==="pal"&&(e="z"),e==="x"||e==="y"||e==="x2"||e==="y2"){const r=this[e+"_handle"],n=i||this[e+"axis"];if(!r)return!1;if(t.header(`${e.toUpperCase()} axis`,`${G}ROOT_1_1Experimental_1_1RAxisBase.html`),p(n?.TestBit)){const h=this.getMainPainter(!0);return t.addTAxisMenu(gt,h||this,n,e),!0}return r.fillAxisContextMenu(t,e)}const s=t.size()===0;s?t.header("Frame",`${G}ROOT_1_1Experimental_1_1RFrame.html`):t.separator(),this.zoom_xmin!==this.zoom_xmax&&t.add("Unzoom X",()=>this.unzoom("x")),this.zoom_ymin!==this.zoom_ymax&&t.add("Unzoom Y",()=>this.unzoom("y")),this.zoom_zmin!==this.zoom_zmax&&t.add("Unzoom Z",()=>this.unzoom("z")),this.zoom_x2min!==this.zoom_x2max&&t.add("Unzoom X2",()=>this.unzoom("x2")),this.zoom_y2min!==this.zoom_y2max&&t.add("Unzoom Y2",()=>this.unzoom("y2")),t.add("Unzoom all",()=>this.unzoom("all")),t.separator(),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.x_handle&&t.addchk(this.x_handle.draw_grid,"Grid x",r=>this.changeFrameAttr("gridX",r)),this.y_handle&&t.addchk(this.y_handle.draw_grid,"Grid y",r=>this.changeFrameAttr("gridY",r)),this.x_handle&&!this.x2_handle&&t.addchk(this.x_handle.draw_swapside,"Swap x",r=>this.changeFrameAttr("swapX",r)),this.y_handle&&!this.y2_handle&&t.addchk(this.y_handle.draw_swapside,"Swap y",r=>this.changeFrameAttr("swapY",r)),this.x_handle&&!this.x2_handle&&(t.sub("Ticks x"),t.addchk(this.x_handle.draw_ticks===0,"off",()=>this.changeFrameAttr("ticksX",0)),t.addchk(this.x_handle.draw_ticks===1,"normal",()=>this.changeFrameAttr("ticksX",1)),t.addchk(this.x_handle.draw_ticks===2,"ticks on both sides",()=>this.changeFrameAttr("ticksX",2)),t.addchk(this.x_handle.draw_ticks===3,"labels on both sides",()=>this.changeFrameAttr("ticksX",3)),t.endsub()),this.y_handle&&!this.y2_handle&&(t.sub("Ticks y"),t.addchk(this.y_handle.draw_ticks===0,"off",()=>this.changeFrameAttr("ticksY",0)),t.addchk(this.y_handle.draw_ticks===1,"normal",()=>this.changeFrameAttr("ticksY",1)),t.addchk(this.y_handle.draw_ticks===2,"ticks on both sides",()=>this.changeFrameAttr("ticksY",2)),t.addchk(this.y_handle.draw_ticks===3,"labels on both sides",()=>this.changeFrameAttr("ticksY",3)),t.endsub()),t.addAttributesMenu(this,s?"":"Frame "),t.separator(),t.sub("Save as");const a=["svg","png","jpeg","webp"];return ut.makePDF&&a.push("pdf"),a.forEach(r=>t.add(`frame.${r}`,()=>this.getPadPainter().saveAs(r,"frame",`frame.${r}`))),t.endsub(),!0}revertAxis(t,e){return this[`${t}_handle`]?.revertPoint(e)??0}showAxisStatus(t,e){const i=t,s="axis",a=ft(e,this.getFrameSvg().node());let r=t==="x"?0:1;this.#a&&(r=1-r);const n=this.revertAxis(t,a[r]);this.showObjectStatus(i,s,`${t} : ${this.axisAsText(t,n)}`,`${Math.round(a[0])},${Math.round(a[1])}`)}addKeysHandler(){this.isBatchMode()||this.#h||typeof window>"u"||(it.assign(this),this.#h=t=>this.processKeyPress(t),window.addEventListener("keydown",this.#h,!1))}addInteractivity(t){return this.isBatchMode()||!y.Zooming&&!y.ContextMenu?!0:(it.assign(this),t||this.addBasicInteractivity(),this.addFrameInteractivity(t))}setRootPadRange(){}toggleAxisLog(t){return this[t+"_handle"]?.changeAxisLog("toggle")}}class X extends U{#i;#s;#e;#t;#m;#a;#c;#o;#n;#r;#f;#l;#h;#d;#g;#u;#_;#p;#x;#v;constructor(t,e,i,s,a){super(t,e,"","pad"),this.#e=e,this.#i=s,this.#s="",!s&&e&&(e.fObjectID?this.#s="pad"+e.fObjectID:this.#s="ppp"+ut.id_counter++),this.#t=[],this.#_=!0,this.forEachPainter=this.forEachPainterInPad;const r=this.selectDom();!r.empty()&&r.property("_batch_mode")&&(this.batch_mode=!0),i!==void 0&&this.decodeOptions(i),a&&(a!=="webpad"&&this.getCanvSvg().empty()?(this.#_=!1,this.#s="",this.setTopPainter()):this.addToPadPrimitives())}getPadName(){return this.#s}isBatchMode(){return this.batch_mode!==void 0?this.batch_mode:Z()?!0:this.isTopPad()?!1:this.getCanvPainter()?.isBatchMode()}isRoot6(){return!1}isEditable(){return!0}isButton(){return!1}isCanvas(t=!1){return this.#i?t===!0?p(this.getWebsocket)&&this.getWebsocket():S(t)?this.#i===t:!0:!1}isTopPad(){return this.isCanvas()||!this.#_}getPadPainter(){return this.isTopPad()?null:super.getPadPainter()}getCanvPainter(t){return this.isTopPad()?this:super.getCanvPainter(t)}getCanvSvg(){return this.selectDom().select(".root_canvas")}getPadSvg(){const t=this.getCanvSvg();return!this.#s||t.empty()?t:t.select(".primitives_layer .__root_pad_"+this.#s)}getLayerSvg(t){return this.getPadSvg().selectChild("."+t)}getFrameSvg(){const t=this.getLayerSvg("primitives_layer");if(t.empty())return t;let e=t.node().firstChild;for(;e;){const i=M(e);if(i.classed("root_frame"))return i;e=e.nextSibling}return M(null)}getMainPainter(){return this.#h||null}setMainPainter(t,e){(!this.#h||e)&&(this.#h=t)}cleanup(){this.#r&&console.error("pad drawing is not completed when cleanup is called"),this.#t.forEach(e=>e.cleanup());const t=this.getPadSvg();t.empty()||(t.property("pad_painter",null),this.isCanvas()||t.remove()),this.#h=void 0,this.#l=void 0,this.#a=this.#c=this.#o=this.#n=void 0,this.#r=void 0,delete this._dfltRFont,this.#t=[],this.#e=void 0,this.assignObject(null),this.#s=void 0,this.#_=!1,R({pp:this,active:!1}),super.cleanup()}getFramePainter(){return this.#l}setFramePainter(t,e){e?this.#l=t:this.#l===t&&(this.#l=void 0)}getPadWidth(){return this.#o||0}getPadHeight(){return this.#n||0}getPadScale(){return this.#m||1}getPadLog(){return!1}getPadRect(){return{x:this.#a||0,y:this.#c||0,width:this.getPadWidth(),height:this.getPadHeight()}}getFrameRect(){const t=this.getFramePainter();if(t)return t.getFrameRect();const e=this.getPadWidth(),i=this.getPadHeight(),s={};return s.szx=Math.round(.5*e),s.szy=Math.round(.5*i),s.width=2*s.szx,s.height=2*s.szy,s.x=Math.round(e/2-s.szx),s.y=Math.round(i/2-s.szy),s.hint_delta_x=s.szx,s.hint_delta_y=s.szy,s.transform=z(s.x,s.y)||"",s}getRootPad(t){return t===void 0||!t?this.#e:null}cleanPrimitives(t){if(t===!0&&(t=()=>!0),!p(t))return!1;let e=!1;for(let i=this.#t.length-1;i>=0;--i){const s=this.#t[i];t(s)&&(s.cleanup(),this.#t.splice(i,1),e=!0)}return e}async divide(){return y.Debug&&console.warn("RPadPainter.divide not implemented"),this}removePrimitive(t,e){let i,s=null;if(Number.isInteger(t)?(i=t,s=this.#t[i]):(i=this.#t.indexOf(t),s=t),i<0)return i;const a=[];let r=i-1;a.push(s),this.#t.splice(i,1);let n=0;for(;n<a.length;){for(let h=this.#t.length-1;h>=0;--h)this.#t[h].isSecondary(a[n])&&(a.push(this.#t[h]),this.#t.splice(h,1),h<=i&&r--);n++}return a.forEach(h=>{(h!==s||!e)&&h.cleanup(),this.getMainPainter()===h&&(delete this.setMainPainter(void 0,!0),r=-111)}),r}findInPrimitives(){return y.Debug&&console.warn("findInPrimitives not implemented for RPad"),null}findPainterFor(t,e,i){return this.#t.find(s=>{const a=s.getObject();return a?t&&a===t?!0:!(!e&&!i||e&&a.fName!==e||i&&a._typename!==i):!1})}getHistPalette(){const t=this.findPainterFor(void 0,void 0,`${C}RPaletteDrawable`);return t?t.getHistPalette():(this.fDfltPalette||(this.fDfltPalette={_typename:`${C}RPalette`,fColors:[{fOrdinal:0,fColor:{fColor:"rgb(53, 42, 135)"}},{fOrdinal:.125,fColor:{fColor:"rgb(15, 92, 221)"}},{fOrdinal:.25,fColor:{fColor:"rgb(20, 129, 214)"}},{fOrdinal:.375,fColor:{fColor:"rgb(6, 164, 202)"}},{fOrdinal:.5,fColor:{fColor:"rgb(46, 183, 164)"}},{fOrdinal:.625,fColor:{fColor:"rgb(135, 191, 119)"}},{fOrdinal:.75,fColor:{fColor:"rgb(209, 187, 89)"}},{fOrdinal:.875,fColor:{fColor:"rgb(254, 200, 50)"}},{fOrdinal:1,fColor:{fColor:"rgb(249, 251, 14)"}}],fInterpolate:!0,fNormalized:!0},At(this.fDfltPalette,`${C}RPalette`)),this.fDfltPalette)}getCustomPalette(t){return this.#f||(t?null:this.getCanvPainter()?.getCustomPalette(!0))}getNumPainters(){return this.#t.length}addToPrimitives(t){return this.#t.indexOf(t)<0&&this.#t.push(t),this}forEachPainterInPad(t,e){e||(e="all"),e!=="objects"&&t(this);for(let i=0;i<this.#t.length;++i){const s=this.#t[i];p(s.forEachPainterInPad)?e!=="objects"&&s.forEachPainterInPad(t,e):e!=="pads"&&t(s)}}registerForPadEvents(t){this.pad_events_receiver=t}producePadEvent(t,e,i,s){t==="select"&&p(this.selectActivePad)&&this.selectActivePad(e,i,s),p(this.pad_events_receiver)&&this.pad_events_receiver({what:t,padpainter:e,painter:i,position:s})}selectObjectPainter(t,e){const i=this.isTopPad()?this:this.getCanvPainter();t===void 0&&(t=this),e&&!this.isTopPad()&&(e=kt(this.getPadSvg(),e)),R({pp:this,active:!0}),i.producePadEvent("select",this,t,e)}setFastDrawing(t,e){const i=this.#p;this.#p=!this.hasSnapId()&&y.SmallPad&&(t<y.SmallPad.width||e<y.SmallPad.height),i!==this.#p&&this.showPadButtons()}isFastDrawing(){return this.#p}isGrayscale(){return!1}setGrayscale(){console.error("grayscale mode not implemented for RCanvas")}isDefaultPadRange(){return!0}createCanvasSvg(t,e){let s,a,r,n,h;if(t>0){if(this.#u)return t>1;if(a=this.getCanvSvg(),a.empty()||(s=a.property("height_factor"),r=this.testMainResize(t,null,s),!r.changed&&t===1))return!1;this.isBatchMode()||(n=this.getLayerSvg("btns_layer")),h=a.selectChild(".canvas_fillrect")}else{const o=this.selectDom();o.style("position")==="static"&&o.style("position","relative"),a=o.append("svg").attr("class","jsroot root_canvas").property("pad_painter",this).property("redraw_by_resize",!1),this.setTopPainter(),!this.isBatchMode()&&!this.online_canvas&&a.append("svg:title").text("ROOT canvas"),this.isBatchMode()||a.style("user-select",y.UserSelect||null),h=a.append("svg:path").attr("class","canvas_fillrect"),this.isBatchMode()||h.style("pointer-events","visibleFill").on("dblclick",d=>this.enlargePad(d,!0)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",y.ContextMenu?d=>this.padContextMenu(d):null),a.append("svg:g").attr("class","primitives_layer"),a.append("svg:g").attr("class","info_layer"),this.isBatchMode()||(n=a.append("svg:g").attr("class","btns_layer").property("leftside",y.ToolBarSide==="left").property("vertical",y.ToolBarVert)),s=.66,this.#e?.fWinSize[0]&&this.#e.fWinSize[1]&&(s=this.#e.fWinSize[1]/this.#e.fWinSize[0],(s<.1||s>10)&&(s=.66)),this.#u?(o.style("overflow","auto"),r={width:this.#e.fWinSize[0],height:this.#e.fWinSize[1]},(!r.width||!r.height)&&(r=Mt(o))):r=this.testMainResize(2,e,s)}return this.createAttFill({pattern:1001,color:0}),r.width<=5||r.height<=5?(this.hasSnapId()||(a.style("display","none"),console.warn(`Hide canvas while geometry too small w=${r.width} h=${r.height}`)),this.#o&&this.#n?(r.width=this.#o,r.height=this.#n):(r.width=800,r.height=600)):a.style("display",null),this.#u?a.attr("x",0).attr("y",0).attr("width",r.width).attr("height",r.height).style("position","absolute"):a.attr("x",0).attr("y",0).style("width","100%").style("height","100%").style("position","absolute").style("left",0).style("top",0).style("bottom",0).style("right",0),a.style("filter",y.DarkMode?"invert(100%)":null),a.attr("viewBox",`0 0 ${r.width} ${r.height}`).attr("preserveAspectRatio","none").property("height_factor",s).property("draw_x",0).property("draw_y",0).property("draw_width",r.width).property("draw_height",r.height),this.#a=0,this.#c=0,this.#o=r.width,this.#n=r.height,h.attr("d",`M0,0H${r.width}V${r.height}H0Z`).call(this.fillatt.func),this.setFastDrawing(r.width,r.height),p(this.alignButtons)&&n&&this.alignButtons(n,r.width,r.height),!0}drawItemNameOnCanvas(){}enlargePad(t,e,i){if(t?.preventDefault(),t?.stopPropagation(),e&&this.isCanvas(!0)&&this.enlargeMain("state")==="off")return;const s=this.getCanvSvg(),a=s.property("pad_enlarged");if(this.isTopPad()||!a&&!this.hasObjectsToDraw()&&!this.#t){if(this.#u||!this.enlargeMain(i?!1:"toggle"))return;this.enlargeMain("state")==="off"?s.property("pad_enlarged",null):R({pp:this,active:!0})}else!a&&!i?(this.enlargeMain(!0,!0),s.property("pad_enlarged",this.#e),R({pp:this,active:!0})):a===this.#e?(this.enlargeMain(!1),s.property("pad_enlarged",null)):!i&&e&&console.error("missmatch with pad double click events");return this.checkResize(!0)}createPadSvg(t){if(this.isTopPad())return this.createCanvasSvg(t?2:0),!0;const e=this.getPadPainter()?.getPadSvg(),i=this.getCanvSvg(),s=e.property("draw_width"),a=e.property("draw_height"),r=i.property("pad_enlarged");let n=!0,h=s,o=a,d=0,c=0,l,f,g=null;return this.#e?.fPos&&this.#e?.fSize&&(d=Math.round(s*this.#e.fPos.fHoriz.fArr[0]),c=Math.round(a*this.#e.fPos.fVert.fArr[0]),h=Math.round(s*this.#e.fSize.fHoriz.fArr[0]),o=Math.round(a*this.#e.fSize.fVert.fArr[0])),r&&(n=!1,r===this.#e?n=!0:this.forEachPainterInPad(m=>{m.getObject()===r&&(n=!0)},"pads"),n&&(h=s,o=a,d=c=0)),t?(l=this.getPadSvg(),f=l.selectChild(".root_pad_border"),this.isBatchMode()||(g=this.getLayerSvg("btns_layer")),this.addPadInteractive(!0)):(l=e.selectChild(".primitives_layer").append("svg:svg").classed("__root_pad_"+this.#s,!0).attr("pad",this.#s).property("pad_painter",this),this.isBatchMode()||l.append("svg:title").text("ROOT subpad"),f=l.append("svg:path").attr("class","root_pad_border"),l.append("svg:g").attr("class","primitives_layer"),this.isBatchMode()||(g=l.append("svg:g").attr("class","btns_layer").property("leftside",y.ToolBarSide!=="left").property("vertical",y.ToolBarVert)),y.ContextMenu&&f.on("contextmenu",m=>this.padContextMenu(m)),this.isBatchMode()||f.style("pointer-events","visibleFill").on("dblclick",m=>this.enlargePad(m,!0)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus())),this.createAttFill({attr:this.#e}),this.createAttLine({attr:this.#e,color0:this.#e.fBorderMode===0?"none":""}),l.style("display",n?null:"none").attr("viewBox",`0 0 ${h} ${o}`).attr("preserveAspectRatio","none").attr("x",d).attr("y",c).attr("width",h).attr("height",o).property("draw_x",d).property("draw_y",c).property("draw_width",h).property("draw_height",o),this.#a=d,this.#c=c,this.#o=h,this.#n=o,f.attr("d",`M0,0H${h}V${o}H0Z`).call(this.fillatt.func).call(this.lineatt.func),this.setFastDrawing(h,o),l.property("can3d")===O.Embed3D.Overlay&&this.selectDom().select(".draw3d_"+this.#s).style("display",n?"":"none"),this.alignButtons&&g&&this.alignButtons(g,h,o),n}addPadInteractive(){p(this.$userInteractive)&&(this.$userInteractive(),delete this.$userInteractive)}hasObjectsToDraw(){return this.#e?.fPrimitives?.find(t=>t._typename!==`${C}RPadDisplayItem`)}syncDraw(t){const e={kind:t||"redraw"};return this.#r===void 0?(this.#r=[e],Promise.resolve(!0)):e.kind!==!0&&this.#r.findIndex((i,s)=>s>0&&i.kind===e.kind)>0?!1:(this.#r.push(e),new Promise(i=>{e.func=i}))}confirmDraw(){if(this.#r===void 0)return console.warn("failure, should not happen");if(this.#r.shift(),!this.#r.length)this.#r=void 0;else{const t=this.#r[0];t.func&&(t.func(),delete t.func)}}async drawObject(){return console.log("Not possible to draw object without loading of draw.mjs"),null}async drawPrimitives(t){if(t===void 0)return this.isCanvas()&&(this.#v=new Date().getTime()),this.#d=this.#e?.fPrimitives?.length??0,this.syncDraw(!0).then(()=>this.drawPrimitives(0));if(!this.#e||t>=this.#d){if(this.confirmDraw(),this.#v){const e=new Date().getTime()-this.#v;e>3e3&&console.log(`Canvas drawing took ${(e*.001).toFixed(2)}s`),this.#v=void 0}return}return this.drawObject(this,this.#e.fPrimitives[t],"").then(e=>(K(e)&&(e._primitive=!0),this.drawPrimitives(t+1)))}getAutoColor(){const t=this.getHistPalette(),e=this.#g++,i=Math.max(this.#d-1,2);return t?.getColorOrdinal(e%i/i)??"blue"}processPadTooltipEvent(t){const e=[],i=[];return this.#t?.forEach(s=>{p(s.processTooltipEvent)&&e.push(s)}),t&&(t.nproc=e.length),e.forEach(s=>{const a=s.processTooltipEvent(t)||{user_info:null};i.push(a),t?.painters&&(a.painter=s)}),i}changeDarkMode(t){this.getCanvSvg().style("filter",t??y.DarkMode?"invert(100%)":null)}fillContextMenu(t){const e=this.isCanvas()?"RCanvas":"RPad";t.header(e,`${G}ROOT_1_1Experimental_1_1${e}.html`),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.isCanvas(!0)||(t.addAttributesMenu(this),this.isCanvas()&&t.addSettingsMenu(!1,!1,s=>{s==="dark"&&this.changeDarkMode()})),t.separator(),p(this.hasMenuBar)&&p(this.actiavteMenuBar)&&t.addchk(this.hasMenuBar(),"Menu bar",s=>this.actiavteMenuBar(s)),p(this.hasEventStatus)&&p(this.activateStatusBar)&&p(this.canStatusBar)&&this.canStatusBar()&&t.addchk(this.hasEventStatus(),"Event status",()=>this.activateStatusBar("toggle")),(this.enlargeMain()||!this.isTopPad()&&this.hasObjectsToDraw())&&t.addchk(this.enlargeMain("state")==="on","Enlarge "+(this.isCanvas()?"canvas":"pad"),()=>this.enlargePad());const i=this.#s||(this.isCanvas()?"canvas":"pad");return t.sub("Save as"),["svg","png","jpeg","pdf","webp"].forEach(s=>t.add(`${i}.${s}`,()=>this.saveAs(s,this.isCanvas(),`${i}.${s}`))),t.endsub(),!0}padContextMenu(t){t.stopPropagation&&(t.stopPropagation(),t.preventDefault(),this.getFramePainter()?.setLastEventPos()),N(t,this).then(e=>(this.fillContextMenu(e),this.fillObjectExecMenu(e))).then(e=>e.show())}async redrawLegend(){}deliverWebCanvasEvent(){}async redrawPad(t){const e=this.syncDraw(t);if(e===!1)return console.log("Prevent RPad redrawing"),!1;let i=!0;const s=a=>{for(;a<this.#t.length;){const r=this.#t[a++];let n=0;if((i||Wt(r))&&(n=r.redraw(t)),ht(n))return n.then(()=>s(a))}return!0};return e.then(()=>(this.isCanvas()?this.createCanvasSvg(2):i=this.createPadSvg(!0),s(0))).then(()=>(this.addPadInteractive(),st()===this&&this.getCanvPainter()?.producePadEvent("padredraw",this),this.confirmDraw(),!0))}redraw(t){return this.redrawPad(t)}needRedrawByResize(){const t=this.getPadSvg();if(!t.empty()&&t.property("can3d")===O.Embed3D.Overlay)return!0;for(let e=0;e<this.#t.length;++e)if(p(this.#t[e].needRedrawByResize)&&this.#t[e].needRedrawByResize())return!0;return!1}checkCanvasResize(t,e){if(this._ignore_resize||!this.isTopPad())return!1;const i=this.syncDraw("canvas_resize");if(i===!1)return!1;(t===!0||t===!1)&&(e=t,t=null),K(t)&&t.force&&(e=!0),e||(e=this.needRedrawByResize());let s=!1;const a=r=>!s||r>=this.#t.length?(this.confirmDraw(),s):at(this.#t[r].redraw(e?"redraw":"resize")).then(()=>a(r+1));return i.then(()=>(s=this.createCanvasSvg(e?2:1,t),s&&this.isCanvas()&&this.#e&&this.online_canvas&&!this.embed_canvas&&!this.isBatchMode()&&(this.#x&&clearTimeout(this.#x),this.#x=setTimeout(()=>{if(this.#x=void 0,!this.#e?.fWinSize)return;const r=this.getPadWidth(),n=this.getPadHeight();r>0&&n>0&&(this.#e.fWinSize[0]!==r||this.#e.fWinSize[1]!==n)&&(this.#e.fWinSize[0]=r,this.#e.fWinSize[1]=n,this.sendWebsocket(`RESIZED:[${r},${n}]`))},1e3)),a(0)))}updateObject(t){return t?(this.#e.fStyle=t.fStyle,this.#e.fAttr=t.fAttr,this.isCanvas()?(this.#e.fTitle=t.fTitle,this.#e.fWinSize=t.fWinSize):(this.#e.fPos=t.fPos,this.#e.fSize=t.fSize),!0):!1}addObjectPainter(t,e,i){t&&e&&e[i]&&!t.hasSnapId()&&(this.#t.indexOf(t)<0&&this.#t.push(t),t.assignSnapId(e[i].fObjectID),t.rstyle||(t.rstyle=e[i].fStyle||this.rstyle))}extractTObjectProp(t){if(t.fColIndex&&t.fColValue){const a=this.getColors()||Ft();for(let r=0;r<t.fColIndex.length;++r)a[t.fColIndex[r]]=H(t.fColValue[r])}const e=new U,i=t.fObject;e.assignObject(t),e.csstype=t.fCssType,e.rstyle=t.fStyle,t.fOption=e.v7EvalAttr("options","");const s=(a,r)=>{const n=e.v7EvalColor(r,"");n&&(i[a]=Ht(n,this.getColors()))};i.fLineColor!==void 0&&i.fLineWidth!==void 0&&i.fLineStyle!==void 0&&(s("fLineColor","line_color"),i.fLineWidth=e.v7EvalAttr("line_width",i.fLineWidth),i.fLineStyle=e.v7EvalAttr("line_style",i.fLineStyle)),i.fFillColor!==void 0&&i.fFillStyle!==void 0&&(s("fFillColor","fill_color"),i.fFillStyle=e.v7EvalAttr("fill_style",i.fFillStyle)),i.fMarkerColor!==void 0&&i.fMarkerStyle!==void 0&&i.fMarkerSize!==void 0&&(s("fMarkerColor","marker_color"),i.fMarkerStyle=e.v7EvalAttr("marker_style",i.fMarkerStyle),i.fMarkerSize=e.v7EvalAttr("marker_size",i.fMarkerSize)),i.fTextColor!==void 0&&i.fTextAlign!==void 0&&i.fTextAngle!==void 0&&i.fTextSize!==void 0&&(s("fTextColor","text_color"),i.fTextAlign=e.v7EvalAttr("text_align",i.fTextAlign),i.fTextAngle=e.v7EvalAttr("text_angle",i.fTextAngle),i.fTextSize=e.v7EvalAttr("text_size",i.fTextSize))}async drawNextSnap(t,e,i){if(i===void 0&&(i=-1,this.#d=t?.length??0,this.#g=0),delete this.next_rstyle,++i,!t||i>=t.length)return this.#g=void 0,this;const s=t[i],a=s._typename===`${C}RPadDisplayItem`;if(s.fDummy)return this.drawNextSnap(t,e+1,i);if(s._typename===`${C}TObjectDisplayItem`){if(s.fKind===k.kStyle)return Object.assign(A,s.fObject),this.drawNextSnap(t,e,i);if(s.fKind===k.kColors){const h=[],o=s.fObject.arr;for(let d=0;d<o.length;++d){const c=o[d].fString,l=c.indexOf("=");l>0&&(h[parseInt(c.slice(0,l))]=H(c.slice(l+1)))}return this.setColors(h),this.drawNextSnap(t,e,i)}if(s.fKind===k.kPalette){const h=s.fObject.arr,o=[];for(let d=0;d<h.length;++d)o[d]=h[d].fString;return this.#f=new Ot(o),this.drawNextSnap(t,e,i)}if(s.fKind===k.kFont)return this.drawNextSnap(t,e,i);if(!this.getFramePainter())return this.drawObject(this,{_typename:Et,$dummy:!0},"").then(()=>this.drawNextSnap(t,e,i-1));this.extractTObjectProp(s)}let r,n;for(;e!==void 0&&e<this.#t.length;){const h=this.#t[e++];if(h.getSnapId()===s.fObjectID){r=h;break}else if(h.getSnapId()&&!h.isSecondary()&&!a){console.warn(`Mismatch in snapid between painter ${h.getSnapId()} secondary: ${h.isSecondary()} type: ${h.getClassName()} and primitive ${s.fObjectID} kind ${s.fKind} type ${s.fDrawable?._typename}`);break}}if(r)a?n=r.redrawPadSnap(s):r.updateObject(s.fDrawable||s.fObject||s,s.fOption||"",!0)&&(n=r.redraw());else if(a){const h=new X(this,s,"",!1,"webpad");h.assignSnapId(s.fObjectID),h.rstyle=s.fStyle,h.createPadSvg(),s.fPrimitives?.length&&h.addPadButtons(),e++,n=h.drawNextSnap(s.fPrimitives).then(()=>h.addPadInteractive())}else this.next_rstyle=s.fStyle||this.rstyle,e++,n=this.drawObject(this,s.fDrawable||s.fObject||s,s.fOption||"").then(h=>this.addObjectPainter(h,t,i));return at(n).then(()=>this.drawNextSnap(t,e,i))}findSnap(t,e){function i(s){return!s||!S(s)?!1:s===t?!0:e&&s.length>t.length&&s.indexOf(t)===s.length-t.length}if(i(this.getSnapId()))return this;if(!this.#t)return null;for(let s=0;s<this.#t.length;++s){let a=this.#t[s];if(!e&&p(a.findSnap)?a=a.findSnap(t):i(a.getSnapId())||(a=null),a)return a}return null}async redrawPadSnap(t){if(!t||!t.fPrimitives)return this;if(this.isCanvas(!0)&&t.fTitle&&!this.embed_canvas&&typeof document<"u"&&(document.title=t.fTitle),!this.hasSnapId()){this.assignSnapId(t.fObjectID),this.assignObject(t),this.#e=t,this.isBatchMode()&&this.isCanvas()&&(this.#u=!0);const r=this.selectDom().attr("id");return!this.isBatchMode()&&this.online_canvas&&!this.use_openui&&!this.brlayout&&r&&S(r)&&!L()&&(this.brlayout=new Rt(r,null,this),this.brlayout.create(r,!0),this.setDom(this.brlayout.drawing_divid()),Tt(this.brlayout)),this.createCanvasSvg(0),this.addPadButtons(!0),this.drawNextSnap(t.fPrimitives).then(()=>(p(this.onCanvasUpdated)&&this.onCanvasUpdated(this),this))}this.updateObject(t),this.isCanvas()?this.createCanvasSvg(2):this.createPadSvg(!0);let e=!1,i=0,s=0;for(;s<this.#t.length;){const r=this.#t[s];if(!r.hasSnapId()||r.isSecondary()){s++;continue}if(i>=t.fPrimitives.length)break;const n=t.fPrimitives[i];if(n.fObjectID===r.getSnapId())i++,s++;else if(n.fDummy||!n.fObjectID||n._typename===`${C}TObjectDisplayItem`&&(n.fKind===k.kStyle||n.fKind===k.kColors||n.fKind===k.kPalette||n.fKind===k.kFont))i++;else{e=!0;break}}let a=1e3;for(;!e&&s<this.#t.length&&--a>=0;)this.removePrimitive(s)===-111&&(e=!0);if(a<0&&(e=!0),e){const r=this.#t;this.#t=[],r.forEach(n=>n.cleanup()),this.setMainPainter(void 0,!0),p(this.removePadButtons)&&this.removePadButtons(),this.addPadButtons(!0)}return this.drawNextSnap(t.fPrimitives,e?void 0:0).then(()=>(this.addPadInteractive(),st()===this&&this.getCanvPainter()?.producePadEvent("padredraw",this),p(this.onCanvasUpdated)&&this.onCanvasUpdated(this),this))}async createImage(t){return t==="png"||t==="jpeg"||t==="svg"||t==="webp"||t==="pdf"?this.produceImage(!0,t).then(e=>{if(!e||t==="svg")return e;const i=e.indexOf("base64,");return i>0?e.slice(i+7):""}):""}itemContextMenu(t){const e=this.getPadSvg().node().getBoundingClientRect(),i={clientX:e.left+10,clientY:e.top+10};if(t==="pad")return rt(()=>this.padContextMenu(i),50);let s=null,a;switch(t){case"xaxis":case"yaxis":case"zaxis":s=this.getMainPainter(),a=t[0];break;case"frame":s=this.getFramePainter();break;default:{const r=parseInt(t);Number.isInteger(r)&&(s=this.#t[r])}}if(p(s?.fillContextMenu))return N(i,s).then(r=>{(s.fillContextMenu(r,a)||s.getSnapId())&&s.fillObjectExecMenu(r,a).then(()=>rt(()=>r.show(),50))})}saveAs(t,e,i){i||(i=(this.#s||(this.isCanvas()?"canvas":"pad"))+"."+t),this.produceImage(e,t).then(s=>{if(!s)return console.error(`Fail to produce image ${i}`);if((nt.qt6||nt.cef3)&&this.getSnapId()){console.warn(`sending file ${i} to server`);let a=s;if(t!=="svg"){const r=a.indexOf("base64,");a=r>0?a.slice(r+7):""}a&&this.getCanvPainter()?.sendWebsocket(`SAVE:${i}:${a}`)}else Dt(i,t!=="svg"?s:It+encodeURIComponent(s))})}findActivePad(){return null}async produceImage(t,e,i){const s=t==="frame",a=s?this.getFrameSvg():t?this.getCanvSvg():this.getPadSvg(),r=t&&!s?this.getCanvPainter():this,n=[];if(a.empty())return"";if(s||!t){const c=this.getCanvSvg().selectChild(".canvas_defs");c.empty()||(n.push({prnt:this.getCanvSvg(),defs:c}),a.node().insertBefore(c.node(),a.node().firstChild))}s||r.forEachPainterInPad(c=>{const l={prnt:c.getPadSvg()};n.push(l);const f=c.getLayerSvg("btns_layer");l.btns_node=f.node(),l.btns_node&&(l.btns_prnt=l.btns_node.parentNode,l.btns_next=l.btns_node.nextSibling,f.remove());const g=c.getFramePainter();if(!p(g?.access3dKind))return;const m=g.access3dKind();if(m!==O.Embed3D.Overlay&&m!==O.Embed3D.Embed)return;const v=p(g.getRenderer)?g:g.getMainPainter(),x=p(v.getRenderer)?v.getRenderer()?.domElement:null;if(!p(v?.render3D)||!K(x))return;const P=g.getSizeFor3d(O.Embed3D.Embed);v.render3D(0);const _=x.toDataURL("image/png");m===O.Embed3D.Embed&&(l.foreign=l.prnt.select("."+P.clname),l.foreign.remove());const w=g.getFrameSvg();l.frame_node=w.node(),l.frame_node&&(l.frame_next=l.frame_node.nextSibling,w.remove()),l.img=l.prnt.insert("image",".primitives_layer").attr("x",P.x).attr("y",P.y).attr("width",x.width).attr("height",x.height).attr("href",_)},"pads");let h=a.property("draw_width"),o=a.property("draw_height");if(s){const c=this.getFramePainter();h=c.getFrameWidth(),o=c.getFrameHeight()}const d=e==="pdf"?{node:a.node(),width:h,height:o,reset_tranform:s}:$t(`<svg width="${h}" height="${o}" xmlns="${Lt}">${a.node().innerHTML}</svg>`);return jt(d,e,i).then(c=>{for(let l=0;l<n.length;++l){const f=n[l];f.img?.remove();const g=f.prnt.selectChild(".primitives_layer");f.foreign&&f.prnt.node().insertBefore(f.foreign.node(),g.node()),f.frame_node&&g.node().insertBefore(f.frame_node,f.frame_next),f.btns_node&&f.btns_prnt.insertBefore(f.btns_node,f.btns_next),f.defs&&f.prnt.node().insertBefore(f.defs.node(),f.prnt.node().firstChild)}return c})}clickPadButton(t,e){if(t==="CanvasSnapShot")return this.saveAs("png",!0);if(t==="enlargePad")return this.enlargePad();if(t==="PadSnapShot")return this.saveAs("png",!1);if(t==="PadContextMenus")return e?.preventDefault(),e?.stopPropagation(),Bt()?void 0:N(e,this).then(a=>{a.header("Menus"),a.add(this.isCanvas()?"Canvas":"Pad","pad",this.itemContextMenu),this.getFramePainter()&&a.add("Frame","frame",this.itemContextMenu);const r=this.getMainPainter();if(r&&(a.add("X axis","xaxis",this.itemContextMenu),a.add("Y axis","yaxis",this.itemContextMenu),p(r.getDimension)&&r.getDimension()>1&&a.add("Z axis","zaxis",this.itemContextMenu)),this.#t?.length){a.separator();const n=[];this.#t.forEach((h,o)=>{const d=h?.getObject();if(!d||n.indexOf(d)>=0||h.isSecondary())return;let c=p(h.getClassName)?h.getClassName():d._typename||"";c&&(c+="::"),c+=p(h.getObjectName)?h.getObjectName():d.fName||`item${o}`,a.add(c,o,this.itemContextMenu),n.push(d)})}a.show()});let i=!1;const s=[];for(let a=0;a<this.#t.length;++a){const r=this.#t[a];p(r.clickPadButton)&&s.push(r.clickPadButton(t,e)),!i&&p(r.clickButton)&&(i=r.clickButton(t),ht(i)&&s.push(i))}return Promise.all(s)}addPadButton(t,e,i,s){if(!(!y.ToolBar||this.isBatchMode())){this._buttons||(this._buttons=[]);for(let a=0;a<this._buttons.length;++a)if(this._buttons[a].funcname===i)return;if(this._buttons.push({btn:t,tooltip:e,funcname:i,keyname:s}),!this.isTopPad()&&i.indexOf("Pad")&&i!=="enlargePad"){const a=this.getCanvPainter();a&&a!==this&&a.addPadButton(t,e,i)}}}addPadButtons(t){this.addPadButton("camera","Create PNG",this.isCanvas()?"CanvasSnapShot":"PadSnapShot","Ctrl PrintScreen"),y.ContextMenu&&this.addPadButton("question","Access context menus","PadContextMenus"),(!this.isTopPad()&&this.hasObjectsToDraw()||this.enlargeMain("verify"))&&this.addPadButton("circle","Enlarge canvas","enlargePad"),t&&this.brlayout&&(this.addPadButton("diamand","Toggle Ged","ToggleGed"),this.addPadButton("three_circles","Toggle Status","ToggleStatus"))}showPadButtons(){this._buttons&&(Nt.assign(this),this.showPadButtons())}getPadLength(t,e,i){let s,a;const r=t?-1:1,n=(c,l)=>c<e.fArr.length?e.fArr[c]:l,h=()=>(s||(s=i?i.getFrameRect():this.getPadRect()),s);if(i){const c=n(2),l=t?"gry":"grx";c!==void 0&&i[l]&&(a=i[l](c))}a===void 0&&(a=t?h().height:0);const o=n(0,0),d=n(1,0);return a+=r*d,o&&(a+=r*(t?h().height:h().width)*o),Math.round(a)}getCoordinate(t,e){return{x:this.getPadLength(!1,t.fHoriz,e),y:this.getPadLength(!0,t.fVert,e)}}decodeOptions(t){const e=this.getObject();if(!e)return;const i=new Gt(t),s=this.setOptions({GlobalColors:!0,LocalColors:!1,IgnorePalette:!1,RotateFrame:!1,FixFrame:!1});(i.check("NOCOLORS")||i.check("NOCOL"))&&(s.GlobalColors=s.LocalColors=!1),(i.check("LCOLORS")||i.check("LCOL"))&&(s.GlobalColors=!1,s.LocalColors=!0),(i.check("NOPALETTE")||i.check("NOPAL"))&&(s.IgnorePalette=!0),i.check("ROTATE")&&(s.RotateFrame=!0),i.check("FIXFRAME")&&(s.FixFrame=!0),i.check("WHITE")&&(e.fFillColor=0),i.check("LOGX")&&(e.fLogx=1),i.check("LOGY")&&(e.fLogy=1),i.check("LOGZ")&&(e.fLogz=1),i.check("LOG")&&(e.fLogx=e.fLogy=e.fLogz=1),i.check("GRIDX")&&(e.fGridx=1),i.check("GRIDY")&&(e.fGridy=1),i.check("GRID")&&(e.fGridx=e.fGridy=1),i.check("TICKX2")&&(e.fTickx=2),i.check("TICKY2")&&(e.fTicky=2),i.check("TICK2")&&(e.fTickx=e.fTicky=2),i.check("TICKX")&&(e.fTickx=1),i.check("TICKY")&&(e.fTicky=1),i.check("TICK")&&(e.fTickx=e.fTicky=1)}static async draw(t,e,i){const s=new X(t,e,i,!1,!0);return s.createPadSvg(),s.matchObjectType(C+"RPad")&&(s.isTopPad()||s.hasObjectsToDraw())&&s.addPadButtons(),R({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.addPadInteractive(),s.showPadButtons(),s))}}class Y extends X{#i;#s;#e;#t;constructor(t,e,i){super(t,e,i,!0),this.#i=null,this.#e={},this.tooltip_allowed=y.Tooltip,this.v7canvas=!0}cleanup(){this.#i=void 0,this.#e={},this.#s&&this.setLayoutKind("simple"),this.#s=void 0,super.cleanup()}isReadonly(){return!1}getCanvasName(){const t=this.getRootPad()?.fTitle;return!t||!S(t)?"rcanvas":t.replace(/ /g,"_")}getLayoutKind(){const t=this.selectDom("origin");return(t.empty()?"":t.property("layout"))||"simple"}setLayoutKind(t,e){const i=this.selectDom("origin");i.empty()||(t||(t="simple"),i.property("layout",t),i.property("layout_selector",t!=="simple"&&e?e:null),this.#s=t!=="simple")}async changeLayout(t,e){if(this.getLayoutKind()===t)return!0;const s=this.selectDom("origin"),a=s.select(".side_panel2"),r=[];let n=s.select(".side_panel"),h=this.selectDom(),o;for(;h.node().firstChild;)r.push(h.node().removeChild(h.node().firstChild));if(n.empty()||ot(n.node()),a.empty()||ot(a.node()),this.setLayoutKind("simple"),s.html(""),t==="simple"){h=s;for(let d=0;d<r.length;++d)h.node().appendChild(r[d]);this.setLayoutKind(t),o=!0}else{const d=new Ut(s.node(),t);e===void 0&&(e=t.indexOf("vert")===0?0:1),h=M(d.getGridFrame(e)),h.classed("central_panel",!0).style("position","relative"),e===2?(n=M(d.getGridFrame(0)),n.classed("side_panel2",!0).style("position","relative"),n=M(d.getGridFrame(3)),n.classed("side_panel",!0).style("position","relative")):(n=M(d.getGridFrame(1-e)),n.classed("side_panel",!0).style("position","relative"));for(let c=0;c<r.length;++c)h.node().appendChild(r[c]);this.setLayoutKind(t,".central_panel"),s.property("mdi",null)}return Xt(h.node(),o),!0}async toggleProjection(t){if(delete this.proj_painter,t&&(this.proj_painter={X:!1,Y:!1}),p(this.showUI5ProjectionArea))return this.showUI5ProjectionArea(t);let e="simple",i;switch(t){case"XY":e="projxy",i=2;break;case"X":case"bottom":e="vert2_31",i=0;break;case"Y":case"left":e="horiz2_13",i=1;break;case"top":e="vert2_13",i=1;break;case"right":e="horiz2_31",i=0;break}return this.changeLayout(e,i)}async drawProjection(){return!1}async drawInSidePanel(t,e,i){const s=this.getLayoutKind()==="projxy"&&i==="Y"?".side_panel2":".side_panel",a=this.selectDom("origin").select(s);return a.empty()?null:this.drawObject(a.node(),t,e)}testUI5(){return this.use_openui??!1}showMessage(t){this.testUI5()||Yt(t,7e3)}saveCanvasAsFile(t){const e=t.indexOf(".");this.createImage(t.slice(e+1)).then(i=>this.sendWebsocket(`SAVE:${t}:${i}`))}sendSaveCommand(t){this.sendWebsocket("PRODUCE:"+t)}getWebsocket(){return this.#i}canSendWebsocket(t=1){return this.#i?.canSend(t)}sendWebsocket(t){return this.#i?.canSend()?(this.#i.send(t),!0):!1}closeWebsocket(t){this.#i&&(this.#i.close(t),this.#i.cleanup(),this.#i=void 0)}useWebsocket(t){this.closeWebsocket(),this.#i=t,this.#i.setReceiver(this),this.#i.connect()}websocketTimeout(t,e){if(!this.#i)return;this.#i._tmouts||(this.#i._tmouts={});const i=this.#i._tmouts[t];if(e===void 0)return i!==void 0;e==="reset"?i&&(clearTimeout(i),delete this.#i._tmouts[t]):!i&&Number.isInteger(e)&&(this.#i._tmouts[t]=setTimeout(()=>{delete this.#i._tmouts[t]},e))}onWebsocketOpened(){}onWebsocketClosed(){this.embed_canvas||Kt()}onWebsocketMsg(t,e){if(e==="CLOSE")this.onWebsocketClosed(),this.closeWebsocket(!0);else if(e.slice(0,5)==="SNAP:"){e=e.slice(5);const i=e.indexOf(":"),s=e.slice(0,i),a=$(e.slice(i+1));this.syncDraw(!0).then(()=>{!this.getSnapId()&&a?.fWinSize&&this.resizeBrowser(a.fWinSize[0],a.fWinSize[1])}).then(()=>this.redrawPadSnap(a)).then(()=>{this.addPadInteractive(),t.send(`SNAPDONE:${s}`),this.confirmDraw()}).catch(r=>{p(this.showConsoleError)?this.showConsoleError(r):console.log(r)})}else if(e.slice(0,4)==="JSON"){const i=$(e.slice(4));this.redrawObject(i)}else if(e.slice(0,9)==="REPL_REQ:")this.processDrawableReply(e.slice(9));else if(e.slice(0,4)==="CMD:"){e=e.slice(4);const i=e.indexOf(":"),s=e.slice(0,i),a=e.slice(i+1),r=`REPLY:${s}:`;if(a==="SVG"||a==="PNG"||a==="JPEG"||a==="WEBP"||a==="PDF")this.createImage(a.toLowerCase()).then(n=>t.send(r+n));else if(a.indexOf("ADDPANEL:")===0)if(!p(this.showUI5Panel))t.send(r+"false");else{const n=a.slice(9),h=t.createNewInstance(n);h.setReceiver({cpainter:this,onWebsocketOpened(){},onWebsocketMsg(o,d){const c=d.indexOf("SHOWPANEL:")===0?d.slice(10):"";this.cpainter.showUI5Panel(c,o).then(l=>t.send(r+(l?"true":"false")))},onWebsocketClosed(){t.send(r+"false")},onWebsocketError(){t.send(r+"false")}}),h.connect()}else console.log("Unrecognized command "+a),t.send(r)}else if(e.slice(0,7)==="DXPROJ:"||e.slice(0,7)==="DYPROJ:"){const i=e[1],s=$(e.slice(7));this.drawProjection(i,s)}else if(e.slice(0,5)==="SHOW:"){const i=e.slice(5),s=i.at(-1)==="1";this.showSection(i.slice(0,i.length-2),s)}else console.log(`unrecognized msg len: ${e.length} msg: ${e.slice(0,30)}`)}submitDrawableRequest(t,e,i,s){if(!this.getWebsocket()||!e?._typename||!i.getSnapId())return null;if(t&&s){i._requests||(i._requests={});const r=i._requests[t];if(r){const n=new Date().getTime();if(!r._tm||n-r._tm<5e3)return r._nextreq=e,!1;delete i._requests[t]}i._requests[t]=e}e.id=i.getSnapId(),s?(this.#t||(this.#t=1),e.reqid=this.#t++):e.reqid=0;const a=JSON.stringify(e);return e.reqid&&(e._kind=t,e._painter=i,e._method=s,e._tm=new Date().getTime(),this.#e[e.reqid]=e),this.sendWebsocket("REQ:"+a),e}async submitMenuRequest(t,e,i){return new Promise(s=>{this.submitDrawableRequest("",{_typename:`${C}RDrawableMenuRequest`,menukind:e||"",menureqid:i},t,s)})}submitExec(t,e,i){if(i&&S(i)){const s=i.length;if(s>2&&i.indexOf("#x")===s-2?i="x":s>2&&i.indexOf("#y")===s-2?i="y":s>2&&i.indexOf("#z")===s-2&&(i="z"),i==="x"||i==="y"||i==="z")e=i+"axis#"+e;else return console.log(`not recoginzed subelem ${i} in submitExec`)}this.submitDrawableRequest("",{_typename:`${C}RDrawableExecRequest`,exec:e},t)}processDrawableReply(t){const e=$(t);if(!e?.reqid)return!1;const i=this.#e[e.reqid];if(!i)return!1;this.#e[e.reqid]=void 0,i._kind&&i._painter?._requests&&i._painter._requests[i._kind]===i&&delete i._painter._requests[i._kind],i._method&&i._method(e,i),i._nextreq&&!i._painter._requests[i._kind]&&this.submitDrawableRequest(i._kind,i._nextreq,i._painter,i._method)}async showSection(t,e){switch(t){case"Menu":break;case"StatusBar":break;case"Editor":break;case"ToolBar":break;case"ToolTips":this.setTooltipAllowed(e);break}return!0}processChanges(t,e,i){if(!(!this.canSendWebsocket(2)||!S(t)))switch(e||(e=this),t){case"sbits":console.log("Status bits in RCanvas are changed - that to do?");break;case"frame":case"zoom":console.log("Frame moved or zoom is changed - that to do?");break;case"pave_moved":console.log("TPave is moved inside RCanvas - that to do?");break;default:t.slice(0,5)==="exec:"&&e?.getSnapId()?this.submitExec(e,t.slice(5),i):console.log("UNPROCESSED CHANGES",t)}}clickPadButton(t,e){return t==="ToggleGed"?this.activateGed(this,null,"toggle"):t==="ToggleStatus"?this.activateStatusBar("toggle"):super.clickPadButton(t,e)}hasEventStatus(){if(this.testUI5())return!1;if(this.brlayout)return this.brlayout.hasStatus();const t=L();return t?t.hasStatusLine():!1}canStatusBar(){return this.testUI5()||this.brlayout||L()}activateStatusBar(t){this.testUI5()||(this.brlayout?this.brlayout.createStatusLine(23,t):L()?.createStatusLine(23,t),this.processChanges("sbits",this))}showCanvasStatus(...t){if(this.testUI5())return;(this.brlayout||L()?.brlayout)?.showStatus(...t)}hasGed(){return this.testUI5()?!1:this.brlayout?.hasContent()??!1}removeGed(){this.testUI5()||(this.registerForPadEvents(null),this.ged_view&&(this.ged_view.getController().cleanupGed(),this.ged_view.destroy(),delete this.ged_view),this.brlayout?.deleteContent(!0),this.processChanges("sbits",this))}getUi5PanelData(){return{jsroot:{settings:y,create:W,parse:$,toJSON:qt,loadScript:Zt,EAxisBits:gt,getColorExec:Vt}}}async activateGed(t,e,i){if(this.testUI5()||!this.brlayout)return!1;if(this.brlayout.hasContent())return i==="toggle"||i===!1?this.removeGed():t?.getPadPainter()?.selectObjectPainter(t),!0;if(i===!1)return!1;const s=this.brlayout.createBrowserBtns();return E.createSVG(s,E.diamand,15,"toggle fix-pos mode","browser").style("margin","3px").on("click",()=>this.brlayout.toggleKind("fix")),E.createSVG(s,E.circle,15,"toggle float mode","browser").style("margin","3px").on("click",()=>this.brlayout.toggleKind("float")),E.createSVG(s,E.cross,15,"delete GED","browser").style("margin","3px").on("click",()=>this.removeGed()),this.brlayout.setBrowserContent("<div class='jsroot_browser_hierarchy' id='ged_placeholder'>Loading GED ...</div>"),this.brlayout.setBrowserTitle("GED"),this.brlayout.toggleBrowserKind(e||"float"),new Promise(a=>{Jt.then(r=>{M("#ged_placeholder").text(""),r.ui.require(["sap/ui/model/json/JSONModel","sap/ui/core/mvc/XMLView"],(n,h)=>{const o=new n({handle:null});h.create({viewName:"rootui5.canv.view.Ged",viewData:this.getUi5PanelData("Ged")}).then(d=>{d.setModel(o),d.placeAt("ged_placeholder"),this.ged_view=d,this.registerForPadEvents(d.getController().padEventsReceiver.bind(d.getController())),t?.getPadPainter()?.selectObjectPainter(t),this.processChanges("sbits",this),a(!0)})})})})}produceJSON(){return console.error("RCanvasPainter.produceJSON not yet implemented"),""}resizeBrowser(t,e){!t||!e||this.isBatchMode()||this.embed_canvas||this.batch_mode||this.getWebsocket()?.resizeWindow(t,e)}static async draw(t,e,i){!e&&(e=W(`${C}RCanvas`));const a=new Y(t,e,i);return a.createCanvasSvg(0),R({pp:a,active:!1}),a.drawPrimitives().then(()=>(a.addPadInteractive(),a.addPadButtons(),a.showPadButtons(),a))}}function ie(u,t,e){const i=new Y(u,null,e);return i.batch_mode=Z(),i.syncDraw(!0).then(()=>i.redrawPadSnap(t)).then(()=>(i.confirmDraw(),i.showPadButtons(),i))}async function mt(u){if(!u)return Promise.reject(Error("Painter not provided in ensureRCanvas"));const t=u.getPadPainter();return(t?Promise.resolve(t):Y.draw(u.getDom(),null)).then(i=>(u.addToPadPrimitives(i),u))}function se(u,t){const e=this.getFramePainter();if(!e)return console.log("no frame painter - no title");const i=e.getFrameRect(),s=i.x,a=i.y,r=i.width,n=this.getPadPainter().getPadHeight(),h=this.getObject(),o=r,d=this.v7EvalFont("text",{size:.07,color:"black",align:22});let c=this.v7EvalLength("margin",n,.02),l=this.v7EvalLength("height",n,.05);if(u==="drag"){l=t.height,c=a-t.y-t.height;const g={};this.v7AttrChange(g,"margin",c/n),this.v7AttrChange(g,"height",l/n),this.v7SendAttrChanges(g,!1)}const f=this.createG();return z(f,s,Math.round(a-c-l)),this.startTextDrawingAsync(d,"font").then(()=>(this.drawText({x:o/2,y:l/2,text:h.fText,latex:1}),this.finishTextDrawing())).then(()=>{ct(this,{x:s,y:Math.round(a-c-l),width:o,height:l,minwidth:20,minheight:20,no_change_x:!0,redraw:g=>this.redraw("drag",g)})})}Qt(`${C}RPalette`,{extractRColor(u){const t=u.fColor||"black";return H(t)},getColor(u){return this.palette[u]},getContourIndex(u){const t=this.fContour;let e=0,i=t.length-1;if(u<t[0])return-1;if(u>=t[i])return i-1;if(this.fCustomContour){for(;e<i-1;){const s=Math.round((e+i)/2);t[s]>u?i=s:e=s}return e}return Math.floor((u-t[0])/(t[i-1]-t[0])*(i-1))},getContourColor(u){const t=this.getContourIndex(u);return t<0?"":this.getColor(t)},getContour(){return this.fContour&&this.fContour.length>1?this.fContour:null},deleteContour(){this.fContour=void 0},calcColor(u,t,e){const i=e.fOrdinal-t.fOrdinal,s=e.fOrdinal-u,a=u-t.fOrdinal;if(!this.fInterpolate||i<=0)return H(s<a?e.fColor:t.fColor);const r=V(this.extractRColor(t.fColor)),n=V(this.extractRColor(e.fColor));return V(Math.round((r.r*s+n.r*a)/i),Math.round((r.g*s+n.g*a)/i),Math.round((r.b*s+n.b*a)/i)).formatRgb()},createPaletteColors(u){const t=[];let e=0;for(;t.length<u;){const i=t.length/(u-1),s=this.fColors[e];if(Math.abs(s.fOrdinal-i)<1e-4||e===this.fColors.length-1){t.push(this.extractRColor(s.fColor));continue}const a=this.fColors[e+1];a.fOrdinal<=i?e++:t.push(this.calcColor(i,s,a))}return t},getColorOrdinal(u){if(!this.fColors)return"black";typeof u!="number"||u<0?u=0:u>1&&(u=1);let t,e=this.fColors[0];for(let i=0;i<this.fColors.length-1;++i){if(t=e,Math.abs(t.fOrdinal-u)<1e-4)return this.extractRColor(t.fColor);if(e=this.fColors[i+1],e.fOrdinal>u)return this.calcColor(u,t,e)}return this.extractRColor(e.fColor)},setFullRange(u,t){this.full_min=u,this.full_max=t},createContour(u,t,e,i,s){if(this.fContour=[],delete this.fCustomContour,this.colzmin=e,this.colzmax=i,u){this.colzmax<=0&&(this.colzmax=1),this.colzmin<=0&&(s===void 0||s<=0?this.colzmin=1e-4*this.colzmax:this.colzmin=s<3||s>100?.3*s:1),this.colzmin>=this.colzmax&&(this.colzmin=1e-4*this.colzmax);const a=Math.log(this.colzmin)/Math.log(10),r=Math.log(this.colzmax)/Math.log(10),n=(r-a)/t;this.fContour.push(this.colzmin);for(let h=1;h<t;h++)this.fContour.push(Math.exp((a+n*h)*Math.log(10)));this.fContour.push(this.colzmax),this.fCustomContour=!0}else{this.colzmin===this.colzmax&&this.colzmin&&(this.colzmax+=.01*Math.abs(this.colzmax),this.colzmin-=.01*Math.abs(this.colzmin));const a=(this.colzmax-this.colzmin)/t;for(let r=0;r<=t;r++)this.fContour.push(this.colzmin+a*r)}(!this.palette||this.palette.length!==t)&&(this.palette=this.createPaletteColors(t))}});function ae(){const u=this.getObject(),t=this.getCanvSvg(),e="custom_font_"+u.fFamily+u.fWeight+u.fStyle;let i=t.selectChild(".canvas_defs");i.empty()&&(i=t.insert("svg:defs",":first-child").attr("class","canvas_defs"));let s=i.selectChild("."+e);if(s.empty()){s=i.append("style").attr("type","text/css").attr("class",e).text(`@font-face { font-family: "${u.fFamily}"; font-weight: ${u.fWeight?u.fWeight:"normal"}; font-style: ${u.fStyle?u.fStyle:"normal"}; src: ${u.fSrc}; }`);const a=u.fSrc.indexOf("base64,"),r=u.fSrc.lastIndexOf(" format(");if(a>0&&r>a){const n=u.fSrc.slice(a+7,r-2);u.fSrc.indexOf("data:application/font-ttf")>0&&s.property("$fontcfg",{n:u.fFamily,base64:n})}}return u.fDefault&&(this.getPadPainter()._dfltRFont=u),!0}function re(u,t,e){const i=new T(u,t,e);return i.disable_zooming=!0,mt(i).then(()=>i.redraw()).then(()=>i)}function ne(u,t,e){const i=new te(u,t);return e==="3d"&&(i.mode3d=!0),mt(i).then(()=>i.redraw())}export{Y as RCanvasPainter,U as RObjectPainter,X as RPadPainter,re as drawRAxis,ae as drawRFont,ne as drawRFrame,se as drawRFrameTitle,ie as drawRPadSnapshot,mt as ensureRCanvas};
|
|
1
|
+
import{a7 as _t,aK as S,bG as q,bc as Z,aA as y,cu as pt,cv as xt,cw as C,a5 as p,cx as vt,b$ as D,bP as I,bO as F,cy as yt,cz as bt,cn as wt,aF as Pt,cA as J,cB as Q,bT as tt,$ as z,cC as Ct,cD as N,aR as G,cf as ct,aE as ft,ba as M,ae as A,cE as zt,cF as St,bN as B,s as W,bn as et,al as gt,aq as ut,cG as it,cH as R,cI as At,cJ as kt,cK as Mt,bu as O,am as K,cL as st,cM as Ft,cN as H,cO as k,cP as Ot,cQ as Et,ay as at,cR as Rt,bg as Tt,cS as rt,cg as nt,cT as Dt,cU as It,c5 as $t,c6 as Lt,c7 as jt,cV as Bt,cW as ht,cX as Nt,a3 as Gt,cY as Wt,cZ as Ht,co as L,bf as ot,c_ as Ut,bi as Xt,b7 as Yt,c$ as Kt,Z as $,b0 as Vt,d0 as Zt,bd as qt,d1 as E,d2 as Jt,d3 as Qt,bv as V}from"./ndmvr-aframe-core-DEHQ38JB.js";const lt=1,dt=3;class U extends _t{#i;#s;constructor(t,e,i,s){super(t,e,i),this.csstype=s}addToPadPrimitives(t){const e=super.addToPadPrimitives(t);return e&&!this.rstyle&&e.next_rstyle&&(this.rstyle=e.next_rstyle),e}v7EvalAttr(t,e){const i=this.getObject();if(!i)return e;this.cssprefix&&(t=this.cssprefix+t);const s=a=>{if(e===void 0)return a;const r=typeof e,n=typeof a;return r===n?a:r==="boolean"?n==="string"?a!==""&&a!=="0"&&a!=="no"&&a!=="off":!!a:r==="number"&&n==="string"?parseFloat(a):a};if(i.fAttr?.m){const a=i.fAttr.m[t];if(a)return s(a.v)}if(this.rstyle?.fBlocks){const a=this.rstyle.fBlocks;for(let r=0;r<a.length;++r){const n=a[r];if((this.csstype&&n.selector===this.csstype||i.fId&&n.selector==="#"+i.fId||i.fCssClass&&n.selector==="."+i.fCssClass)&&n.map?.m){const o=n.map.m[t.toLowerCase()];if(o)return s(o.v)}}}return e}v7SetAttr(t,e){const i=this.getObject();this.cssprefix&&(t=this.cssprefix+t),i?.fAttr?.m&&(i.fAttr.m[t]={v:e})}v7EvalLength(t,e,i){e<=0&&(e=1);const s=this.v7EvalAttr(t);if(s===void 0)return Math.round(i*e);if(typeof s=="number")return Math.round(s*e);if(s===null)return 0;let a=0,r=0,n=s,h=0,o=0;for(;n;){for(;o<n.length&&(n[o]===" "||n[o]===" ");)++o;if(o>=n.length)break;if(n[o]==="-"||n[o]==="+"){if(h)return console.log(`Fail to parse RPadLength ${s}`),i;h=n[o]==="-"?-1:1,o++;continue}for(o>0&&(n=n.slice(o),o=0);o<n.length&&(n[o]>="0"&&n[o]<="9"||n[o]===".");)o++;const d=parseFloat(n.slice(0,o));if(!Number.isFinite(d))return console.log(`Fail to parse RPadLength ${s}`),Math.round(i*e);n=n.slice(o),o=0,h||(h=1),n&&n[0]==="%"?(n=n.slice(1),a+=h*d*.01):n.length>1&&n[0]==="p"&&n[1]==="x"?(n=n.slice(2),r+=h*d):a+=h*d,h=0}return Math.round(a*e+r)}v7EvalColor(t,e){let i=this.v7EvalAttr(t,"");if(!i||!S(i))return e;if(i==="auto"){const s=this.getPadPainter();s?(i=s.getAutoColor(),this.#s||(this.#s={}),this.#s[t]=i):this.#s&&this.#s[t]?i=this.#s[t]:(console.error(`Autocolor ${t} not defined yet - please check code`),i="")}else if(i[0]==="["){const s=parseFloat(i.slice(1,i.length-1));if(i="black",Number.isFinite(s)){const a=this.getPadPainter()?.getHistPalette();a&&(i=a.getColorOrdinal(s))}}if(i[0]==="#"&&(q()||Z()&&y.ApproxTextSize)){const s=pt(i);return s.opacity!==1&&(s.opacity=s.opacity.toFixed(2)),s.formatRgb()}return i}v7EvalFont(t,e,i){e?typeof e=="number"&&(e={size:e}):e={};const s=this.getPadPainter(),a=s?._dfltRFont||{fFamily:"Arial",fStyle:"",fWeight:""},r=this.v7EvalAttr(t+"_angle",0),n=this.v7EvalAttr(t+"_align",e.align||"none"),h=this.v7EvalColor(t+"_color",e.color||"none"),o=this.v7EvalAttr(t+"_font_family",a.fFamily||"Arial"),d=this.v7EvalAttr(t+"_font_style",a.fStyle||""),c=this.v7EvalAttr(t+"_font_weight",a.fWeight||"");let l=this.v7EvalAttr(t+"_size",e.size||12);S(l)&&(l=parseFloat(l)),(!Number.isFinite(l)||l<=0)&&(l=12),i||(i=s?.getPadHeight()||100);const f=new xt(null,l,i);return f.setNameStyleWeight(o,d,c),r&&f.setAngle(360-r),n!=="none"&&f.setAlign(n),h!=="none"&&f.setColor(h),f}createv7AttFill(t){(!t||!S(t))&&(t="fill_");const e=this.v7EvalColor(t+"color",""),i=this.v7EvalAttr(t+"style",0);this.createAttFill({pattern:i,color:e,color_as_svg:!0})}createv7AttLine(t){(!t||!S(t))&&(t="line_");const e=this.v7EvalColor(t+"color","black"),i=this.v7EvalAttr(t+"width",1),s=this.v7EvalAttr(t+"style",1);let a=this.v7EvalAttr(t+"pattern");a&&q()&&(a=a.split(",").join(", ")),this.createAttLine({color:e,width:i,style:s,pattern:a}),t==="border_"&&this.lineatt.setBorder(this.v7EvalAttr(t+"rx",0),this.v7EvalAttr(t+"ry",0))}createv7AttMarker(t){(!t||!S(t))&&(t="marker_");const e=this.v7EvalColor(t+"color","black"),i=this.v7EvalAttr(t+"size",.01),s=this.v7EvalAttr(t+"style",1),a=i>=1?1:this.getPadPainter()?.getPadHeight()||100;this.createAttMarker({color:e,size:i,style:s,refsize:a})}v7AttrChange(t,e,i,s){if(!this.getSnapId())return!1;if(t._typename||(t._typename=`${C}RChangeAttrRequest`,t.ids=[],t.names=[],t.values=[],t.update=!0),this.cssprefix&&(e=this.cssprefix+e),t.ids.push(this.getSnapId()),t.names.push(e),i==null&&(s||(s="none"),s!=="none"&&console.error(`Trying to set ${s} for none value`)),!s)switch(typeof i){case"number":s="double";break;case"boolean":s="boolean";break}const a={_typename:`${C}RAttrMap::`};switch(s){case"none":a._typename+="NoValue_t";break;case"boolean":a._typename+="BoolValue_t",a.v=!!i;break;case"int":a._typename+="IntValue_t",a.v=parseInt(i);break;case"double":a._typename+="DoubleValue_t",a.v=parseFloat(i);break;default:a._typename+="StringValue_t",a.v=S(i)?i:JSON.stringify(i);break}return t.values.push(a),!0}v7SendAttrChanges(t,e){const i=this.getCanvPainter();i&&t?._typename&&(e!==void 0&&(t.update=!!e),i.v7SubmitRequest("",t))}v7SubmitRequest(t,e,i){const s=this.getCanvPainter();return p(s?.submitDrawableRequest)?this.getSnapId()?s.submitDrawableRequest(t,e,this,i):(this.#i={kind:t,req:e,method:i},e):null}assignSnapId(t){if(super.assignSnapId(t),this.getSnapId()&&this.#i){const e=this.#i;this.#i=void 0,this.v7SubmitRequest(e.kind,e.req,e.method)}}v7CommMode(){const t=this.getCanvPainter();return!t||!t.submitDrawableRequest||!t.getWebsocket()?dt:lt}v7NormalMode(){return this.v7CommMode()===lt}v7OfflineMode(){return this.v7CommMode()===dt}}class T extends U{constructor(t,e,i,s){const a=s?e.getObject():e;super(t,a,"",s?e.csstype:"axis"),Object.assign(this,vt),this.initAxisPainter(),this.axis=i,s?(this.embedded=!0,this.cssprefix=s,this.rstyle=e.rstyle):this.cssprefix="axis_"}cleanup(){delete this.axis,delete this.axis_g,this.cleanupAxisPainter(),super.cleanup()}getAxisType(){return"RAttrAxis"}configureZAxis(t,e){this.name=t,this.kind=D,this.log=!1;const i=this.v7EvalAttr("log",0);i&&(this.log=!0,this.logbase=10,Math.abs(i-Math.exp(1))<.1?this.logbase=Math.exp(1):i>1.9&&(this.logbase=Math.round(i))),e.logz=this.log}configureAxis(t,e,i,s,a,r,n,h,o){o||(o={}),this.name=t,this.full_min=e,this.full_max=i,this.kind=D,this.vertical=r,this.log=!1;const d=this.v7EvalAttr("log",0),c=this.v7EvalAttr("symlog",0);if(this.reverse=o.reverse||!1,this.v7EvalAttr("time")){this.kind=I,this.timeoffset=0;let m=this.v7EvalAttr("timeOffset");m!==void 0&&(m=parseFloat(m),Number.isFinite(m)&&(this.timeoffset=m*1e3))}else this.axis?.fLabelsIndex?(this.kind=F,delete this.own_labels):o.labels?this.kind=F:this.kind=D;this.kind===I?this.func=yt().domain([this.convertDate(s),this.convertDate(a)]):c&&c>0?(this.symlog=c,this.func=bt().constant(c).domain([s,a])):d?(a<=0&&(a=1),(s<=0||s>=a)&&(s=a*1e-4),this.log=!0,this.logbase=10,Math.abs(d-Math.exp(1))<.1?this.logbase=Math.exp(1):d>1.9&&(this.logbase=Math.round(d)),this.func=wt().base(this.logbase).domain([s,a])):this.func=Pt().domain([s,a]),this.scale_min=s,this.scale_max=a,this.gr_range=h||1e3;const l=n??[0,this.gr_range];this.axis_shift=l[1]-this.gr_range,this.reverse?this.func.range([l[1],l[0]]):this.func.range(l),this.kind===I?this.gr=m=>this.func(this.convertDate(m)):this.log?this.gr=m=>m<this.scale_min?this.vertical?this.func.range()[0]+5:-5:this.func(m):this.gr=this.func,delete this.format;const f=this.v7EvalAttr("ndiv",508);this.nticks=f%100,this.nticks2=(f%1e4-this.nticks)/100,this.nticks3=Math.floor(f/1e4),this.nticks=Math.min(this.nticks,20);const g=Math.abs(this.gr_range)||100;if(this.kind===I){this.nticks=Math.min(this.nticks,8);const m=this.scale_max-this.scale_min,v=J(m/g,!1);let x=this.v7EvalAttr("timeFormat","");(!x||m<.1*(this.full_max-this.full_min))&&(x=J(m/this.nticks,!0)),this.tfunc1=this.tfunc2=Q(x),v!==x&&(this.tfunc2=Q(v)),this.format=this.formatTime}else if(this.log)this.nticks2>1&&(this.nticks*=this.nticks2,this.nticks2=1),this.noexp=this.v7EvalAttr("noexp",!1),this.scale_max<300&&this.scale_min>.3&&this.logbase===10&&(this.noexp=!0),this.moreloglabels=this.v7EvalAttr("moreloglbls",!1),this.format=this.formatLog;else if(this.kind===F){this.nticks=50;const m=this.scale_max-this.scale_min;this.nticks>m&&(this.nticks=Math.round(m)),this.nticks2=1,this.format=this.formatLabels}else this.order=0,this.ndig=0,this.format=this.formatNormal}getScaleMin(){return this.func?this.func.domain()[0]:0}getScaleMax(){return this.func?this.func.domain()[1]:0}formatLabels(t){const e=Math.round(t);if(this.axis?.fLabelsIndex){if(e<0||e>=this.axis.fNBinsNoOver)return null;for(let i=0;i<this.axis.fLabelsIndex.length;++i){const s=this.axis.fLabelsIndex[i];if(s.second===e)return s.first}}else{const i=this.getObject().fLabels;if(i&&e>=0&&e<i.length)return i[e]}return null}createTicks(t,e,i,s){i&&this.nticks&&this.kind===D&&(this.noticksopt=!0);const a=this.produceTicks(this.nticks),r={nminor:0,nmiddle:0,nmajor:0,func:this.func,minor:a,middle:a,major:a};if(t){const n=r.major,h=(this.scale_max-this.scale_min)*1e-5;return n.at(0)>this.scale_min+h&&n.unshift(this.scale_min),n.at(-1)<this.scale_max-h&&n.push(this.scale_max),n}if(this.nticks2>1&&(!this.log||this.logbase===10)){r.minor=r.middle=this.produceTicks(r.major.length,this.nticks2);const n=Math.abs(this.func.range()[1]-this.func.range()[0]);r.middle.length<=r.major.length||r.middle.length>n?r.minor=r.middle=r.major:this.nticks3>1&&!this.log&&(r.minor=this.produceTicks(r.middle.length,this.nticks3),(r.minor.length<=r.middle.length||r.minor.length>n)&&(r.minor=r.middle))}if(r.reset=function(){this.nminor=this.nmiddle=this.nmajor=0},r.next=function(n){return this.nminor>=this.minor.length?!1:(this.tick=this.minor[this.nminor++],this.grpos=this.func(this.tick),n&&(this.grpos=Math.round(this.grpos)),this.kind=3,this.nmiddle<this.middle.length&&Math.abs(this.grpos-this.func(this.middle[this.nmiddle]))<1&&(this.nmiddle++,this.kind=2),this.nmajor<this.major.length&&Math.abs(this.grpos-this.func(this.major[this.nmajor]))<1&&(this.nmajor++,this.kind=1),!0)},r.last_major=function(){return this.kind!==1?!1:this.nmajor===this.major.length},r.next_major_grpos=function(){return this.nmajor>=this.major.length?null:this.func(this.major[this.nmajor])},r.get_modifier=function(){return null},this.order=0,this.ndig=0,this.kind===D&&!this.log&&r.major.length){let n=0,h=0,o=!1;if(!e){const f=Math.max(Math.abs(r.major.at(0)),Math.abs(r.major.at(-1))),g=Math.min(Math.abs(r.major.at(0)),Math.abs(r.major.at(-1))),m=f>0?Math.round(Math.log10(f)/3)*3:0,v=g>0?Math.round(Math.log10(g)/3)*3:0;o=f<2e4,(f||g)&&(n=Math.max(m,v)+3,h=Math.min(m,v)-3)}let d=0,c=this.ndig,l=1e10;for(let f=h;f<=n;f+=3){if(o&&f===3)continue;this.order=f,this.ndig=0;let g=[],m=0,v=0;for(;m<r.major.length;){const x=r.major[m],P=this.format(x,!0);let _=g.indexOf(P)>=0;if(!_)try{const w=parseFloat(P)*Math.pow(10,f);_=Math.abs(x)>1e-30&&Math.abs(w-x)/Math.abs(x)>1e-8}catch{console.warn("Failure by parsing of",P),_=!0}if(_){if(++this.ndig>15){v+=1e10;break}g=[],m=v=0}else g.push(P),v+=P.length,m++}!f&&this.ndig<4&&(v-=r.major.length*2+3),v<l&&(l=v,d=this.order,c=this.ndig)}this.order=d,this.ndig=c,s&&(this.order&&console.warn(`Axis painter - integer labels are configured, but axis order ${this.order} is preferable`),this.ndig&&console.warn(`Axis painter - integer labels are configured, but ${this.ndig} decimal digits are required`),this.ndig=0,this.order=0)}return r}isCenteredLabels(){return this.kind===F?!0:this.kind==="log"?!1:this.v7EvalAttr("labels_center",!1)}isRotateLabels(){return!1}processLabelsMove(t,e){if(this.optionUnlab||!this.axis_g)return!1;const i=this.axis_g.select(".axis_labels");if(!i||i.size()!==1)return!1;if(t==="start"){const a=i.node().getBBox();return i.append("rect").classed("drag",!0).attr("x",a.x).attr("y",a.y).attr("width",a.width).attr("height",a.height).style("cursor","move").call(tt,!0),this.vertical?this.drag_pos0=e[0]:this.drag_pos0=e[1],!0}let s=i.property("fix_offset");if(this.vertical?(s+=Math.round(e[0]-this.drag_pos0),z(i,s)):(s+=Math.round(e[1]-this.drag_pos0),z(i,0,s)),s||z(i),t==="stop"&&(i.select("rect.drag").remove(),delete this.drag_pos0,s!==i.property("fix_offset"))){i.property("fix_offset",s);const a=i.property("side")||1;this.labelsOffset=s/(this.vertical?-a:a),this.changeAxisAttr(1,"labels_offset",this.labelsOffset/this.scalingSize)}return!0}addTitleDrag(t,e){if(!y.MoveResize||this.isBatchMode())return;let i=null,s,a,r,n,h,o;const d=Ct().subject(Object);d.on("start",c=>{c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation();const l=t.node().getBBox(),f=this.vertical?l.height:l.width;r=s=t.property("shift_x"),n=a=t.property("shift_y"),this.titlePos==="center"?o=1:o=this.titlePos==="left"?0:2,h=[0,this.gr_range/2,this.gr_range];const g=this.vertical?-f:f,m=this.isReverseAxis()?2:0;this.title_align==="middle"?(h[m]+=g/2,h[2-m]-=g/2):this.title_align==="begin"^this.isTitleRotated()?(h[1]-=g/2,h[2-m]-=g):(h[m]+=g,h[1]+=g/2),h[o]=this.vertical?a:s,i=t.append("rect").attr("x",l.x).attr("y",l.y).attr("width",l.width).attr("height",l.height).style("cursor","move").call(tt,!0)}).on("drag",c=>{if(!i)return;c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation(),s+=c.dx,a+=c.dy;const l=this.vertical?a:s;let f,g,m=0;for(let v=1;v<3;++v)Math.abs(l-h[v])<Math.abs(l-h[m])&&(m=v);this.vertical?(f=s,g=h[m]):(f=h[m],g=a),r=f,n=g,o=m,z(t,r,n)}).on("end",c=>{if(!i)return;c.sourceEvent.preventDefault(),c.sourceEvent.stopPropagation();const l=t.property("basepos")||0;t.property("shift_x",r).property("shift_y",n),this.titleOffset=(this.vertical?l-r:n-l)*e,o===1?this.titlePos="center":o===0?this.titlePos="left":this.titlePos="right",this.changeAxisAttr(0,"title_position",this.titlePos,"title_offset",this.titleOffset/this.scalingSize),i.remove(),i=null}),t.style("cursor","move").call(d)}isInsideGrRange(t,e,i){return e||(e=0),i===void 0&&(i=e),this.gr_range<0?t>=this.gr_range-i&&t<=e:t>=-e&&t<=this.gr_range+i}getGrRange(t){return t||(t=0),this.gr_range<0?this.gr_range-t:this.gr_range+t}isReverseAxis(){return!this.vertical!=this.getGrRange()>0}drawMainLine(t){let e="";if(this.endingSize&&this.endingStyle){let i=this.gr_range>0?-this.endingSize:this.endingSize;const s=Math.round(i*.7);i=Math.round(i),this.vertical?e=`l${s},${i}M0,${this.gr_range}l${-s},${i}`:e=`l${i},${s}M${this.gr_range},0l${i},${-s}`}t.append("svg:path").attr("d","M0,0"+(this.vertical?"v":"h")+this.gr_range+e).call(this.lineatt.func).style("fill",e?"none":null)}drawTicks(t,e,i){i&&(this.ticks=[]),this.handle.reset();let s="",a=0;for(this.ticksSide==="both"&&(e=1,a=1);this.handle.next(!0);){let h=Math.round(this.ticksSize/4),o;this.handle.kind<3&&(h=Math.round(this.ticksSize/2));const d=this.handle.grpos-this.axis_shift;(this.startingSize||this.endingSize)&&!this.isInsideGrRange(d,-Math.abs(this.startingSize),-Math.abs(this.endingSize))||(this.handle.kind===1&&((this.kind===F||this.format(this.handle.tick,!0)!==null)&&(h=this.ticksSize),i&&this.ticks.push(d)),a>0?o=-h:e<0?(o=-h,h=0):o=0,s+=this.vertical?`M${h},${d}H${o}`:`M${d},${-h}V${-o}`)}s&&t.append("svg:path").attr("d",s).style("stroke",this.ticksColor||this.lineatt.color).style("stroke-width",!this.ticksWidth||this.ticksWidth===1?null:this.ticksWidth);const r=Math.round(.25*this.ticksSize),n=Math.round(1.25*this.ticksSize);return{"-1":e>0||a?n:r,1:e<0||a?n:r}}async drawLabels(t,e,i){const s=this.isCenteredLabels(),a=!!this.labelsFont.angle,r=t.append("svg:g").attr("class","axis_labels").property("side",e),n=this.handle.lbl_pos||this.handle.major;let h=1,o=0,d=!1,c=0,l=0;function f(x){c=Math.max(c,this.result_width),l=Math.max(l,this.result_height);const P=this.result_width;if(P&&(!x.vertical&&!a||x.vertical&&a)&&!x.log){const w=this.gap_before?this.gap_after?this.gap_before*.45+this.gap_after*.45:.9*this.gap_before:.9*this.gap_after;h=Math.min(h,w/P)}h>1e-4&&h<.8&&!x.vertical&&!a&&o>5&&e>0&&(d=!0);const _=h*(d?3:1);_>1e-4&&_<1&&x.scaleTextDrawing(1/_,r)}const g=Math.round((this.vertical?-e:e)*this.labelsOffset),m=Math.round((this.vertical?-e:e)*i[e]);let v=0;return g&&z(r,this.vertical?g:0,this.vertical?0:g),r.property("fix_offset",g),this.startTextDrawingAsync(this.labelsFont,"font",r).then(()=>{for(let x=0;x<n.length;++x){const P=this.format(n[x],!0);if(P===null)continue;const _={text:P,latex:1,draw_g:r};let w=Math.round(this.func(n[x]));if(_.gap_before=x>0?Math.abs(Math.round(w-this.func(n[x-1]))):0,_.gap_after=x<n.length-1?Math.abs(Math.round(this.func(n[x+1])-w)):0,s){const b=_.gap_after||_.gap_before;if(w=Math.round(w-(this.vertical?.5*b:-.5*b)),!this.isInsideGrRange(w,5))continue}if(o=Math.max(o,P.length),w-=this.axis_shift,!((this.startingSize||this.endingSize)&&!this.isInsideGrRange(w,-Math.abs(this.startingSize),-Math.abs(this.endingSize)))){if(this.vertical?(_.x=m,_.y=w,_.align=a?e<0?23:20:e<0?12:32):(_.x=w,_.y=m,_.align=a?e<0?12:32:e<0?20:23,this.log&&!this.noexp&&!this.vertical&&_.align===23&&(_.align=21,_.y+=this.labelsFont.size)),_.post_process=f,this.drawText(_),v&&w!==v&&(this.vertical&&!a||!this.vertical&&a)){const b=Math.abs(w-v);h=Math.min(h,.9*b/this.labelsFont.size)}v=w}}return this.order&&this.drawText({x:this.vertical?e*5:this.getGrRange(5),y:this.has_obstacle?m:this.vertical?this.getGrRange(3):-3*e,align:this.vertical?e<0?30:10:this.has_obstacle^e<0?13:10,latex:1,text:"#times"+this.formatExp(10,this.order),draw_g:r}),this.finishTextDrawing(r)}).then(()=>{if(d&&r.selectAll("text").each(function(){const x=M(this),P=x.attr("transform");x.attr("transform",P+" rotate(25)").style("text-anchor","start")}),this.vertical)i[e]+=Math.round(a?1.2*l:c+.4*this.labelsFont.size)-e*g;else{const x=d?c*Math.sin(.1388888888888889*Math.PI)+l*(Math.cos(.1388888888888889*Math.PI)+.2):0;i[e]+=Math.round(Math.max(a?c+.4*this.labelsFont.size:1.2*l,1.2*this.labelsFont.size,x))+g}return i})}addZoomingRect(t,e,i){if(y.Zooming&&!this.disable_zooming&&!this.isBatchMode()){const s=Math.max(i[e],10),a=this.vertical?`v${this.gr_range}h${-e*s}v${-this.gr_range}`:`h${this.gr_range}v${e*s}h${-this.gr_range}`;t.append("svg:path").attr("d",`M0,0${a}z`).attr("class","axis_zoom").style("opacity","0").style("cursor","crosshair")}}isTitleRotated(){return this.titleFont&&this.titleFont.angle!==(this.vertical?270:0)}async drawTitle(t,e,i){if(!this.fTitle)return this;const s=t.append("svg:g").attr("class","axis_title"),a=this.isTitleRotated();return this.startTextDrawingAsync(this.titleFont,"font",s).then(()=>{let r,n,h;return this.title_align=this.titleCenter?"middle":this.titleOpposite^(this.isReverseAxis()||a)?"begin":"end",this.vertical?(h=Math.round(-e*i[e]),r=h+Math.round(-e*this.titleOffset),n=Math.round(this.titleCenter?this.gr_range/2:this.titleOpposite?0:this.gr_range),this.drawText({align:[this.title_align,e<0^a?"top":"bottom"],text:this.fTitle,draw_g:s})):(r=Math.round(this.titleCenter?this.gr_range/2:this.titleOpposite?0:this.gr_range),h=Math.round(e*i[e]),n=h+Math.round(e*this.titleOffset),this.drawText({align:[this.title_align,e>0^a?"top":"bottom"],text:this.fTitle,draw_g:s})),z(s,r,n).property("basepos",h).property("shift_x",r).property("shift_y",n),this.addTitleDrag(s,e),this.finishTextDrawing(s)})}extractDrawAttributes(t){const e=this.getPadPainter(),i=e?.getPadRect()||{width:10,height:10};this.scalingSize=t||(this.vertical?i.width:i.height),this.createv7AttLine("line_"),this.optionUnlab=this.v7EvalAttr("labels_hide",!1),this.endingStyle=this.v7EvalAttr("ending_style",""),this.endingSize=Math.round(this.v7EvalLength("ending_size",this.scalingSize,this.endingStyle?.02:0)),this.startingSize=Math.round(this.v7EvalLength("starting_size",this.scalingSize,0)),this.ticksSize=this.v7EvalLength("ticks_size",this.scalingSize,.02),this.ticksSide=this.v7EvalAttr("ticks_side","normal"),this.ticksColor=this.v7EvalColor("ticks_color",""),this.ticksWidth=this.v7EvalAttr("ticks_width",1),t&&this.ticksSize<0&&(this.ticksSize=-this.ticksSize),this.fTitle=this.v7EvalAttr("title_value",""),this.fTitle?(this.titleFont=this.v7EvalFont("title",{size:.03},t||e?.getPadHeight()||10),this.titleFont.roundAngle(180,this.vertical?270:0),this.titleOffset=this.v7EvalLength("title_offset",this.scalingSize,0),this.titlePos=this.v7EvalAttr("title_position","right"),this.titleCenter=this.titlePos==="center",this.titleOpposite=this.titlePos==="left"):(delete this.titleFont,delete this.titleOffset,delete this.titlePos),this.labelsFont=this.v7EvalFont("labels",{size:t?.05:.03}),this.labelsFont.roundAngle(180),this.labelsFont.angle&&(this.labelsFont.angle=270),this.labelsOffset=this.v7EvalLength("labels_offset",this.scalingSize,0),t&&(this.ticksSize=this.labelsFont.size*.5),this.maxTickSize&&this.ticksSize>this.maxTickSize&&(this.ticksSize=this.maxTickSize)}async drawAxis(t,e,i){let s=t;i===void 0&&(i=1),this.standalone||(s=t.selectChild(`.${this.name}_container`),s.empty()?s=t.append("svg:g").attr("class",`${this.name}_container`):s.selectAll("*").remove()),s.attr("transform",e),this.extractDrawAttributes(),this.axis_g=s,this.side=i,this.ticksSide==="invert"&&(i=-i),this.standalone&&this.drawMainLine(s);const a=!1,r=!1,n=!1;this.handle=this.createTicks(!1,n,a,r);const h=this.drawTicks(s,i,!0);return(this.optionUnlab?Promise.resolve(h):this.drawLabels(s,i,h)).then(d=>(this.addZoomingRect(s,this.standalone?i:this.side,d),this.drawTitle(s,i,d)))}setAfterDrawHandler(t){this._afterDrawAgain=t}drawAxisAgain(){if(!this.axis_g||!this.side)return;this.axis_g.selectAll("*").remove(),this.extractDrawAttributes();let t=this.side;this.ticksSide==="invert"&&(t=-t),this.standalone&&this.drawMainLine(this.axis_g);const e=this.drawTicks(this.axis_g,t,!1);return(this.optionUnlab?Promise.resolve(e):this.drawLabels(this.axis_g,t,e)).then(s=>(this.addZoomingRect(this.axis_g,this.standalone?t:this.side,s),this.drawTitle(this.axis_g,t,s))).then(()=>{p(this._afterDrawAgain)&&this._afterDrawAgain()})}drawAxisOtherPlace(t,e,i,s){let a=t.selectChild(`.${this.name}_container2`);a.empty()?a=t.append("svg:g").attr("class",`${this.name}_container2`):a.selectAll("*").remove(),a.attr("transform",e),this.ticksSide==="invert"&&(i=-i);const r=this.drawTicks(a,i,!1);return(this.optionUnlab||s?Promise.resolve(r):this.drawLabels(a,i,r)).then(h=>(this.addZoomingRect(a,i,h),!0))}zoomStandalone(t,e){return this.changeAxisAttr(1,"zoomMin",t,"zoomMax",e)}redraw(){const t=this.getObject(),e=this.getPadPainter(),i=e.getCoordinate(t.fPos),s=this.v7EvalAttr("reverse",!1),a=t.fLabels.length,r=a>0?0:this.v7EvalAttr("min",0),n=a>0?a:this.v7EvalAttr("max",100);let h=e.getPadLength(t.fVertical,t.fLength),o=this.v7EvalAttr("zoomMin"),d=this.v7EvalAttr("zoomMax");t.fVertical&&(h-=e.getPadHeight()),o===d&&(o=r,d=n),this.configureAxis("axis",r,n,o,d,t.fVertical,void 0,h,{reverse:s,labels:a>0});const c=this.createG();this.standalone=!0;const l=this.drawAxis(c,z(i.x,i.y));return this.isBatchMode()?l:l.then(()=>{y.ContextMenu&&c.on("contextmenu",f=>{f.stopPropagation(),f.preventDefault(),N(f,this).then(g=>{g.header("RAxisDrawable",`${G}ROOT_1_1Experimental_1_1RAxisBase.html`),g.add("Unzoom",()=>this.zoomStandalone()),this.fillAxisContextMenu(g,""),g.show()})}),ct(this,{x:i.x,y:i.y,width:this.vertical?10:h,height:this.vertical?h:10,only_move:!0,redraw:f=>this.positionChanged(f)}),c.on("dblclick",()=>this.zoomStandalone()),y.ZoomWheel&&c.on("wheel",f=>{f.stopPropagation(),f.preventDefault();const g=ft(f,this.getG().node()),m=this.vertical?1-g[1]/h:g[0]/h,v=this.analyzeWheelEvent(f,m);v.changed&&this.zoomStandalone(v.min,v.max)})})}positionChanged(t){const e=this.getObject(),i=this.getPadPainter().getPadRect(),s=t.x/i.width,a=1-t.y/i.height;e.fPos.fHoriz.fArr=[s],e.fPos.fVert.fArr=[a],this.submitCanvExec(`SetPos({${s.toFixed(4)},${a.toFixed(4)}})`)}changeAxisAttr(t,...e){const i={};let s=0;for(;s<e.length;)this.v7AttrChange(i,e[s],e[s+1]),this.v7SetAttr(e[s],e[s+1]),s+=2;this.v7SendAttrChanges(i,!1),t===1?this.standalone?this.redraw():this.drawAxisAgain():t&&this.redrawPad()}changeAxisLog(t){this.kind===F||this.kind===I||(t==="toggle"&&(t=this.log?0:10),t=parseFloat(t),Number.isFinite(t)&&this.changeAxisAttr(2,"log",t,"symlog",0))}fillAxisContextMenu(t,e){return e&&t.add("Unzoom",()=>this.getFramePainter().unzoom(e)),t.sub("Log scale",()=>this.changeAxisLog("toggle")),t.addchk(!this.log&&!this.symlog,"linear",0,i=>this.changeAxisLog(i)),t.addchk(this.log&&!this.symlog&&this.logbase===10,"log10",()=>this.changeAxisLog(10)),t.addchk(this.log&&!this.symlog&&this.logbase===2,"log2",()=>this.changeAxisLog(2)),t.addchk(this.log&&!this.symlog&&Math.abs(this.logbase-Math.exp(1))<.1,"ln",()=>this.changeAxisLog(Math.exp(1))),t.addchk(!this.log&&this.symlog,"symlog",0,()=>t.input("set symlog constant",this.symlog||10,"float").then(i=>this.changeAxisAttr(2,"symlog",i))),t.endsub(),t.add("Divisions",()=>t.input("Set axis devisions",this.v7EvalAttr("ndiv",508),"int").then(i=>this.changeAxisAttr(2,"ndiv",i))),t.sub("Ticks"),t.addRColorMenu("color",this.ticksColor,i=>this.changeAxisAttr(1,"ticks_color",i)),t.addSizeMenu("size",0,.05,.01,this.ticksSize/this.scalingSize,i=>this.changeAxisAttr(1,"ticks_size",i)),t.addSelectMenu("side",["normal","invert","both"],this.ticksSide,i=>this.changeAxisAttr(1,"ticks_side",i)),t.endsub(),!this.optionUnlab&&this.labelsFont&&(t.sub("Labels"),t.addSizeMenu("offset",-.05,.05,.01,this.labelsOffset/this.scalingSize,i=>this.changeAxisAttr(1,"labels_offset",i)),t.addRAttrTextItems(this.labelsFont,{noangle:1,noalign:1},i=>this.changeAxisAttr(1,"labels_"+i.name,i.value)),t.addchk(this.labelsFont.angle,"rotate",i=>this.changeAxisAttr(1,"labels_angle",i?180:0)),t.endsub()),t.sub("Title",()=>t.input("Enter axis title",this.fTitle).then(i=>this.changeAxisAttr(1,"title_value",i))),this.fTitle&&(t.addSizeMenu("offset",-.05,.05,.01,this.titleOffset/this.scalingSize,i=>this.changeAxisAttr(1,"title_offset",i)),t.addSelectMenu("position",["left","center","right"],this.titlePos,i=>this.changeAxisAttr(1,"title_position",i)),t.addchk(this.isTitleRotated(),"rotate",i=>this.changeAxisAttr(1,"title_angle",i?180:0)),t.addRAttrTextItems(this.titleFont,{noangle:1,noalign:1},i=>this.changeAxisAttr(1,"title_"+i.name,i.value))),t.endsub(),!0}}class te extends U{#i;#s;#e;#t;#m;#a;#c;#o;#n;#r;#f;#l;#h;#d;#g;constructor(t,e){super(t,e,"","frame"),this.mode3d=!1,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.#n=!1,this.#r=0,this.v7_frame=!0}getFramePainter(){return this}is_root6(){return!1}setFrameActive(t){this.#d=t&&y.HandleKeys,this.control&&(this.control.enableKeys=this.#d)}isEnabledKeys(){return this.#d}swap_xy(){return this.#a}reverse_x(){return this.#c}reverse_y(){return this.#o}setLastEventPos(t){this.#g=t}getLastEventPos(){return this.#g}updateAttributes(t){if(this.fX1NDC===void 0||t&&!this.$modifiedNDC){const e=this.getPadPainter().getPadRect();this.fX1NDC=this.v7EvalLength("margins_left",e.width,A.fPadLeftMargin)/e.width,this.fY1NDC=this.v7EvalLength("margins_bottom",e.height,A.fPadBottomMargin)/e.height,this.fX2NDC=1-this.v7EvalLength("margins_right",e.width,A.fPadRightMargin)/e.width,this.fY2NDC=1-this.v7EvalLength("margins_top",e.height,A.fPadTopMargin)/e.height}this.fillatt||this.createv7AttFill(),this.createv7AttLine("border_")}getProjectionFunc(){return zt(this.#r)}recalculateRange(t){this.#r=t||0,this.#r===2&&(this.scale_ymin<=-90||this.scale_ymax>=90)&&(console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`),this.#r=0);const e=this.getProjectionFunc();if(!e)return;const i=[e(this.scale_xmin,this.scale_ymin),e(this.scale_xmin,this.scale_ymax),e(this.scale_xmax,this.scale_ymax),e(this.scale_xmax,this.scale_ymin)];this.scale_xmin<0&&this.scale_xmax>0&&(i.push(e(0,this.scale_ymin)),i.push(e(0,this.scale_ymax))),this.scale_ymin<0&&this.scale_ymax>0&&(i.push(e(this.scale_xmin,0)),i.push(e(this.scale_xmax,0))),this.original_xmin=this.scale_xmin,this.original_xmax=this.scale_xmax,this.original_ymin=this.scale_ymin,this.original_ymax=this.scale_ymax,this.scale_xmin=this.scale_xmax=i[0].x,this.scale_ymin=this.scale_ymax=i[0].y;for(let s=1;s<i.length;++s)this.scale_xmin=Math.min(this.scale_xmin,i[s].x),this.scale_xmax=Math.max(this.scale_xmax,i[s].x),this.scale_ymin=Math.min(this.scale_ymin,i[s].y),this.scale_ymax=Math.max(this.scale_ymax,i[s].y)}getFrameSvg(){return this.getPadPainter().getFrameSvg()}drawGrids(){const t=this.getFrameSvg().selectChild(".axis_layer");t.selectAll(".xgrid").remove(),t.selectAll(".ygrid").remove();const e=this.getFrameHeight(),i=this.getFrameWidth(),s=this.v7EvalAttr("gridX",!1),a=this.v7EvalAttr("gridY",!1),r=St(A.fGridStyle),n=A.fGridColor>0?this.getColor(A.fGridColor):"black";if(this.x_handle&&(this.x_handle.draw_grid=s),this.x_handle?.draw_grid){let h="";for(let o=0;o<this.x_handle.ticks.length;++o)h+=this.#a?`M0,${e+this.x_handle.ticks[o]}h${i}`:`M${this.x_handle.ticks[o]},0v${e}`;h&&t.append("svg:path").attr("class","xgrid").attr("d",h).style("stroke",n).style("stroke-width",A.fGridWidth).style("stroke-dasharray",r)}if(this.y_handle&&(this.y_handle.draw_grid=a),this.y_handle?.draw_grid){let h="";for(let o=0;o<this.y_handle.ticks.length;++o)h+=this.#a?`M${this.y_handle.ticks[o]},0v${e}`:`M0,${e+this.y_handle.ticks[o]}h${i}`;h&&t.append("svg:path").attr("class","ygrid").attr("d",h).style("stroke",n).style("stroke-width",A.fGridWidth).style("stroke-dasharray",r)}}axisAsText(t,e){const i=this[`${t}_handle`];return i?i.axisAsText(e,y[t.toUpperCase()+"ValuesFormat"]):e.toPrecision(4)}_setAxisRange(t,e,i){const s=`${t}min`,a=`${t}max`;if(this[s]!==this[a])return;let r=this.v7EvalAttr(`${t}_min`),n=this.v7EvalAttr(`${t}_max`);r!==void 0&&(e=r),n!==void 0&&(i=n),e<i&&(this[s]=e,this[a]=i);const h=`zoom_${t}min`,o=`zoom_${t}max`;this[h]===this[o]&&!this.zoomChangedInteractive(t)&&(r=this.v7EvalAttr(`${t}_zoomMin`),n=this.v7EvalAttr(`${t}_zoomMax`),(r!==void 0||n!==void 0)&&(this[h]=r===void 0?this[s]:r,this[o]=n===void 0?this[a]:n))}setAxesRanges(t,e,i,s,a,r,n,h,o){this.#n||(this.xaxis=t,this._setAxisRange("x",e,i),this.yaxis=s,this._setAxisRange("y",a,r),this.zaxis=n,this._setAxisRange("z",h,o))}setAxes2Ranges(t,e,i,s,a,r,n,h){t&&(this.x2axis=e,this._setAxisRange("x2",i,s)),a&&(this.y2axis=r,this._setAxisRange("y2",n,h))}createXY(t){if(this.self_drawaxes)return;this.cleanXY(),t||(t={ndim:1}),this.v6axes=!0,this.#a=t.swap_xy||!1,this.#c=t.reverse_x||!1,this.#o=t.reverse_y||!1,this.logx=this.v7EvalAttr("x_log",0),this.logy=this.v7EvalAttr("y_log",0);const e=this.getFrameWidth(),i=this.getFrameHeight(),s=this.getPadPainter();this.scales_ndim=t.ndim,this.scale_xmin=this.xmin,this.scale_xmax=this.xmax,this.scale_ymin=this.ymin,this.scale_ymax=this.ymax,t.extra_y_space&&((this.#a?this.logx:this.logy)&&this.scale_ymax>0?this.scale_ymax=Math.exp(Math.log(this.scale_ymax)*1.1):this.scale_ymax+=(this.scale_ymax-this.scale_ymin)*.1),t.zoom_xmin!==t.zoom_xmax&&(this.zoom_xmin===this.zoom_xmax||!this.zoomChangedInteractive("x"))&&(this.zoom_xmin=t.zoom_xmin,this.zoom_xmax=t.zoom_xmax),t.zoom_ymin!==t.zoom_ymax&&(this.zoom_ymin===this.zoom_ymax||!this.zoomChangedInteractive("y"))&&(this.zoom_ymin=t.zoom_ymin,this.zoom_ymax=t.zoom_ymax),this.zoom_xmin!==this.zoom_xmax&&(this.scale_xmin=this.zoom_xmin,this.scale_xmax=this.zoom_xmax),this.zoom_ymin!==this.zoom_ymax&&(this.scale_ymin=this.zoom_ymin,this.scale_ymax=this.zoom_ymax);let a=this.xaxis,r=this.yaxis;a?._typename!==B&&(a=W(B)),r?._typename!==B&&(r=W(B)),this.x_handle=new et(s,a,!0),this.x_handle.optionUnlab=this.v7EvalAttr("x_labels_hide",!1),this.x_handle.configureAxis("xaxis",this.xmin,this.xmax,this.scale_xmin,this.scale_xmax,this.#a,this.#a?[0,i]:[0,e],{reverse:this.#c,log:this.#a?this.logy:this.logx,symlog:this.#a?t.symlog_y:t.symlog_x,logcheckmin:t.ndim>1||!this.#a,logminfactor:1e-4}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle=new et(s,r,!0),this.y_handle.optionUnlab=this.v7EvalAttr("y_labels_hide",!1),this.y_handle.configureAxis("yaxis",this.ymin,this.ymax,this.scale_ymin,this.scale_ymax,!this.#a,this.#a?[0,e]:[0,i],{reverse:this.#o,log:this.#a?this.logx:this.logy,symlog:this.#a?t.symlog_x:t.symlog_y,logcheckmin:t.ndim>1||this.#a,log_min_nz:t.ymin_nz&&t.ymin_nz<this.ymax?.5*t.ymin_nz:0,logminfactor:3e-4}),this.y_handle.assignFrameMembers(this,"y")}hasDrawnAxes(t,e){return!t&&!e?this.#n:!1}async drawAxes(){if(this.#n||this.xmin===this.xmax||this.ymin===this.ymax)return this.#n;const t=this.v7EvalAttr("ticksX",1),e=this.v7EvalAttr("ticksY",1),i=this.v7EvalAttr("swapX",!1)?-1:1,s=this.v7EvalAttr("swapY",!1)?-1:1,a=this.getFrameWidth(),r=this.getFrameHeight(),n=this.getPadPainter();this.v6axes||(this.cleanupAxes(),this.#a=!1,this.zoom_xmin!==this.zoom_xmax?(this.scale_xmin=this.zoom_xmin,this.scale_xmax=this.zoom_xmax):(this.scale_xmin=this.xmin,this.scale_xmax=this.xmax),this.zoom_ymin!==this.zoom_ymax?(this.scale_ymin=this.zoom_ymin,this.scale_ymax=this.zoom_ymax):(this.scale_ymin=this.ymin,this.scale_ymax=this.ymax),this.recalculateRange(0),this.x_handle=new T(n,this,this.xaxis,"x_"),this.x_handle.assignSnapId(this.getSnapId()),this.x_handle.draw_swapside=i<0,this.x_handle.draw_ticks=t,this.y_handle=new T(n,this,this.yaxis,"y_"),this.y_handle.assignSnapId(this.getSnapId()),this.y_handle.draw_swapside=s<0,this.y_handle.draw_ticks=e,this.z_handle=new T(n,this,this.zaxis,"z_"),this.z_handle.assignSnapId(this.getSnapId()),this.x_handle.configureAxis("xaxis",this.xmin,this.xmax,this.scale_xmin,this.scale_xmax,!1,[0,a],a,{reverse:!1}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle.configureAxis("yaxis",this.ymin,this.ymax,this.scale_ymin,this.scale_ymax,!0,[r,0],-r,{reverse:!1}),this.y_handle.assignFrameMembers(this,"y"),this.z_handle.configureZAxis("zaxis",this));const h=this.getFrameSvg().selectChild(".axis_layer");this.x_handle.has_obstacle=!1;const o=this.#a?this.y_handle:this.x_handle,d=this.#a?this.x_handle:this.y_handle;let c;if(this.getPadPainter()?.isFastDrawing())c=Promise.resolve(!0);else if(this.v6axes){o.disable_ticks=t<=0,d.disable_ticks=e<=0;const m=o.drawAxis(h,a,r,o.invert_side?null:`translate(0,${r})`,t>1?-r:0,!1,void 0,!1,this.getPadPainter().getPadHeight()-r-this.getFrameY()),v=d.drawAxis(h,a,r,d.invert_side?`translate(${a})`:null,e>1?a:0,!1,d.invert_side?0:this.#i,!1);c=Promise.all([m,v]).then(()=>this.drawGrids())}else{let l=[];t>0&&l.push(o.drawAxis(h,z(0,i>0?r:0),i)),e>0&&l.push(d.drawAxis(h,z(s>0?0:a,r),s)),c=Promise.all(l).then(()=>(l=[],t>1&&l.push(o.drawAxisOtherPlace(h,z(0,i<0?r:0),-i,t===2)),e>1&&l.push(d.drawAxisOtherPlace(h,z(s<0?0:a,r),-s,e===2)),Promise.all(l))).then(()=>this.drawGrids())}return c.then(()=>(this.#n=!0,!0))}drawAxes2(t,e){const i=this.getFrameWidth(),s=this.getFrameHeight(),a=this.getPadPainter(),r=this.getFrameSvg().selectChild(".axis_layer");let n,h;return t&&(this.zoom_x2min!==this.zoom_x2max?(this.scale_x2min=this.zoom_x2min,this.scale_x2max=this.zoom_x2max):(this.scale_x2min=this.x2min,this.scale_x2max=this.x2max),this.x2_handle=new T(a,this,this.x2axis,"x2_"),this.x2_handle.assignSnapId(this.getSnapId()),this.x2_handle.configureAxis("x2axis",this.x2min,this.x2max,this.scale_x2min,this.scale_x2max,!1,[0,i],i,{reverse:!1}),this.x2_handle.assignFrameMembers(this,"x2"),n=this.x2_handle.drawAxis(r,null,-1)),e&&(this.zoom_y2min!==this.zoom_y2max?(this.scale_y2min=this.zoom_y2min,this.scale_y2max=this.zoom_y2max):(this.scale_y2min=this.y2min,this.scale_y2max=this.y2max),this.y2_handle=new T(a,this,this.y2axis,"y2_"),this.y2_handle.assignSnapId(this.getSnapId()),this.y2_handle.configureAxis("y2axis",this.y2min,this.y2max,this.scale_y2min,this.scale_y2max,!0,[s,0],-s,{reverse:!1}),this.y2_handle.assignFrameMembers(this,"y2"),h=this.y2_handle.drawAxis(r,z(i,s),-1)),Promise.all([n,h])}getGrFuncs(t,e){const i=t&&this.grx2,s=e&&this.gry2;return!i&&!s?this:{use_x2:i,grx:i?this.grx2:this.grx,x_handle:i?this.x2_handle:this.x_handle,logx:i?this.x2_handle.log:this.x_handle.log,scale_xmin:i?this.scale_x2min:this.scale_xmin,scale_xmax:i?this.scale_x2max:this.scale_xmax,use_y2:s,gry:s?this.gry2:this.gry,y_handle:s?this.y2_handle:this.y_handle,logy:s?this.y2_handle.log:this.y_handle.log,scale_ymin:s?this.scale_y2min:this.scale_ymin,scale_ymax:s?this.scale_y2max:this.scale_ymax,fp:this,swap_xy(){return this.fp.swap_xy()},revertAxis(a,r){return a==="x"&&this.use_x2&&(a="x2"),a==="y"&&this.use_y2&&(a="y2"),this.fp.revertAxis(a,r)},axisAsText(a,r){return a==="x"&&this.use_x2&&(a="x2"),a==="y"&&this.use_y2&&(a="y2"),this.fp.axisAsText(a,r)}}}sizeChanged(){const t={};this.v7AttrChange(t,"margins_left",this.fX1NDC),this.v7AttrChange(t,"margins_bottom",this.fY1NDC),this.v7AttrChange(t,"margins_right",1-this.fX2NDC),this.v7AttrChange(t,"margins_top",1-this.fY2NDC),this.v7SendAttrChanges(t,!1),this.redrawPad()}cleanXY(){const t=(e,i)=>{this[e]?.cleanup(),delete this[e],delete this[i]};t("x_handle","grx"),t("y_handle","gry"),t("z_handle","grz"),t("x2_handle","grx2"),t("y2_handle","gry2"),delete this.v6axes}cleanupAxes(){this.cleanXY(),this.getG()?.selectChild(".axis_layer").selectAll("*").remove(),this.#n=!1}cleanFrameDrawings(){p(this.create3DScene)&&this.create3DScene(-1),this.cleanupAxes();const t=e=>{this[e+"min"]=this[e+"max"]=0,this[`zoom_${e}min`]=this[`zoom_${e}max`]=0,this[`scale_${e}min`]=this[`scale_${e}max`]=0};t("x"),t("y"),t("z"),t("x2"),t("y2"),this.getG()?.selectChild(".main_layer").selectAll("*").remove(),this.getG()?.selectChild(".upper_layer").selectAll("*").remove()}cleanup(){this.cleanFrameDrawings(),this.getG()?.selectAll("*").remove(),this.getG()?.on("mousedown",null).on("dblclick",null).on("wheel",null).on("contextmenu",null).property("interactive_set",null),this.#h&&(window.removeEventListener("keydown",this.#h,!1),this.#h=void 0),this.#d=void 0,delete this.self_drawaxes,delete this.xaxis,delete this.yaxis,delete this.zaxis,delete this.x2axis,delete this.y2axis,this.setG(void 0),this.#f=void 0,this.#l=void 0,this.getPadPainter()?.setFramePainter(this,!1),super.cleanup()}redraw(){const t=this.getPadPainter();t?.setFramePainter(this,!0),this.updateAttributes();const e=t?.getPadRect()??{width:10,height:10},i=Math.round(e.width*this.fX1NDC),s=Math.round(e.height*(1-this.fY2NDC)),a=t?.options?.RotateFrame,r=Math.round(e.width*(this.fX2NDC-this.fX1NDC)),n=Math.round(e.height*(this.fY2NDC-this.fY1NDC));return this.#i=i,this.#s=s,this.#e=a?n:r,this.#t=a?r:n,this.#m=a?`rotate(-90,${i},${s}) translate(${i-n},${s})`:z(i,s),this.$can_drag=!a&&!t?.options?.FixFrame,this.mode3d?this:this.createFrameG()}createFrameG(){let t=this.setG(this.getFrameSvg()),e,i;t.empty()?(t=this.setG(this.getPadPainter().getLayerSvg("primitives_layer").append("svg:g").attr("class","root_frame")),this.isBatchMode()||t.append("svg:title").text(""),e=t.append("svg:rect"),i=t.append("svg:svg").attr("class","main_layer").attr("x",0).attr("y",0).attr("overflow","hidden"),t.append("svg:g").attr("class","axis_layer"),t.append("svg:g").attr("class","upper_layer")):(e=t.selectChild("rect"),i=t.selectChild(".main_layer")),this.#n=!1,t.attr("transform",this.#m),e.attr("x",0).attr("y",0).attr("width",this.#e).attr("height",this.#t).attr("rx",this.lineatt.rx||null).attr("ry",this.lineatt.ry||null).call(this.fillatt.func).call(this.lineatt.func),i.attr("width",this.#e).attr("height",this.#t).attr("viewBox",`0 0 ${this.#e} ${this.#t}`);let s=Promise.resolve(!0);return this.v7EvalAttr("drawAxes")&&(this.self_drawaxes=!0,this.setAxesRanges(),s=this.drawAxes().then(()=>this.addInteractivity())),s.then(()=>this)}getFrameX(){return this.#i||0}getFrameY(){return this.#s||0}getFrameWidth(){return this.#e||0}getFrameHeight(){return this.#t||0}getFrameRect(){return{x:this.#i||0,y:this.#s||0,width:this.getFrameWidth(),height:this.getFrameHeight(),transform:this.getG()?.attr("transform")||"",hint_delta_x:0,hint_delta_y:0}}getHistPalette(){return this.getPadPainter().getHistPalette()}configureUserClickHandler(t){this.#f=p(t)?t:null}getClickHandler(){return this.#f}configureUserDblclickHandler(t){this.#l=p(t)?t:null}getDblclickHandler(){return this.#l}async zoom(t,e,i,s,a,r,n){if(this.#r)return!1;t==="x"?(t=e,e=i,n=s,i=s=void 0):t==="y"?(n=s,s=i,i=e,t=e=void 0):t==="z"&&(n=s,a=e,r=i,t=e=i=s=void 0);let h=t!==e,o=i!==s,d=a!==r,c=!1,l=!1,f=!1;if(h){let b=0;t<=this.xmin&&(t=this.xmin,b++),e>=this.xmax&&(e=this.xmax,b++),b===2&&(h=!1,c=!0)}else c=t===e&&t===0;if(o){let b=0;i<=this.ymin&&(i=this.ymin,b++),s>=this.ymax&&(s=this.ymax,b++),b===2&&(o=!1,l=!0)}else l=i===s&&i===0;if(d){let b=0;a<=this.zmin&&(a=this.zmin,b++),r>=this.zmax&&(r=this.zmax,b++),b===2&&(d=!1,f=!0)}else f=a===r&&a===0;let g=!1,m="",v="",x="",P=!1;const _={_typename:`${C}RFrame::RUserRanges`,values:[0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1]},w=(b,j)=>{!j&&!p(b.canZoomInside)||(P=!0,h&&(j||b.canZoomInside("x",t,e))&&(this.zoom_xmin=t,this.zoom_xmax=e,g=!0,m="0",h=!1,_.values[0]=t,_.values[1]=e,_.flags[0]=_.flags[1]=!0,n&&this.zoomChangedInteractive("x",n)),o&&(j||b.canZoomInside("y",i,s))&&(this.zoom_ymin=i,this.zoom_ymax=s,g=!0,v="1",o=!1,_.values[2]=i,_.values[3]=s,_.flags[2]=_.flags[3]=!0,n&&this.zoomChangedInteractive("y",n)),d&&(j||b.canZoomInside("z",a,r))&&(this.zoom_zmin=a,this.zoom_zmax=r,g=!0,x="2",d=!1,_.values[4]=a,_.values[5]=r,_.flags[4]=_.flags[5]=!0,n&&this.zoomChangedInteractive("z",n)))};return(h||o||d)&&this.forEachPainter(b=>w(b)),!P&&this.self_drawaxes&&w(null,!0),(c||l||f)&&(c&&(this.zoom_xmin!==this.zoom_xmax&&(g=!0,m="0"),this.zoom_xmin=this.zoom_xmax=0,_.values[0]=_.values[1]=-1,n&&this.zoomChangedInteractive("x",n)),l&&(this.zoom_ymin!==this.zoom_ymax&&(g=!0,v="1"),this.zoom_ymin=this.zoom_ymax=0,_.values[2]=_.values[3]=-1,n&&this.zoomChangedInteractive("y",n)),f&&(this.zoom_zmin!==this.zoom_zmax&&(g=!0,x="2"),this.zoom_zmin=this.zoom_zmax=0,_.values[4]=_.values[5]=-1,n&&this.zoomChangedInteractive("z",n))),g?(this.v7NormalMode()&&this.v7SubmitRequest("zoom",{_typename:`${C}RFrame::RZoomRequest`,ranges:_}),this.interactiveRedraw("pad","zoom"+m+v+x).then(()=>!0)):!1}async zoomSingle(t,e,i,s){const a=["x","y","z","x2","y2"],r=a.indexOf(t);if(this.#r||!this[`${t}_handle`]&&t!=="z"||r<0)return!1;let n=e!==i,h=!1;if(n){let f=0;e<=this[t+"min"]&&(e=this[t+"min"],f++),i>=this[t+"max"]&&(i=this[t+"max"],f++),f===2&&(n=!1,h=!0)}else h=e===i&&e===0;let o=!1,d=!1;const c={_typename:`${C}RFrame::RUserRanges`,values:[0,0,0,0,0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1]},l=(f,g)=>{!g&&!p(f?.canZoomInside)||(d=!0,n&&(g||f.canZoomInside(t[0],e,i))&&(this[`zoom_${t}min`]=e,this[`zoom_${t}max`]=i,o=!0,n=!1,c.values[r*2]=e,c.values[r*2+1]=i,c.flags[r*2]=c.flags[r*2+1]=!0))};return n&&this.forEachPainter(f=>l(f)),!d&&this.self_drawaxes&&l(null,!0),h&&(this[`zoom_${t}min`]!==this[`zoom_${t}max`]&&(o=!0),this[`zoom_${t}min`]=this[`zoom_${t}max`]=0,c.values[r*2]=c.values[r*2+1]=-1),o?(s&&this.zoomChangedInteractive(t,s),this.v7NormalMode()&&this.v7SubmitRequest("zoom",{_typename:`${C}RFrame::RZoomRequest`,ranges:c}),this.interactiveRedraw("pad",`zoom${r}`).then(()=>!0)):!1}async unzoomSingle(t,e){return this.zoomSingle(t,0,0,typeof e>"u"?"unzoom":e)}isAxisZoomed(t){return this[`zoom_${t}min`]!==this[`zoom_${t}max`]}async unzoom(t,e,i){return t==="all"?this.unzoom("x2").then(()=>this.unzoom("y2")).then(()=>this.unzoom("xyz")):t==="x2"||t==="y2"?this.unzoomSingle(t):(typeof t>"u"?t=e=i=!0:S(t)&&(i=t.indexOf("z")>=0,e=t.indexOf("y")>=0,t=t.indexOf("x")>=0),this.zoom(t?0:void 0,t?0:void 0,e?0:void 0,e?0:void 0,i?0:void 0,i?0:void 0,"unzoom"))}resetZoom(){["x","y","z","x2","y2"].forEach(t=>{this[`zoom_${t}min`]=void 0,this[`zoom_${t}max`]=void 0,this[`zoom_changed_${t}`]=void 0})}zoomChangedInteractive(t,e){if(t==="reset"){this.zoom_changed_x=this.zoom_changed_y=this.zoom_changed_z=void 0;return}if(!t||t==="any")return this.zoom_changed_x||this.zoom_changed_y||this.zoom_changed_z;if(t!=="x"&&t!=="y"&&t!=="z")return;const i="zoom_changed_"+t;if(e===void 0)return this[i];if(e==="unzoom"){this[i]=this[i]===void 0;return}e&&(this[i]=!0)}fillObjectOfflineMenu(t,e){e!=="x"&&e!=="y"||t.add("Unzoom",()=>this.unzoom(e))}changeFrameAttr(t,e){const i={};this.v7AttrChange(i,t,e),this.v7SetAttr(t,e),this.v7SendAttrChanges(i,!1),this.redrawPad()}fillContextMenu(t,e,i){if(e==="pal"&&(e="z"),e==="x"||e==="y"||e==="x2"||e==="y2"){const r=this[e+"_handle"],n=i||this[e+"axis"];if(!r)return!1;if(t.header(`${e.toUpperCase()} axis`,`${G}ROOT_1_1Experimental_1_1RAxisBase.html`),p(n?.TestBit)){const h=this.getMainPainter(!0);return t.addTAxisMenu(gt,h||this,n,e),!0}return r.fillAxisContextMenu(t,e)}const s=t.size()===0;s?t.header("Frame",`${G}ROOT_1_1Experimental_1_1RFrame.html`):t.separator(),this.zoom_xmin!==this.zoom_xmax&&t.add("Unzoom X",()=>this.unzoom("x")),this.zoom_ymin!==this.zoom_ymax&&t.add("Unzoom Y",()=>this.unzoom("y")),this.zoom_zmin!==this.zoom_zmax&&t.add("Unzoom Z",()=>this.unzoom("z")),this.zoom_x2min!==this.zoom_x2max&&t.add("Unzoom X2",()=>this.unzoom("x2")),this.zoom_y2min!==this.zoom_y2max&&t.add("Unzoom Y2",()=>this.unzoom("y2")),t.add("Unzoom all",()=>this.unzoom("all")),t.separator(),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.x_handle&&t.addchk(this.x_handle.draw_grid,"Grid x",r=>this.changeFrameAttr("gridX",r)),this.y_handle&&t.addchk(this.y_handle.draw_grid,"Grid y",r=>this.changeFrameAttr("gridY",r)),this.x_handle&&!this.x2_handle&&t.addchk(this.x_handle.draw_swapside,"Swap x",r=>this.changeFrameAttr("swapX",r)),this.y_handle&&!this.y2_handle&&t.addchk(this.y_handle.draw_swapside,"Swap y",r=>this.changeFrameAttr("swapY",r)),this.x_handle&&!this.x2_handle&&(t.sub("Ticks x"),t.addchk(this.x_handle.draw_ticks===0,"off",()=>this.changeFrameAttr("ticksX",0)),t.addchk(this.x_handle.draw_ticks===1,"normal",()=>this.changeFrameAttr("ticksX",1)),t.addchk(this.x_handle.draw_ticks===2,"ticks on both sides",()=>this.changeFrameAttr("ticksX",2)),t.addchk(this.x_handle.draw_ticks===3,"labels on both sides",()=>this.changeFrameAttr("ticksX",3)),t.endsub()),this.y_handle&&!this.y2_handle&&(t.sub("Ticks y"),t.addchk(this.y_handle.draw_ticks===0,"off",()=>this.changeFrameAttr("ticksY",0)),t.addchk(this.y_handle.draw_ticks===1,"normal",()=>this.changeFrameAttr("ticksY",1)),t.addchk(this.y_handle.draw_ticks===2,"ticks on both sides",()=>this.changeFrameAttr("ticksY",2)),t.addchk(this.y_handle.draw_ticks===3,"labels on both sides",()=>this.changeFrameAttr("ticksY",3)),t.endsub()),t.addAttributesMenu(this,s?"":"Frame "),t.separator(),t.sub("Save as");const a=["svg","png","jpeg","webp"];return ut.makePDF&&a.push("pdf"),a.forEach(r=>t.add(`frame.${r}`,()=>this.getPadPainter().saveAs(r,"frame",`frame.${r}`))),t.endsub(),!0}revertAxis(t,e){return this[`${t}_handle`]?.revertPoint(e)??0}showAxisStatus(t,e){const i=t,s="axis",a=ft(e,this.getFrameSvg().node());let r=t==="x"?0:1;this.#a&&(r=1-r);const n=this.revertAxis(t,a[r]);this.showObjectStatus(i,s,`${t} : ${this.axisAsText(t,n)}`,`${Math.round(a[0])},${Math.round(a[1])}`)}addKeysHandler(){this.isBatchMode()||this.#h||typeof window>"u"||(it.assign(this),this.#h=t=>this.processKeyPress(t),window.addEventListener("keydown",this.#h,!1))}addInteractivity(t){return this.isBatchMode()||!y.Zooming&&!y.ContextMenu?!0:(it.assign(this),t||this.addBasicInteractivity(),this.addFrameInteractivity(t))}setRootPadRange(){}toggleAxisLog(t){return this[t+"_handle"]?.changeAxisLog("toggle")}}class X extends U{#i;#s;#e;#t;#m;#a;#c;#o;#n;#r;#f;#l;#h;#d;#g;#u;#_;#p;#x;#v;constructor(t,e,i,s,a){super(t,e,"","pad"),this.#e=e,this.#i=s,this.#s="",!s&&e&&(e.fObjectID?this.#s="pad"+e.fObjectID:this.#s="ppp"+ut.id_counter++),this.#t=[],this.#_=!0,this.forEachPainter=this.forEachPainterInPad;const r=this.selectDom();!r.empty()&&r.property("_batch_mode")&&(this.batch_mode=!0),i!==void 0&&this.decodeOptions(i),a&&(a!=="webpad"&&this.getCanvSvg().empty()?(this.#_=!1,this.#s="",this.setTopPainter()):this.addToPadPrimitives())}getPadName(){return this.#s}isBatchMode(){return this.batch_mode!==void 0?this.batch_mode:Z()?!0:this.isTopPad()?!1:this.getCanvPainter()?.isBatchMode()}isRoot6(){return!1}isEditable(){return!0}isButton(){return!1}isCanvas(t=!1){return this.#i?t===!0?p(this.getWebsocket)&&this.getWebsocket():S(t)?this.#i===t:!0:!1}isTopPad(){return this.isCanvas()||!this.#_}getPadPainter(){return this.isTopPad()?null:super.getPadPainter()}getCanvPainter(t){return this.isTopPad()?this:super.getCanvPainter(t)}getCanvSvg(){return this.selectDom().select(".root_canvas")}getPadSvg(){const t=this.getCanvSvg();return!this.#s||t.empty()?t:t.select(".primitives_layer .__root_pad_"+this.#s)}getLayerSvg(t){return this.getPadSvg().selectChild("."+t)}getFrameSvg(){const t=this.getLayerSvg("primitives_layer");if(t.empty())return t;let e=t.node().firstChild;for(;e;){const i=M(e);if(i.classed("root_frame"))return i;e=e.nextSibling}return M(null)}getMainPainter(){return this.#h||null}setMainPainter(t,e){(!this.#h||e)&&(this.#h=t)}cleanup(){this.#r&&console.error("pad drawing is not completed when cleanup is called"),this.#t.forEach(e=>e.cleanup());const t=this.getPadSvg();t.empty()||(t.property("pad_painter",null),this.isCanvas()||t.remove()),this.#h=void 0,this.#l=void 0,this.#a=this.#c=this.#o=this.#n=void 0,this.#r=void 0,delete this._dfltRFont,this.#t=[],this.#e=void 0,this.assignObject(null),this.#s=void 0,this.#_=!1,R({pp:this,active:!1}),super.cleanup()}getFramePainter(){return this.#l}setFramePainter(t,e){e?this.#l=t:this.#l===t&&(this.#l=void 0)}getPadWidth(){return this.#o||0}getPadHeight(){return this.#n||0}getPadScale(){return this.#m||1}getPadLog(){return!1}getPadRect(){return{x:this.#a||0,y:this.#c||0,width:this.getPadWidth(),height:this.getPadHeight()}}getFrameRect(){const t=this.getFramePainter();if(t)return t.getFrameRect();const e=this.getPadWidth(),i=this.getPadHeight(),s={};return s.szx=Math.round(.5*e),s.szy=Math.round(.5*i),s.width=2*s.szx,s.height=2*s.szy,s.x=Math.round(e/2-s.szx),s.y=Math.round(i/2-s.szy),s.hint_delta_x=s.szx,s.hint_delta_y=s.szy,s.transform=z(s.x,s.y)||"",s}getRootPad(t){return t===void 0||!t?this.#e:null}cleanPrimitives(t){if(t===!0&&(t=()=>!0),!p(t))return!1;let e=!1;for(let i=this.#t.length-1;i>=0;--i){const s=this.#t[i];t(s)&&(s.cleanup(),this.#t.splice(i,1),e=!0)}return e}async divide(){return y.Debug&&console.warn("RPadPainter.divide not implemented"),this}removePrimitive(t,e){let i,s=null;if(Number.isInteger(t)?(i=t,s=this.#t[i]):(i=this.#t.indexOf(t),s=t),i<0)return i;const a=[];let r=i-1;a.push(s),this.#t.splice(i,1);let n=0;for(;n<a.length;){for(let h=this.#t.length-1;h>=0;--h)this.#t[h].isSecondary(a[n])&&(a.push(this.#t[h]),this.#t.splice(h,1),h<=i&&r--);n++}return a.forEach(h=>{(h!==s||!e)&&h.cleanup(),this.getMainPainter()===h&&(delete this.setMainPainter(void 0,!0),r=-111)}),r}findInPrimitives(){return y.Debug&&console.warn("findInPrimitives not implemented for RPad"),null}findPainterFor(t,e,i){return this.#t.find(s=>{const a=s.getObject();return a?t&&a===t?!0:!(!e&&!i||e&&a.fName!==e||i&&a._typename!==i):!1})}getHistPalette(){const t=this.findPainterFor(void 0,void 0,`${C}RPaletteDrawable`);return t?t.getHistPalette():(this.fDfltPalette||(this.fDfltPalette={_typename:`${C}RPalette`,fColors:[{fOrdinal:0,fColor:{fColor:"rgb(53, 42, 135)"}},{fOrdinal:.125,fColor:{fColor:"rgb(15, 92, 221)"}},{fOrdinal:.25,fColor:{fColor:"rgb(20, 129, 214)"}},{fOrdinal:.375,fColor:{fColor:"rgb(6, 164, 202)"}},{fOrdinal:.5,fColor:{fColor:"rgb(46, 183, 164)"}},{fOrdinal:.625,fColor:{fColor:"rgb(135, 191, 119)"}},{fOrdinal:.75,fColor:{fColor:"rgb(209, 187, 89)"}},{fOrdinal:.875,fColor:{fColor:"rgb(254, 200, 50)"}},{fOrdinal:1,fColor:{fColor:"rgb(249, 251, 14)"}}],fInterpolate:!0,fNormalized:!0},At(this.fDfltPalette,`${C}RPalette`)),this.fDfltPalette)}getCustomPalette(t){return this.#f||(t?null:this.getCanvPainter()?.getCustomPalette(!0))}getNumPainters(){return this.#t.length}addToPrimitives(t){return this.#t.indexOf(t)<0&&this.#t.push(t),this}forEachPainterInPad(t,e){e||(e="all"),e!=="objects"&&t(this);for(let i=0;i<this.#t.length;++i){const s=this.#t[i];p(s.forEachPainterInPad)?e!=="objects"&&s.forEachPainterInPad(t,e):e!=="pads"&&t(s)}}registerForPadEvents(t){this.pad_events_receiver=t}producePadEvent(t,e,i,s){t==="select"&&p(this.selectActivePad)&&this.selectActivePad(e,i,s),p(this.pad_events_receiver)&&this.pad_events_receiver({what:t,padpainter:e,painter:i,position:s})}selectObjectPainter(t,e){const i=this.isTopPad()?this:this.getCanvPainter();t===void 0&&(t=this),e&&!this.isTopPad()&&(e=kt(this.getPadSvg(),e)),R({pp:this,active:!0}),i.producePadEvent("select",this,t,e)}setFastDrawing(t,e){const i=this.#p;this.#p=!this.hasSnapId()&&y.SmallPad&&(t<y.SmallPad.width||e<y.SmallPad.height),i!==this.#p&&this.showPadButtons()}isFastDrawing(){return this.#p}isGrayscale(){return!1}setGrayscale(){console.error("grayscale mode not implemented for RCanvas")}isDefaultPadRange(){return!0}createCanvasSvg(t,e){let s,a,r,n,h;if(t>0){if(this.#u)return t>1;if(a=this.getCanvSvg(),a.empty()||(s=a.property("height_factor"),r=this.testMainResize(t,null,s),!r.changed&&t===1))return!1;this.isBatchMode()||(n=this.getLayerSvg("btns_layer")),h=a.selectChild(".canvas_fillrect")}else{const o=this.selectDom();o.style("position")==="static"&&o.style("position","relative"),a=o.append("svg").attr("class","jsroot root_canvas").property("pad_painter",this).property("redraw_by_resize",!1),this.setTopPainter(),!this.isBatchMode()&&!this.online_canvas&&a.append("svg:title").text("ROOT canvas"),this.isBatchMode()||a.style("user-select",y.UserSelect||null),h=a.append("svg:path").attr("class","canvas_fillrect"),this.isBatchMode()||h.style("pointer-events","visibleFill").on("dblclick",d=>this.enlargePad(d,!0)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",y.ContextMenu?d=>this.padContextMenu(d):null),a.append("svg:g").attr("class","primitives_layer"),a.append("svg:g").attr("class","info_layer"),this.isBatchMode()||(n=a.append("svg:g").attr("class","btns_layer").property("leftside",y.ToolBarSide==="left").property("vertical",y.ToolBarVert)),s=.66,this.#e?.fWinSize[0]&&this.#e.fWinSize[1]&&(s=this.#e.fWinSize[1]/this.#e.fWinSize[0],(s<.1||s>10)&&(s=.66)),this.#u?(o.style("overflow","auto"),r={width:this.#e.fWinSize[0],height:this.#e.fWinSize[1]},(!r.width||!r.height)&&(r=Mt(o))):r=this.testMainResize(2,e,s)}return this.createAttFill({pattern:1001,color:0}),r.width<=5||r.height<=5?(this.hasSnapId()||(a.style("display","none"),console.warn(`Hide canvas while geometry too small w=${r.width} h=${r.height}`)),this.#o&&this.#n?(r.width=this.#o,r.height=this.#n):(r.width=800,r.height=600)):a.style("display",null),this.#u?a.attr("x",0).attr("y",0).attr("width",r.width).attr("height",r.height).style("position","absolute"):a.attr("x",0).attr("y",0).style("width","100%").style("height","100%").style("position","absolute").style("left",0).style("top",0).style("bottom",0).style("right",0),a.style("filter",y.DarkMode?"invert(100%)":null),a.attr("viewBox",`0 0 ${r.width} ${r.height}`).attr("preserveAspectRatio","none").property("height_factor",s).property("draw_x",0).property("draw_y",0).property("draw_width",r.width).property("draw_height",r.height),this.#a=0,this.#c=0,this.#o=r.width,this.#n=r.height,h.attr("d",`M0,0H${r.width}V${r.height}H0Z`).call(this.fillatt.func),this.setFastDrawing(r.width,r.height),p(this.alignButtons)&&n&&this.alignButtons(n,r.width,r.height),!0}drawItemNameOnCanvas(){}enlargePad(t,e,i){if(t?.preventDefault(),t?.stopPropagation(),e&&this.isCanvas(!0)&&this.enlargeMain("state")==="off")return;const s=this.getCanvSvg(),a=s.property("pad_enlarged");if(this.isTopPad()||!a&&!this.hasObjectsToDraw()&&!this.#t){if(this.#u||!this.enlargeMain(i?!1:"toggle"))return;this.enlargeMain("state")==="off"?s.property("pad_enlarged",null):R({pp:this,active:!0})}else!a&&!i?(this.enlargeMain(!0,!0),s.property("pad_enlarged",this.#e),R({pp:this,active:!0})):a===this.#e?(this.enlargeMain(!1),s.property("pad_enlarged",null)):!i&&e&&console.error("missmatch with pad double click events");return this.checkResize(!0)}createPadSvg(t){if(this.isTopPad())return this.createCanvasSvg(t?2:0),!0;const e=this.getPadPainter()?.getPadSvg(),i=this.getCanvSvg(),s=e.property("draw_width"),a=e.property("draw_height"),r=i.property("pad_enlarged");let n=!0,h=s,o=a,d=0,c=0,l,f,g=null;return this.#e?.fPos&&this.#e?.fSize&&(d=Math.round(s*this.#e.fPos.fHoriz.fArr[0]),c=Math.round(a*this.#e.fPos.fVert.fArr[0]),h=Math.round(s*this.#e.fSize.fHoriz.fArr[0]),o=Math.round(a*this.#e.fSize.fVert.fArr[0])),r&&(n=!1,r===this.#e?n=!0:this.forEachPainterInPad(m=>{m.getObject()===r&&(n=!0)},"pads"),n&&(h=s,o=a,d=c=0)),t?(l=this.getPadSvg(),f=l.selectChild(".root_pad_border"),this.isBatchMode()||(g=this.getLayerSvg("btns_layer")),this.addPadInteractive(!0)):(l=e.selectChild(".primitives_layer").append("svg:svg").classed("__root_pad_"+this.#s,!0).attr("pad",this.#s).property("pad_painter",this),this.isBatchMode()||l.append("svg:title").text("ROOT subpad"),f=l.append("svg:path").attr("class","root_pad_border"),l.append("svg:g").attr("class","primitives_layer"),this.isBatchMode()||(g=l.append("svg:g").attr("class","btns_layer").property("leftside",y.ToolBarSide!=="left").property("vertical",y.ToolBarVert)),y.ContextMenu&&f.on("contextmenu",m=>this.padContextMenu(m)),this.isBatchMode()||f.style("pointer-events","visibleFill").on("dblclick",m=>this.enlargePad(m,!0)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus())),this.createAttFill({attr:this.#e}),this.createAttLine({attr:this.#e,color0:this.#e.fBorderMode===0?"none":""}),l.style("display",n?null:"none").attr("viewBox",`0 0 ${h} ${o}`).attr("preserveAspectRatio","none").attr("x",d).attr("y",c).attr("width",h).attr("height",o).property("draw_x",d).property("draw_y",c).property("draw_width",h).property("draw_height",o),this.#a=d,this.#c=c,this.#o=h,this.#n=o,f.attr("d",`M0,0H${h}V${o}H0Z`).call(this.fillatt.func).call(this.lineatt.func),this.setFastDrawing(h,o),l.property("can3d")===O.Embed3D.Overlay&&this.selectDom().select(".draw3d_"+this.#s).style("display",n?"":"none"),this.alignButtons&&g&&this.alignButtons(g,h,o),n}addPadInteractive(){p(this.$userInteractive)&&(this.$userInteractive(),delete this.$userInteractive)}hasObjectsToDraw(){return this.#e?.fPrimitives?.find(t=>t._typename!==`${C}RPadDisplayItem`)}syncDraw(t){const e={kind:t||"redraw"};return this.#r===void 0?(this.#r=[e],Promise.resolve(!0)):e.kind!==!0&&this.#r.findIndex((i,s)=>s>0&&i.kind===e.kind)>0?!1:(this.#r.push(e),new Promise(i=>{e.func=i}))}confirmDraw(){if(this.#r===void 0)return console.warn("failure, should not happen");if(this.#r.shift(),!this.#r.length)this.#r=void 0;else{const t=this.#r[0];t.func&&(t.func(),delete t.func)}}async drawObject(){return console.log("Not possible to draw object without loading of draw.mjs"),null}async drawPrimitives(t){if(t===void 0)return this.isCanvas()&&(this.#v=new Date().getTime()),this.#d=this.#e?.fPrimitives?.length??0,this.syncDraw(!0).then(()=>this.drawPrimitives(0));if(!this.#e||t>=this.#d){if(this.confirmDraw(),this.#v){const e=new Date().getTime()-this.#v;e>3e3&&console.log(`Canvas drawing took ${(e*.001).toFixed(2)}s`),this.#v=void 0}return}return this.drawObject(this,this.#e.fPrimitives[t],"").then(e=>(K(e)&&(e._primitive=!0),this.drawPrimitives(t+1)))}getAutoColor(){const t=this.getHistPalette(),e=this.#g++,i=Math.max(this.#d-1,2);return t?.getColorOrdinal(e%i/i)??"blue"}processPadTooltipEvent(t){const e=[],i=[];return this.#t?.forEach(s=>{p(s.processTooltipEvent)&&e.push(s)}),t&&(t.nproc=e.length),e.forEach(s=>{const a=s.processTooltipEvent(t)||{user_info:null};i.push(a),t?.painters&&(a.painter=s)}),i}changeDarkMode(t){this.getCanvSvg().style("filter",t??y.DarkMode?"invert(100%)":null)}fillContextMenu(t){const e=this.isCanvas()?"RCanvas":"RPad";t.header(e,`${G}ROOT_1_1Experimental_1_1${e}.html`),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.isCanvas(!0)||(t.addAttributesMenu(this),this.isCanvas()&&t.addSettingsMenu(!1,!1,s=>{s==="dark"&&this.changeDarkMode()})),t.separator(),p(this.hasMenuBar)&&p(this.actiavteMenuBar)&&t.addchk(this.hasMenuBar(),"Menu bar",s=>this.actiavteMenuBar(s)),p(this.hasEventStatus)&&p(this.activateStatusBar)&&p(this.canStatusBar)&&this.canStatusBar()&&t.addchk(this.hasEventStatus(),"Event status",()=>this.activateStatusBar("toggle")),(this.enlargeMain()||!this.isTopPad()&&this.hasObjectsToDraw())&&t.addchk(this.enlargeMain("state")==="on","Enlarge "+(this.isCanvas()?"canvas":"pad"),()=>this.enlargePad());const i=this.#s||(this.isCanvas()?"canvas":"pad");return t.sub("Save as"),["svg","png","jpeg","pdf","webp"].forEach(s=>t.add(`${i}.${s}`,()=>this.saveAs(s,this.isCanvas(),`${i}.${s}`))),t.endsub(),!0}padContextMenu(t){t.stopPropagation&&(t.stopPropagation(),t.preventDefault(),this.getFramePainter()?.setLastEventPos()),N(t,this).then(e=>(this.fillContextMenu(e),this.fillObjectExecMenu(e))).then(e=>e.show())}async redrawLegend(){}deliverWebCanvasEvent(){}async redrawPad(t){const e=this.syncDraw(t);if(e===!1)return console.log("Prevent RPad redrawing"),!1;let i=!0;const s=a=>{for(;a<this.#t.length;){const r=this.#t[a++];let n=0;if((i||Wt(r))&&(n=r.redraw(t)),ht(n))return n.then(()=>s(a))}return!0};return e.then(()=>(this.isCanvas()?this.createCanvasSvg(2):i=this.createPadSvg(!0),s(0))).then(()=>(this.addPadInteractive(),st()===this&&this.getCanvPainter()?.producePadEvent("padredraw",this),this.confirmDraw(),!0))}redraw(t){return this.redrawPad(t)}needRedrawByResize(){const t=this.getPadSvg();if(!t.empty()&&t.property("can3d")===O.Embed3D.Overlay)return!0;for(let e=0;e<this.#t.length;++e)if(p(this.#t[e].needRedrawByResize)&&this.#t[e].needRedrawByResize())return!0;return!1}checkCanvasResize(t,e){if(this._ignore_resize||!this.isTopPad())return!1;const i=this.syncDraw("canvas_resize");if(i===!1)return!1;(t===!0||t===!1)&&(e=t,t=null),K(t)&&t.force&&(e=!0),e||(e=this.needRedrawByResize());let s=!1;const a=r=>!s||r>=this.#t.length?(this.confirmDraw(),s):at(this.#t[r].redraw(e?"redraw":"resize")).then(()=>a(r+1));return i.then(()=>(s=this.createCanvasSvg(e?2:1,t),s&&this.isCanvas()&&this.#e&&this.online_canvas&&!this.embed_canvas&&!this.isBatchMode()&&(this.#x&&clearTimeout(this.#x),this.#x=setTimeout(()=>{if(this.#x=void 0,!this.#e?.fWinSize)return;const r=this.getPadWidth(),n=this.getPadHeight();r>0&&n>0&&(this.#e.fWinSize[0]!==r||this.#e.fWinSize[1]!==n)&&(this.#e.fWinSize[0]=r,this.#e.fWinSize[1]=n,this.sendWebsocket(`RESIZED:[${r},${n}]`))},1e3)),a(0)))}updateObject(t){return t?(this.#e.fStyle=t.fStyle,this.#e.fAttr=t.fAttr,this.isCanvas()?(this.#e.fTitle=t.fTitle,this.#e.fWinSize=t.fWinSize):(this.#e.fPos=t.fPos,this.#e.fSize=t.fSize),!0):!1}addObjectPainter(t,e,i){t&&e&&e[i]&&!t.hasSnapId()&&(this.#t.indexOf(t)<0&&this.#t.push(t),t.assignSnapId(e[i].fObjectID),t.rstyle||(t.rstyle=e[i].fStyle||this.rstyle))}extractTObjectProp(t){if(t.fColIndex&&t.fColValue){const a=this.getColors()||Ft();for(let r=0;r<t.fColIndex.length;++r)a[t.fColIndex[r]]=H(t.fColValue[r])}const e=new U,i=t.fObject;e.assignObject(t),e.csstype=t.fCssType,e.rstyle=t.fStyle,t.fOption=e.v7EvalAttr("options","");const s=(a,r)=>{const n=e.v7EvalColor(r,"");n&&(i[a]=Ht(n,this.getColors()))};i.fLineColor!==void 0&&i.fLineWidth!==void 0&&i.fLineStyle!==void 0&&(s("fLineColor","line_color"),i.fLineWidth=e.v7EvalAttr("line_width",i.fLineWidth),i.fLineStyle=e.v7EvalAttr("line_style",i.fLineStyle)),i.fFillColor!==void 0&&i.fFillStyle!==void 0&&(s("fFillColor","fill_color"),i.fFillStyle=e.v7EvalAttr("fill_style",i.fFillStyle)),i.fMarkerColor!==void 0&&i.fMarkerStyle!==void 0&&i.fMarkerSize!==void 0&&(s("fMarkerColor","marker_color"),i.fMarkerStyle=e.v7EvalAttr("marker_style",i.fMarkerStyle),i.fMarkerSize=e.v7EvalAttr("marker_size",i.fMarkerSize)),i.fTextColor!==void 0&&i.fTextAlign!==void 0&&i.fTextAngle!==void 0&&i.fTextSize!==void 0&&(s("fTextColor","text_color"),i.fTextAlign=e.v7EvalAttr("text_align",i.fTextAlign),i.fTextAngle=e.v7EvalAttr("text_angle",i.fTextAngle),i.fTextSize=e.v7EvalAttr("text_size",i.fTextSize))}async drawNextSnap(t,e,i){if(i===void 0&&(i=-1,this.#d=t?.length??0,this.#g=0),delete this.next_rstyle,++i,!t||i>=t.length)return this.#g=void 0,this;const s=t[i],a=s._typename===`${C}RPadDisplayItem`;if(s.fDummy)return this.drawNextSnap(t,e+1,i);if(s._typename===`${C}TObjectDisplayItem`){if(s.fKind===k.kStyle)return Object.assign(A,s.fObject),this.drawNextSnap(t,e,i);if(s.fKind===k.kColors){const h=[],o=s.fObject.arr;for(let d=0;d<o.length;++d){const c=o[d].fString,l=c.indexOf("=");l>0&&(h[parseInt(c.slice(0,l))]=H(c.slice(l+1)))}return this.setColors(h),this.drawNextSnap(t,e,i)}if(s.fKind===k.kPalette){const h=s.fObject.arr,o=[];for(let d=0;d<h.length;++d)o[d]=h[d].fString;return this.#f=new Ot(o),this.drawNextSnap(t,e,i)}if(s.fKind===k.kFont)return this.drawNextSnap(t,e,i);if(!this.getFramePainter())return this.drawObject(this,{_typename:Et,$dummy:!0},"").then(()=>this.drawNextSnap(t,e,i-1));this.extractTObjectProp(s)}let r,n;for(;e!==void 0&&e<this.#t.length;){const h=this.#t[e++];if(h.getSnapId()===s.fObjectID){r=h;break}else if(h.getSnapId()&&!h.isSecondary()&&!a){console.warn(`Mismatch in snapid between painter ${h.getSnapId()} secondary: ${h.isSecondary()} type: ${h.getClassName()} and primitive ${s.fObjectID} kind ${s.fKind} type ${s.fDrawable?._typename}`);break}}if(r)a?n=r.redrawPadSnap(s):r.updateObject(s.fDrawable||s.fObject||s,s.fOption||"",!0)&&(n=r.redraw());else if(a){const h=new X(this,s,"",!1,"webpad");h.assignSnapId(s.fObjectID),h.rstyle=s.fStyle,h.createPadSvg(),s.fPrimitives?.length&&h.addPadButtons(),e++,n=h.drawNextSnap(s.fPrimitives).then(()=>h.addPadInteractive())}else this.next_rstyle=s.fStyle||this.rstyle,e++,n=this.drawObject(this,s.fDrawable||s.fObject||s,s.fOption||"").then(h=>this.addObjectPainter(h,t,i));return at(n).then(()=>this.drawNextSnap(t,e,i))}findSnap(t,e){function i(s){return!s||!S(s)?!1:s===t?!0:e&&s.length>t.length&&s.indexOf(t)===s.length-t.length}if(i(this.getSnapId()))return this;if(!this.#t)return null;for(let s=0;s<this.#t.length;++s){let a=this.#t[s];if(!e&&p(a.findSnap)?a=a.findSnap(t):i(a.getSnapId())||(a=null),a)return a}return null}async redrawPadSnap(t){if(!t||!t.fPrimitives)return this;if(this.isCanvas(!0)&&t.fTitle&&!this.embed_canvas&&typeof document<"u"&&(document.title=t.fTitle),!this.hasSnapId()){this.assignSnapId(t.fObjectID),this.assignObject(t),this.#e=t,this.isBatchMode()&&this.isCanvas()&&(this.#u=!0);const r=this.selectDom().attr("id");return!this.isBatchMode()&&this.online_canvas&&!this.use_openui&&!this.brlayout&&r&&S(r)&&!L()&&(this.brlayout=new Rt(r,null,this),this.brlayout.create(r,!0),this.setDom(this.brlayout.drawing_divid()),Tt(this.brlayout)),this.createCanvasSvg(0),this.addPadButtons(!0),this.drawNextSnap(t.fPrimitives).then(()=>(p(this.onCanvasUpdated)&&this.onCanvasUpdated(this),this))}this.updateObject(t),this.isCanvas()?this.createCanvasSvg(2):this.createPadSvg(!0);let e=!1,i=0,s=0;for(;s<this.#t.length;){const r=this.#t[s];if(!r.hasSnapId()||r.isSecondary()){s++;continue}if(i>=t.fPrimitives.length)break;const n=t.fPrimitives[i];if(n.fObjectID===r.getSnapId())i++,s++;else if(n.fDummy||!n.fObjectID||n._typename===`${C}TObjectDisplayItem`&&(n.fKind===k.kStyle||n.fKind===k.kColors||n.fKind===k.kPalette||n.fKind===k.kFont))i++;else{e=!0;break}}let a=1e3;for(;!e&&s<this.#t.length&&--a>=0;)this.removePrimitive(s)===-111&&(e=!0);if(a<0&&(e=!0),e){const r=this.#t;this.#t=[],r.forEach(n=>n.cleanup()),this.setMainPainter(void 0,!0),p(this.removePadButtons)&&this.removePadButtons(),this.addPadButtons(!0)}return this.drawNextSnap(t.fPrimitives,e?void 0:0).then(()=>(this.addPadInteractive(),st()===this&&this.getCanvPainter()?.producePadEvent("padredraw",this),p(this.onCanvasUpdated)&&this.onCanvasUpdated(this),this))}async createImage(t){return t==="png"||t==="jpeg"||t==="svg"||t==="webp"||t==="pdf"?this.produceImage(!0,t).then(e=>{if(!e||t==="svg")return e;const i=e.indexOf("base64,");return i>0?e.slice(i+7):""}):""}itemContextMenu(t){const e=this.getPadSvg().node().getBoundingClientRect(),i={clientX:e.left+10,clientY:e.top+10};if(t==="pad")return rt(()=>this.padContextMenu(i),50);let s=null,a;switch(t){case"xaxis":case"yaxis":case"zaxis":s=this.getMainPainter(),a=t[0];break;case"frame":s=this.getFramePainter();break;default:{const r=parseInt(t);Number.isInteger(r)&&(s=this.#t[r])}}if(p(s?.fillContextMenu))return N(i,s).then(r=>{(s.fillContextMenu(r,a)||s.getSnapId())&&s.fillObjectExecMenu(r,a).then(()=>rt(()=>r.show(),50))})}saveAs(t,e,i){i||(i=(this.#s||(this.isCanvas()?"canvas":"pad"))+"."+t),this.produceImage(e,t).then(s=>{if(!s)return console.error(`Fail to produce image ${i}`);if((nt.qt6||nt.cef3)&&this.getSnapId()){console.warn(`sending file ${i} to server`);let a=s;if(t!=="svg"){const r=a.indexOf("base64,");a=r>0?a.slice(r+7):""}a&&this.getCanvPainter()?.sendWebsocket(`SAVE:${i}:${a}`)}else Dt(i,t!=="svg"?s:It+encodeURIComponent(s))})}findActivePad(){return null}async produceImage(t,e,i){const s=t==="frame",a=s?this.getFrameSvg():t?this.getCanvSvg():this.getPadSvg(),r=t&&!s?this.getCanvPainter():this,n=[];if(a.empty())return"";if(s||!t){const c=this.getCanvSvg().selectChild(".canvas_defs");c.empty()||(n.push({prnt:this.getCanvSvg(),defs:c}),a.node().insertBefore(c.node(),a.node().firstChild))}s||r.forEachPainterInPad(c=>{const l={prnt:c.getPadSvg()};n.push(l);const f=c.getLayerSvg("btns_layer");l.btns_node=f.node(),l.btns_node&&(l.btns_prnt=l.btns_node.parentNode,l.btns_next=l.btns_node.nextSibling,f.remove());const g=c.getFramePainter();if(!p(g?.access3dKind))return;const m=g.access3dKind();if(m!==O.Embed3D.Overlay&&m!==O.Embed3D.Embed)return;const v=p(g.getRenderer)?g:g.getMainPainter(),x=p(v.getRenderer)?v.getRenderer()?.domElement:null;if(!p(v?.render3D)||!K(x))return;const P=g.getSizeFor3d(O.Embed3D.Embed);v.render3D(0);const _=x.toDataURL("image/png");m===O.Embed3D.Embed&&(l.foreign=l.prnt.select("."+P.clname),l.foreign.remove());const w=g.getFrameSvg();l.frame_node=w.node(),l.frame_node&&(l.frame_next=l.frame_node.nextSibling,w.remove()),l.img=l.prnt.insert("image",".primitives_layer").attr("x",P.x).attr("y",P.y).attr("width",x.width).attr("height",x.height).attr("href",_)},"pads");let h=a.property("draw_width"),o=a.property("draw_height");if(s){const c=this.getFramePainter();h=c.getFrameWidth(),o=c.getFrameHeight()}const d=e==="pdf"?{node:a.node(),width:h,height:o,reset_tranform:s}:$t(`<svg width="${h}" height="${o}" xmlns="${Lt}">${a.node().innerHTML}</svg>`);return jt(d,e,i).then(c=>{for(let l=0;l<n.length;++l){const f=n[l];f.img?.remove();const g=f.prnt.selectChild(".primitives_layer");f.foreign&&f.prnt.node().insertBefore(f.foreign.node(),g.node()),f.frame_node&&g.node().insertBefore(f.frame_node,f.frame_next),f.btns_node&&f.btns_prnt.insertBefore(f.btns_node,f.btns_next),f.defs&&f.prnt.node().insertBefore(f.defs.node(),f.prnt.node().firstChild)}return c})}clickPadButton(t,e){if(t==="CanvasSnapShot")return this.saveAs("png",!0);if(t==="enlargePad")return this.enlargePad();if(t==="PadSnapShot")return this.saveAs("png",!1);if(t==="PadContextMenus")return e?.preventDefault(),e?.stopPropagation(),Bt()?void 0:N(e,this).then(a=>{a.header("Menus"),a.add(this.isCanvas()?"Canvas":"Pad","pad",this.itemContextMenu),this.getFramePainter()&&a.add("Frame","frame",this.itemContextMenu);const r=this.getMainPainter();if(r&&(a.add("X axis","xaxis",this.itemContextMenu),a.add("Y axis","yaxis",this.itemContextMenu),p(r.getDimension)&&r.getDimension()>1&&a.add("Z axis","zaxis",this.itemContextMenu)),this.#t?.length){a.separator();const n=[];this.#t.forEach((h,o)=>{const d=h?.getObject();if(!d||n.indexOf(d)>=0||h.isSecondary())return;let c=p(h.getClassName)?h.getClassName():d._typename||"";c&&(c+="::"),c+=p(h.getObjectName)?h.getObjectName():d.fName||`item${o}`,a.add(c,o,this.itemContextMenu),n.push(d)})}a.show()});let i=!1;const s=[];for(let a=0;a<this.#t.length;++a){const r=this.#t[a];p(r.clickPadButton)&&s.push(r.clickPadButton(t,e)),!i&&p(r.clickButton)&&(i=r.clickButton(t),ht(i)&&s.push(i))}return Promise.all(s)}addPadButton(t,e,i,s){if(!(!y.ToolBar||this.isBatchMode())){this._buttons||(this._buttons=[]);for(let a=0;a<this._buttons.length;++a)if(this._buttons[a].funcname===i)return;if(this._buttons.push({btn:t,tooltip:e,funcname:i,keyname:s}),!this.isTopPad()&&i.indexOf("Pad")&&i!=="enlargePad"){const a=this.getCanvPainter();a&&a!==this&&a.addPadButton(t,e,i)}}}addPadButtons(t){this.addPadButton("camera","Create PNG",this.isCanvas()?"CanvasSnapShot":"PadSnapShot","Ctrl PrintScreen"),y.ContextMenu&&this.addPadButton("question","Access context menus","PadContextMenus"),(!this.isTopPad()&&this.hasObjectsToDraw()||this.enlargeMain("verify"))&&this.addPadButton("circle","Enlarge canvas","enlargePad"),t&&this.brlayout&&(this.addPadButton("diamand","Toggle Ged","ToggleGed"),this.addPadButton("three_circles","Toggle Status","ToggleStatus"))}showPadButtons(){this._buttons&&(Nt.assign(this),this.showPadButtons())}getPadLength(t,e,i){let s,a;const r=t?-1:1,n=(c,l)=>c<e.fArr.length?e.fArr[c]:l,h=()=>(s||(s=i?i.getFrameRect():this.getPadRect()),s);if(i){const c=n(2),l=t?"gry":"grx";c!==void 0&&i[l]&&(a=i[l](c))}a===void 0&&(a=t?h().height:0);const o=n(0,0),d=n(1,0);return a+=r*d,o&&(a+=r*(t?h().height:h().width)*o),Math.round(a)}getCoordinate(t,e){return{x:this.getPadLength(!1,t.fHoriz,e),y:this.getPadLength(!0,t.fVert,e)}}decodeOptions(t){const e=this.getObject();if(!e)return;const i=new Gt(t),s=this.setOptions({GlobalColors:!0,LocalColors:!1,IgnorePalette:!1,RotateFrame:!1,FixFrame:!1});(i.check("NOCOLORS")||i.check("NOCOL"))&&(s.GlobalColors=s.LocalColors=!1),(i.check("LCOLORS")||i.check("LCOL"))&&(s.GlobalColors=!1,s.LocalColors=!0),(i.check("NOPALETTE")||i.check("NOPAL"))&&(s.IgnorePalette=!0),i.check("ROTATE")&&(s.RotateFrame=!0),i.check("FIXFRAME")&&(s.FixFrame=!0),i.check("WHITE")&&(e.fFillColor=0),i.check("LOGX")&&(e.fLogx=1),i.check("LOGY")&&(e.fLogy=1),i.check("LOGZ")&&(e.fLogz=1),i.check("LOG")&&(e.fLogx=e.fLogy=e.fLogz=1),i.check("GRIDX")&&(e.fGridx=1),i.check("GRIDY")&&(e.fGridy=1),i.check("GRID")&&(e.fGridx=e.fGridy=1),i.check("TICKX2")&&(e.fTickx=2),i.check("TICKY2")&&(e.fTicky=2),i.check("TICK2")&&(e.fTickx=e.fTicky=2),i.check("TICKX")&&(e.fTickx=1),i.check("TICKY")&&(e.fTicky=1),i.check("TICK")&&(e.fTickx=e.fTicky=1)}static async draw(t,e,i){const s=new X(t,e,i,!1,!0);return s.createPadSvg(),s.matchObjectType(C+"RPad")&&(s.isTopPad()||s.hasObjectsToDraw())&&s.addPadButtons(),R({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.addPadInteractive(),s.showPadButtons(),s))}}class Y extends X{#i;#s;#e;#t;constructor(t,e,i){super(t,e,i,!0),this.#i=null,this.#e={},this.tooltip_allowed=y.Tooltip,this.v7canvas=!0}cleanup(){this.#i=void 0,this.#e={},this.#s&&this.setLayoutKind("simple"),this.#s=void 0,super.cleanup()}isReadonly(){return!1}getCanvasName(){const t=this.getRootPad()?.fTitle;return!t||!S(t)?"rcanvas":t.replace(/ /g,"_")}getLayoutKind(){const t=this.selectDom("origin");return(t.empty()?"":t.property("layout"))||"simple"}setLayoutKind(t,e){const i=this.selectDom("origin");i.empty()||(t||(t="simple"),i.property("layout",t),i.property("layout_selector",t!=="simple"&&e?e:null),this.#s=t!=="simple")}async changeLayout(t,e){if(this.getLayoutKind()===t)return!0;const s=this.selectDom("origin"),a=s.select(".side_panel2"),r=[];let n=s.select(".side_panel"),h=this.selectDom(),o;for(;h.node().firstChild;)r.push(h.node().removeChild(h.node().firstChild));if(n.empty()||ot(n.node()),a.empty()||ot(a.node()),this.setLayoutKind("simple"),s.html(""),t==="simple"){h=s;for(let d=0;d<r.length;++d)h.node().appendChild(r[d]);this.setLayoutKind(t),o=!0}else{const d=new Ut(s.node(),t);e===void 0&&(e=t.indexOf("vert")===0?0:1),h=M(d.getGridFrame(e)),h.classed("central_panel",!0).style("position","relative"),e===2?(n=M(d.getGridFrame(0)),n.classed("side_panel2",!0).style("position","relative"),n=M(d.getGridFrame(3)),n.classed("side_panel",!0).style("position","relative")):(n=M(d.getGridFrame(1-e)),n.classed("side_panel",!0).style("position","relative"));for(let c=0;c<r.length;++c)h.node().appendChild(r[c]);this.setLayoutKind(t,".central_panel"),s.property("mdi",null)}return Xt(h.node(),o),!0}async toggleProjection(t){if(delete this.proj_painter,t&&(this.proj_painter={X:!1,Y:!1}),p(this.showUI5ProjectionArea))return this.showUI5ProjectionArea(t);let e="simple",i;switch(t){case"XY":e="projxy",i=2;break;case"X":case"bottom":e="vert2_31",i=0;break;case"Y":case"left":e="horiz2_13",i=1;break;case"top":e="vert2_13",i=1;break;case"right":e="horiz2_31",i=0;break}return this.changeLayout(e,i)}async drawProjection(){return!1}async drawInSidePanel(t,e,i){const s=this.getLayoutKind()==="projxy"&&i==="Y"?".side_panel2":".side_panel",a=this.selectDom("origin").select(s);return a.empty()?null:this.drawObject(a.node(),t,e)}testUI5(){return this.use_openui??!1}showMessage(t){this.testUI5()||Yt(t,7e3)}saveCanvasAsFile(t){const e=t.indexOf(".");this.createImage(t.slice(e+1)).then(i=>this.sendWebsocket(`SAVE:${t}:${i}`))}sendSaveCommand(t){this.sendWebsocket("PRODUCE:"+t)}getWebsocket(){return this.#i}canSendWebsocket(t=1){return this.#i?.canSend(t)}sendWebsocket(t){return this.#i?.canSend()?(this.#i.send(t),!0):!1}closeWebsocket(t){this.#i&&(this.#i.close(t),this.#i.cleanup(),this.#i=void 0)}useWebsocket(t){this.closeWebsocket(),this.#i=t,this.#i.setReceiver(this),this.#i.connect()}websocketTimeout(t,e){if(!this.#i)return;this.#i._tmouts||(this.#i._tmouts={});const i=this.#i._tmouts[t];if(e===void 0)return i!==void 0;e==="reset"?i&&(clearTimeout(i),delete this.#i._tmouts[t]):!i&&Number.isInteger(e)&&(this.#i._tmouts[t]=setTimeout(()=>{delete this.#i._tmouts[t]},e))}onWebsocketOpened(){}onWebsocketClosed(){this.embed_canvas||Kt()}onWebsocketMsg(t,e){if(e==="CLOSE")this.onWebsocketClosed(),this.closeWebsocket(!0);else if(e.slice(0,5)==="SNAP:"){e=e.slice(5);const i=e.indexOf(":"),s=e.slice(0,i),a=$(e.slice(i+1));this.syncDraw(!0).then(()=>{!this.getSnapId()&&a?.fWinSize&&this.resizeBrowser(a.fWinSize[0],a.fWinSize[1])}).then(()=>this.redrawPadSnap(a)).then(()=>{this.addPadInteractive(),t.send(`SNAPDONE:${s}`),this.confirmDraw()}).catch(r=>{p(this.showConsoleError)?this.showConsoleError(r):console.log(r)})}else if(e.slice(0,4)==="JSON"){const i=$(e.slice(4));this.redrawObject(i)}else if(e.slice(0,9)==="REPL_REQ:")this.processDrawableReply(e.slice(9));else if(e.slice(0,4)==="CMD:"){e=e.slice(4);const i=e.indexOf(":"),s=e.slice(0,i),a=e.slice(i+1),r=`REPLY:${s}:`;if(a==="SVG"||a==="PNG"||a==="JPEG"||a==="WEBP"||a==="PDF")this.createImage(a.toLowerCase()).then(n=>t.send(r+n));else if(a.indexOf("ADDPANEL:")===0)if(!p(this.showUI5Panel))t.send(r+"false");else{const n=a.slice(9),h=t.createNewInstance(n);h.setReceiver({cpainter:this,onWebsocketOpened(){},onWebsocketMsg(o,d){const c=d.indexOf("SHOWPANEL:")===0?d.slice(10):"";this.cpainter.showUI5Panel(c,o).then(l=>t.send(r+(l?"true":"false")))},onWebsocketClosed(){t.send(r+"false")},onWebsocketError(){t.send(r+"false")}}),h.connect()}else console.log("Unrecognized command "+a),t.send(r)}else if(e.slice(0,7)==="DXPROJ:"||e.slice(0,7)==="DYPROJ:"){const i=e[1],s=$(e.slice(7));this.drawProjection(i,s)}else if(e.slice(0,5)==="SHOW:"){const i=e.slice(5),s=i.at(-1)==="1";this.showSection(i.slice(0,i.length-2),s)}else console.log(`unrecognized msg len: ${e.length} msg: ${e.slice(0,30)}`)}submitDrawableRequest(t,e,i,s){if(!this.getWebsocket()||!e?._typename||!i.getSnapId())return null;if(t&&s){i._requests||(i._requests={});const r=i._requests[t];if(r){const n=new Date().getTime();if(!r._tm||n-r._tm<5e3)return r._nextreq=e,!1;delete i._requests[t]}i._requests[t]=e}e.id=i.getSnapId(),s?(this.#t||(this.#t=1),e.reqid=this.#t++):e.reqid=0;const a=JSON.stringify(e);return e.reqid&&(e._kind=t,e._painter=i,e._method=s,e._tm=new Date().getTime(),this.#e[e.reqid]=e),this.sendWebsocket("REQ:"+a),e}async submitMenuRequest(t,e,i){return new Promise(s=>{this.submitDrawableRequest("",{_typename:`${C}RDrawableMenuRequest`,menukind:e||"",menureqid:i},t,s)})}submitExec(t,e,i){if(i&&S(i)){const s=i.length;if(s>2&&i.indexOf("#x")===s-2?i="x":s>2&&i.indexOf("#y")===s-2?i="y":s>2&&i.indexOf("#z")===s-2&&(i="z"),i==="x"||i==="y"||i==="z")e=i+"axis#"+e;else return console.log(`not recoginzed subelem ${i} in submitExec`)}this.submitDrawableRequest("",{_typename:`${C}RDrawableExecRequest`,exec:e},t)}processDrawableReply(t){const e=$(t);if(!e?.reqid)return!1;const i=this.#e[e.reqid];if(!i)return!1;this.#e[e.reqid]=void 0,i._kind&&i._painter?._requests&&i._painter._requests[i._kind]===i&&delete i._painter._requests[i._kind],i._method&&i._method(e,i),i._nextreq&&!i._painter._requests[i._kind]&&this.submitDrawableRequest(i._kind,i._nextreq,i._painter,i._method)}async showSection(t,e){switch(t){case"Menu":break;case"StatusBar":break;case"Editor":break;case"ToolBar":break;case"ToolTips":this.setTooltipAllowed(e);break}return!0}processChanges(t,e,i){if(!(!this.canSendWebsocket(2)||!S(t)))switch(e||(e=this),t){case"sbits":console.log("Status bits in RCanvas are changed - that to do?");break;case"frame":case"zoom":console.log("Frame moved or zoom is changed - that to do?");break;case"pave_moved":console.log("TPave is moved inside RCanvas - that to do?");break;default:t.slice(0,5)==="exec:"&&e?.getSnapId()?this.submitExec(e,t.slice(5),i):console.log("UNPROCESSED CHANGES",t)}}clickPadButton(t,e){return t==="ToggleGed"?this.activateGed(this,null,"toggle"):t==="ToggleStatus"?this.activateStatusBar("toggle"):super.clickPadButton(t,e)}hasEventStatus(){if(this.testUI5())return!1;if(this.brlayout)return this.brlayout.hasStatus();const t=L();return t?t.hasStatusLine():!1}canStatusBar(){return this.testUI5()||this.brlayout||L()}activateStatusBar(t){this.testUI5()||(this.brlayout?this.brlayout.createStatusLine(23,t):L()?.createStatusLine(23,t),this.processChanges("sbits",this))}showCanvasStatus(...t){if(this.testUI5())return;(this.brlayout||L()?.brlayout)?.showStatus(...t)}hasGed(){return this.testUI5()?!1:this.brlayout?.hasContent()??!1}removeGed(){this.testUI5()||(this.registerForPadEvents(null),this.ged_view&&(this.ged_view.getController().cleanupGed(),this.ged_view.destroy(),delete this.ged_view),this.brlayout?.deleteContent(!0),this.processChanges("sbits",this))}getUi5PanelData(){return{jsroot:{settings:y,create:W,parse:$,toJSON:qt,loadScript:Zt,EAxisBits:gt,getColorExec:Vt}}}async activateGed(t,e,i){if(this.testUI5()||!this.brlayout)return!1;if(this.brlayout.hasContent())return i==="toggle"||i===!1?this.removeGed():t?.getPadPainter()?.selectObjectPainter(t),!0;if(i===!1)return!1;const s=this.brlayout.createBrowserBtns();return E.createSVG(s,E.diamand,15,"toggle fix-pos mode","browser").style("margin","3px").on("click",()=>this.brlayout.toggleKind("fix")),E.createSVG(s,E.circle,15,"toggle float mode","browser").style("margin","3px").on("click",()=>this.brlayout.toggleKind("float")),E.createSVG(s,E.cross,15,"delete GED","browser").style("margin","3px").on("click",()=>this.removeGed()),this.brlayout.setBrowserContent("<div class='jsroot_browser_hierarchy' id='ged_placeholder'>Loading GED ...</div>"),this.brlayout.setBrowserTitle("GED"),this.brlayout.toggleBrowserKind(e||"float"),new Promise(a=>{Jt.then(r=>{M("#ged_placeholder").text(""),r.ui.require(["sap/ui/model/json/JSONModel","sap/ui/core/mvc/XMLView"],(n,h)=>{const o=new n({handle:null});h.create({viewName:"rootui5.canv.view.Ged",viewData:this.getUi5PanelData("Ged")}).then(d=>{d.setModel(o),d.placeAt("ged_placeholder"),this.ged_view=d,this.registerForPadEvents(d.getController().padEventsReceiver.bind(d.getController())),t?.getPadPainter()?.selectObjectPainter(t),this.processChanges("sbits",this),a(!0)})})})})}produceJSON(){return console.error("RCanvasPainter.produceJSON not yet implemented"),""}resizeBrowser(t,e){!t||!e||this.isBatchMode()||this.embed_canvas||this.batch_mode||this.getWebsocket()?.resizeWindow(t,e)}static async draw(t,e,i){!e&&(e=W(`${C}RCanvas`));const a=new Y(t,e,i);return a.createCanvasSvg(0),R({pp:a,active:!1}),a.drawPrimitives().then(()=>(a.addPadInteractive(),a.addPadButtons(),a.showPadButtons(),a))}}function ie(u,t,e){const i=new Y(u,null,e);return i.batch_mode=Z(),i.syncDraw(!0).then(()=>i.redrawPadSnap(t)).then(()=>(i.confirmDraw(),i.showPadButtons(),i))}async function mt(u){if(!u)return Promise.reject(Error("Painter not provided in ensureRCanvas"));const t=u.getPadPainter();return(t?Promise.resolve(t):Y.draw(u.getDom(),null)).then(i=>(u.addToPadPrimitives(i),u))}function se(u,t){const e=this.getFramePainter();if(!e)return console.log("no frame painter - no title");const i=e.getFrameRect(),s=i.x,a=i.y,r=i.width,n=this.getPadPainter().getPadHeight(),h=this.getObject(),o=r,d=this.v7EvalFont("text",{size:.07,color:"black",align:22});let c=this.v7EvalLength("margin",n,.02),l=this.v7EvalLength("height",n,.05);if(u==="drag"){l=t.height,c=a-t.y-t.height;const g={};this.v7AttrChange(g,"margin",c/n),this.v7AttrChange(g,"height",l/n),this.v7SendAttrChanges(g,!1)}const f=this.createG();return z(f,s,Math.round(a-c-l)),this.startTextDrawingAsync(d,"font").then(()=>(this.drawText({x:o/2,y:l/2,text:h.fText,latex:1}),this.finishTextDrawing())).then(()=>{ct(this,{x:s,y:Math.round(a-c-l),width:o,height:l,minwidth:20,minheight:20,no_change_x:!0,redraw:g=>this.redraw("drag",g)})})}Qt(`${C}RPalette`,{extractRColor(u){const t=u.fColor||"black";return H(t)},getColor(u){return this.palette[u]},getContourIndex(u){const t=this.fContour;let e=0,i=t.length-1;if(u<t[0])return-1;if(u>=t[i])return i-1;if(this.fCustomContour){for(;e<i-1;){const s=Math.round((e+i)/2);t[s]>u?i=s:e=s}return e}return Math.floor((u-t[0])/(t[i-1]-t[0])*(i-1))},getContourColor(u){const t=this.getContourIndex(u);return t<0?"":this.getColor(t)},getContour(){return this.fContour&&this.fContour.length>1?this.fContour:null},deleteContour(){this.fContour=void 0},calcColor(u,t,e){const i=e.fOrdinal-t.fOrdinal,s=e.fOrdinal-u,a=u-t.fOrdinal;if(!this.fInterpolate||i<=0)return H(s<a?e.fColor:t.fColor);const r=V(this.extractRColor(t.fColor)),n=V(this.extractRColor(e.fColor));return V(Math.round((r.r*s+n.r*a)/i),Math.round((r.g*s+n.g*a)/i),Math.round((r.b*s+n.b*a)/i)).formatRgb()},createPaletteColors(u){const t=[];let e=0;for(;t.length<u;){const i=t.length/(u-1),s=this.fColors[e];if(Math.abs(s.fOrdinal-i)<1e-4||e===this.fColors.length-1){t.push(this.extractRColor(s.fColor));continue}const a=this.fColors[e+1];a.fOrdinal<=i?e++:t.push(this.calcColor(i,s,a))}return t},getColorOrdinal(u){if(!this.fColors)return"black";typeof u!="number"||u<0?u=0:u>1&&(u=1);let t,e=this.fColors[0];for(let i=0;i<this.fColors.length-1;++i){if(t=e,Math.abs(t.fOrdinal-u)<1e-4)return this.extractRColor(t.fColor);if(e=this.fColors[i+1],e.fOrdinal>u)return this.calcColor(u,t,e)}return this.extractRColor(e.fColor)},setFullRange(u,t){this.full_min=u,this.full_max=t},createContour(u,t,e,i,s){if(this.fContour=[],delete this.fCustomContour,this.colzmin=e,this.colzmax=i,u){this.colzmax<=0&&(this.colzmax=1),this.colzmin<=0&&(s===void 0||s<=0?this.colzmin=1e-4*this.colzmax:this.colzmin=s<3||s>100?.3*s:1),this.colzmin>=this.colzmax&&(this.colzmin=1e-4*this.colzmax);const a=Math.log(this.colzmin)/Math.log(10),r=Math.log(this.colzmax)/Math.log(10),n=(r-a)/t;this.fContour.push(this.colzmin);for(let h=1;h<t;h++)this.fContour.push(Math.exp((a+n*h)*Math.log(10)));this.fContour.push(this.colzmax),this.fCustomContour=!0}else{this.colzmin===this.colzmax&&this.colzmin&&(this.colzmax+=.01*Math.abs(this.colzmax),this.colzmin-=.01*Math.abs(this.colzmin));const a=(this.colzmax-this.colzmin)/t;for(let r=0;r<=t;r++)this.fContour.push(this.colzmin+a*r)}(!this.palette||this.palette.length!==t)&&(this.palette=this.createPaletteColors(t))}});function ae(){const u=this.getObject(),t=this.getCanvSvg(),e="custom_font_"+u.fFamily+u.fWeight+u.fStyle;let i=t.selectChild(".canvas_defs");i.empty()&&(i=t.insert("svg:defs",":first-child").attr("class","canvas_defs"));let s=i.selectChild("."+e);if(s.empty()){s=i.append("style").attr("type","text/css").attr("class",e).text(`@font-face { font-family: "${u.fFamily}"; font-weight: ${u.fWeight?u.fWeight:"normal"}; font-style: ${u.fStyle?u.fStyle:"normal"}; src: ${u.fSrc}; }`);const a=u.fSrc.indexOf("base64,"),r=u.fSrc.lastIndexOf(" format(");if(a>0&&r>a){const n=u.fSrc.slice(a+7,r-2);u.fSrc.indexOf("data:application/font-ttf")>0&&s.property("$fontcfg",{n:u.fFamily,base64:n})}}return u.fDefault&&(this.getPadPainter()._dfltRFont=u),!0}function re(u,t,e){const i=new T(u,t,e);return i.disable_zooming=!0,mt(i).then(()=>i.redraw()).then(()=>i)}function ne(u,t,e){const i=new te(u,t);return e==="3d"&&(i.mode3d=!0),mt(i).then(()=>i.redraw())}export{Y as RCanvasPainter,U as RObjectPainter,X as RPadPainter,re as drawRAxis,ae as drawRFont,ne as drawRFrame,se as drawRFrameTitle,ie as drawRPadSnapshot,mt as ensureRCanvas};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{aK as m}from"./ndmvr-aframe-core-DEHQ38JB.js";import{treeDrawProgress as a}from"./TTree-BtFtnLeD.js";import{rntupleDraw as s}from"./rntuple-i8TaG-6V.js";import"./TH1Painter-BXzutgI3.js";import"./hist3d-D9VevdP6.js";import"./latex3d-8Hbnfz6c.js";import"./THistPainter-B2S5BnuY.js";import"./TPavePainter-1yngbgp8.js";import"./TH2Painter-BpixRP4j.js";import"./TH1Painter-DyN-WKyv.js";import"./func-C6FX2eN2.js";import"./TH2Painter-DceuYQAL.js";import"./TH3Painter-BA_W8tmJ.js";import"./TGraphPainter-CurXuifu.js";import"./TGraphPainter-Bp7xEbQz.js";import"./TPolyMarker3D-BaWOSDy6.js";async function y(p,i,e){const r={};let t;if(i?.$tuple?(t=i.$tuple,r.expr=i._name,m(e)&&e.indexOf("dump")===0?r.expr+=">>"+e:e&&(r.expr+=e)):(t=i,r.expr=e),!t)throw Error("No RNTuple object available for drawing");return r.drawid=p,r.progress=a.bind(r),s(t,r).then(o=>r.progress(o,!0))}export{y as drawRNTuple};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as y,aA as m,cf as k}from"./ndmvr-aframe-core-
|
|
1
|
+
import{$ as y,aA as m,cf as k}from"./ndmvr-aframe-core-DEHQ38JB.js";import{RObjectPainter as w,ensureRCanvas as p}from"./RCanvasPainter-BN1wz_jA.js";const c={kTopLeft:1,kTopRight:2,kBottomLeft:3,kBottomRight:4};class v extends w{async drawContent(){return this}async drawPave(){const t=this.getPadPainter().getPadRect(),s=this.getFramePainter();this.onFrame=s&&this.v7EvalAttr("onFrame",!0),this.corner=this.v7EvalAttr("corner",c.kTopRight);const r=this.v7EvalAttr("visible",!0),e=this.v7EvalLength("offsetX",t.width,.02),h=this.v7EvalLength("offsetY",t.height,.02),o=this.v7EvalLength("width",t.width,.3),i=this.v7EvalLength("height",t.height,.3),n=this.createG();if(n.classed("most_upper_primitives",!0),!r)return this;this.createv7AttLine("border_"),this.createv7AttFill();const a=this.onFrame?s.getFrameRect():t;let d=0,l=0;switch(this.corner){case c.kTopLeft:d=a.x+e,l=a.y+h;break;case c.kBottomLeft:d=a.x+e,l=a.y+a.height-h-i;break;case c.kBottomRight:d=a.x+a.width-e-o,l=a.y+a.height-h-i;break;case c.kTopRight:default:d=a.x+a.width-e-o,l=a.y+h}return y(n,d,l),n.append("svg:rect").attr("x",0).attr("width",o).attr("y",0).attr("height",i).call(this.lineatt.func).call(this.fillatt.func),this.pave_width=o,this.pave_height=i,this.drawContent().then(()=>(this.isBatchMode()||(m.ContextMenu&&this.paveContextMenu&&n.on("contextmenu",g=>this.paveContextMenu(g)),k(this,{x:d,y:l,width:o,height:i,minwidth:20,minheight:20,redraw:g=>this.sizeChanged(g)})),this))}sizeChanged(t){this.pave_width=t.width,this.pave_height=t.height;const s=t.x,r=t.y,e=this.getPadPainter().getPadRect(),h=this.onFrame?this.getFramePainter().getFrameRect():e,o={};let i,n;switch(this.corner){case c.kTopLeft:i=s-h.x,n=r-h.y;break;case c.kBottomLeft:i=s-h.x,n=h.y+h.height-r-this.pave_height;break;case c.kBottomRight:i=h.x+h.width-s-this.pave_width,n=h.y+h.height-r-this.pave_height;break;case c.kTopRight:default:i=h.x+h.width-s-this.pave_width,n=r-h.y}this.v7AttrChange(o,"offsetX",i/e.width),this.v7AttrChange(o,"offsetY",n/e.height),this.v7AttrChange(o,"width",this.pave_width/e.width),this.v7AttrChange(o,"height",this.pave_height/e.height),this.v7SendAttrChanges(o,!1),this.getG().selectChild("rect").attr("width",this.pave_width).attr("height",this.pave_height),this.drawContent()}async redraw(){return this.drawPave()}static async draw(t,s,r){const e=new v(t,s,r,"pave");return p(e).then(()=>e.drawPave())}}class x extends v{async drawContent(){const t=this.getObject(),s=this.v7EvalFont("text",{size:12,color:"black",align:22}),r=this.pave_width,e=this.pave_height,h=this.getPadPainter();let o=t.fEntries.length;if(t.fTitle&&o++,!o||!h)return this;const i=e/o,n=.02*r;return s.setSize(e/(o*1.2)),this.startTextDrawingAsync(s,"font").then(()=>{let a=0;t.fTitle&&(this.drawText({latex:1,width:r-2*n,height:i,x:n,y:a,text:t.fTitle}),a+=i);for(let d=0;d<t.fEntries.length;++d){const l=t.fEntries[d],g=Math.round(r/4);let f=null;this.drawText({latex:1,width:.75*r-3*n,height:i,x:2*n+g,y:a,text:l.fLabel}),l.fDrawableId!=="custom"?f=h.findSnap(l.fDrawableId,!0):l.fDrawable.fIO&&(f=new w(this.getPadPainter(),l.fDrawable.fIO),l.fLine&&f.createv7AttLine(),l.fFill&&f.createv7AttFill(),l.fMarker&&f.createv7AttMarker()),l.fFill&&f?.fillatt&&this.appendPath(`M${Math.round(n)},${Math.round(a+i*.1)}h${g}v${Math.round(i*.8)}h${-g}z`).call(f.fillatt.func),l.fLine&&f?.lineatt&&this.appendPath(`M${Math.round(n)},${Math.round(a+i/2)}h${g}`).call(f.lineatt.func),l.fError&&f?.lineatt&&this.appendPath(`M${Math.round(n+r/8)},${Math.round(a+i*.2)}v${Math.round(i*.6)}`).call(f.lineatt.func),l.fMarker&&f?.markeratt&&this.appendPath(f.markeratt.create(n+r/8,a+i/2)).call(f.markeratt.func),a+=i}return this.finishTextDrawing()})}static async draw(t,s,r){const e=new x(t,s,r,"legend");return p(e).then(()=>e.drawPave())}}class u extends v{async drawContent(){const t=this.getObject(),s=t?.fText.length;if(!s)return;const r=this.v7EvalFont("text",{size:12,color:"black",align:22}),e=this.pave_width,h=this.pave_height,o=h/s,i=.02*e;return r.setSize(h/(s*1.2)),this.startTextDrawingAsync(r,"font").then(()=>{for(let n=0,a=0;n<t.fText.length;++n,a+=o)this.drawText({latex:1,width:e-2*i,height:o,x:i,y:a,text:t.fText[n]});return this.finishTextDrawing(void 0,!0)})}static async draw(t,s,r){const e=new u(t,s,r,"pavetext");return p(e).then(()=>e.drawPave())}}export{x as RLegendPainter,v as RPavePainter,u as RPaveTextPainter};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a7 as m,a6 as C}from"./ndmvr-aframe-core-
|
|
1
|
+
import{a7 as m,a6 as C}from"./ndmvr-aframe-core-DEHQ38JB.js";class g{static CONSTANTS={DELAY:0,OFFSET_X:10,OFFSET_Y:-10,PADDING:8,BORDER_RADIUS:4};constructor(e){this.painter=e,this.tooltip=null,this.content="",this.x=0,this.y=0}cleanup(){this.tooltip!==null&&(document.body.removeChild(this.tooltip),this.tooltip=null)}createTooltip(){this.tooltip||(this.tooltip=document.createElement("div"),this.tooltip.style.cssText=`
|
|
2
2
|
position: absolute;
|
|
3
3
|
background: rgba(0, 0, 0, 0.9);
|
|
4
4
|
color: white;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a7 as M,a3 as B,cp as R,bG as p,cq as z,aK as D,cr as N,bw as v,cs as A,aA as w,a0 as O,s as _,bN as y,aC as T,a6 as k,aH as Z}from"./ndmvr-aframe-core-
|
|
1
|
+
import{a7 as M,a3 as B,cp as R,bG as p,cq as z,aK as D,cr as N,bw as v,cs as A,aA as w,a0 as O,s as _,bN as y,aC as T,a6 as k,aH as Z}from"./ndmvr-aframe-core-DEHQ38JB.js";import{TPavePainter as F}from"./TPavePainter-1yngbgp8.js";class I extends M{#t;decodeOptions(t){const i=new B(t),e=this.getObject();i.check("CONST")&&e&&(e.fConstRatio=!0),this.setOptions({Zscale:i.check("Z")})}createRGBA(t){const i=this.getObject(),e=i?.fPalette;if(!e)return null;const a=new Array((t+1)*4).fill(0);for(let o=0,r=1;o<=t;++o){const f=o/t;for(;e.fPoints[r]<f&&r<e.fPoints.length-1;)r++;const n=(e.fPoints[r]-f)/(e.fPoints[r]-e.fPoints[r-1]),s=(f-e.fPoints[r-1])/(e.fPoints[r]-e.fPoints[r-1]);a[o*4]=Math.min(255,Math.round((e.fColorRed[r-1]*n+e.fColorRed[r]*s)/256)),a[o*4+1]=Math.min(255,Math.round((e.fColorGreen[r-1]*n+e.fColorGreen[r]*s)/256)),a[o*4+2]=Math.min(255,Math.round((e.fColorBlue[r-1]*n+e.fColorBlue[r]*s)/256)),a[o*4+3]=Math.min(255,Math.round((e.fColorAlpha[r-1]*n+e.fColorAlpha[r]*s)/256))}return a}cleanup(){this.#t=void 0,super.cleanup()}getContour(){return this.#t}async makeUrlFromImageBuf(t,i){this.rgba=this.createRGBA(1e3);let a=t.fImgBuf[0],o=t.fImgBuf[0];for(let n=1;n<t.fImgBuf.length;++n){const s=t.fImgBuf[n];a=Math.min(s,a),o=Math.max(s,o)}this.#t={arr:new Array(200),rgba:this.rgba,getLevels(){return this.arr},getPaletteColor(n,s){if(!this.arr||!this.rgba)return"white";const h=Math.round((s-this.arr[0])/(this.arr.at(-1)-this.arr.at(0))*(this.rgba.length-4)/4)*4;return R(this.rgba[h]/255,this.rgba[h+1]/255,this.rgba[h+2]/255,this.rgba[h+3]/255)}};for(let n=0;n<200;n++)this.#t.arr[n]=a+(o-a)/199*n;a>=o&&(o=a+1);const r=this.getImageZoomRange(i,t.fConstRatio,t.fWidth,t.fHeight);return(p()?z(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).then(n=>n.default.createCanvas(r.xmax-r.xmin,r.ymax-r.ymin)):new Promise(n=>{const s=document.createElement("canvas");s.width=r.xmax-r.xmin,s.height=r.ymax-r.ymin,n(s)})).then(n=>{const s=n.getContext("2d"),h=s.getImageData(0,0,n.width,n.height),m=h.data;for(let l=r.ymin;l<r.ymax;++l){let g=(r.ymax-l-1)*(r.xmax-r.xmin)*4;const d=l*t.fWidth;for(let u=r.xmin;u<r.xmax;++u){let c=Math.round((t.fImgBuf[d+u]-a)/(o-a)*1e3)*4;m[g++]=this.rgba[c++],m[g++]=this.rgba[c++],m[g++]=this.rgba[c++],m[g++]=this.rgba[c]}}return s.putImageData(h,0,0),{url:n.toDataURL(),constRatio:t.fConstRatio,can_zoom:!0}})}getImageZoomRange(t,i,e,a){const o={xmin:0,xmax:e,ymin:0,ymax:a};if(!t)return o;let r=0,f=0,n=e,s=a;if(i){const h=a/e,m=t.getFrameHeight()/t.getFrameWidth();if(h>m){const l=a/m;r=Math.round((l-e)/2),n=Math.round(l)}else{const l=m*e;f=Math.round((l-a)/2),s=Math.round(l)}}return t.zoom_xmin!==t.zoom_xmax&&(o.xmin=Math.min(e,Math.max(0,Math.round(t.zoom_xmin*n)-r)),o.xmax=Math.min(e,Math.max(0,Math.round(t.zoom_xmax*n)-r))),t.zoom_ymin!==t.zoom_ymax&&(o.ymin=Math.min(a,Math.max(0,Math.round(t.zoom_ymin*s)-f)),o.ymax=Math.min(a,Math.max(0,Math.round(t.zoom_ymax*s)-f))),o}async makeUrlFromPngBuf(t,i){const e=t.fPngBuf;let a="";if(D(e))a=e;else for(let f=0;f<e.length;++f)a+=String.fromCharCode(e[f]<0?256+e[f]:e[f]);const o={url:"data:image/png;base64,"+N(a),constRatio:t.fConstRatio,can_zoom:i&&!p()},r=v();return!o.can_zoom||i?.zoom_xmin===i?.zoom_xmax&&i?.zoom_ymin===i?.zoom_ymax?o:new Promise(f=>{const n=r.createElement("img");n.onload=()=>{const s=r.createElement("canvas");s.width=n.width,s.height=n.height;const h=s.getContext("2d");h.drawImage(n,0,0);const m=h.getImageData(0,0,n.width,n.height).data,l=this.getImageZoomRange(i,o.constRatio,n.width,n.height),g=r.createElement("canvas");g.width=l.xmax-l.xmin,g.height=l.ymax-l.ymin;const d=g.getContext("2d"),u=d.getImageData(0,0,g.width,g.height),c=u.data;for(let b=l.ymin;b<l.ymax;++b){let x=(l.ymax-b-1)*(l.xmax-l.xmin)*4,P=((n.height-b-1)*n.width+l.xmin)*4;for(let C=l.xmin;C<l.xmax;++C)c[x++]=m[P++],c[x++]=m[P++],c[x++]=m[P++],c[x++]=m[P++]}d.putImageData(u,0,0),o.url=g.toDataURL(),f(o)},n.onerror=()=>f(o),n.src=o.url})}get _wheel_zoomy(){return!0}async drawImage(){const t=this.getObject(),i=this.getFramePainter(),e=i?.getFrameRect()??this.getPadPainter().getPadRect();t._blob&&(t._blob.length===15&&!t._blob[0]?(t.fImageQuality=t._blob[1],t.fImageCompression=t._blob[2],t.fConstRatio=t._blob[3],t.fPalette={_typename:A,fUniqueID:t._blob[4],fBits:t._blob[5],fNumPoints:t._blob[6],fPoints:t._blob[7],fColorRed:t._blob[8],fColorGreen:t._blob[9],fColorBlue:t._blob[10],fColorAlpha:t._blob[11]},t.fWidth=t._blob[12],t.fHeight=t._blob[13],t.fImgBuf=t._blob[14],(t.fWidth*t.fHeight!==t.fImgBuf.length||t.fPalette.fNumPoints!==t.fPalette.fPoints.length)&&(console.error(`TASImage _blob decoding error ${t.fWidth*t.fHeight} != ${t.fImgBuf.length} ${t.fPalette.fNumPoints} != ${t.fPalette.fPoints.length}`),delete t.fImgBuf,delete t.fPalette)):t._blob.length===3&&t._blob[0]?(t.fPngBuf=t._blob[2],t.fPngBuf?.length!==t._blob[1]&&(console.error(`TASImage with png buffer _blob error ${t._blob[1]} != ${t.fPngBuf?.length}`),delete t.fPngBuf)):console.error(`TASImage _blob len ${t._blob.length} not recognized`),delete t._blob);let a;return t.fImgBuf&&t.fPalette?a=this.makeUrlFromImageBuf(t,i):t.fPngBuf?a=this.makeUrlFromPngBuf(t,i):a=Promise.resolve(null),a.then(o=>{if(!o?.url)return this;const r=this.createG(i).append("image").attr("href",o.url).attr("width",e.width).attr("height",e.height).attr("preserveAspectRatio",o.constRatio?null:"none");return this.isBatchMode()||((w.MoveResize||w.ContextMenu)&&r.style("pointer-events","visibleFill"),o.can_zoom&&r.style("cursor","pointer")),O(this,Z),!i||!o.can_zoom?this:this.drawColorPalette(this.getOptions().Zscale,!0).then(()=>(i.setAxesRanges(_(y),0,1,_(y),0,1,null,0,0),i.createXY({ndim:2,check_pad_range:!1}),i.addInteractivity()))})}fillContextMenuItems(t){const i=this.getObject(),e=this.getOptions();i&&t.addchk(i.fConstRatio,"Const ratio",a=>{i.fConstRatio=a,this.interactiveRedraw("pad",`exec:SetConstRatio(${a})`)},"Change const ratio flag of image"),i?.fPalette&&t.addchk(e.Zscale,"Color palette",a=>{e.Zscale=a,this.drawColorPalette(a,!0)},"Toggle color palette")}canZoomInside(t,i,e){return this.getObject()?(t==="x"||t==="y")&&e-i>.01:!1}getHistPalette(){return!0}async drawColorPalette(t,i){if(!this.isMainPainter())return null;if(!this.draw_palette){const o=_(T);Object.assign(o,{fX1NDC:.91,fX2NDC:.95,fY1NDC:.1,fY2NDC:.9,fInit:1}),o.fAxis.fChopt="+",this.draw_palette=o}let e=this.getPadPainter().findPainterFor(this.draw_palette);if(!t)return e&&(e.Enabled=!1,e.removeG()),null;const a=this.getFramePainter();if(i&&a){const o=this.draw_palette;o.fX2NDC=a.fX2NDC+.01+(o.fX2NDC-o.fX1NDC),o.fX1NDC=a.fX2NDC+.01,o.fY1NDC=a.fY1NDC,o.fY2NDC=a.fY2NDC}return e?(e.Enabled=!0,e.drawPave("")):F.draw(this.getPadPainter(),this.draw_palette).then(o=>{e=o,e.setSecondaryId(this),e.redraw=function(){}})}toggleColz(){if(this.getObject()?.fPalette){const t=this.getOptions();return t.Zscale=!t.Zscale,this.drawColorPalette(t.Zscale,!0)}}redraw(){return this.drawImage()}clickButton(t){return this.isMainPainter()&&t==="ToggleColorZ"?this.toggleColz():!1}fillToolbar(){const t=this.getPadPainter();t&&this.getObject()?.fPalette&&(t.addPadButton("th2colorz","Toggle color palette","ToggleColorZ"),t.showPadButtons())}static async draw(t,i,e){const a=new I(t,i,e);return a.setAsMainPainter(),a.decodeOptions(e),k(a,!1).then(()=>a.drawImage()).then(()=>(a.fillToolbar(),a))}}export{I as TASImagePainter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a5 as c,$ as f,a6 as x}from"./ndmvr-aframe-core-
|
|
1
|
+
import{a5 as c,$ as f,a6 as x}from"./ndmvr-aframe-core-DEHQ38JB.js";import{TTextPainter as u}from"./TTextPainter-B26aOYGd.js";import{build3dlatex as p}from"./latex3d-8Hbnfz6c.js";function a(i,t){const e=i.position.x-t.position.x,s=i.position.y-t.position.y;return Math.atan2(s,e)+Math.PI/2}class d extends u{async redraw(){const t=this.getFramePainter(),e=this.getObject();if(t?.mode3d&&!this.use_2d){const o=p(e,"",this,t);return o.traverse(h=>h.geometry?.rotateX(Math.PI/2)),o.position.set(t.grx(e.fX),t.gry(e.fY),t.grz(e.fZ)),o.rotation.set(0,0,a(t.camera,o)),t.processRender3D=!0,t.add3DMesh(o,this,!0),t.render3D(100),this}const s=t?.mode3d&&c(t?.convert3DtoPadNDC)?"3d":"2d";let r=e.fX,n=e.fY;if(s==="3d"){const o=t.convert3DtoPadNDC(e.fX,e.fY,e.fZ);r=o.x,n=o.y}return this._redrawText(r,n,s).then(()=>(t.processRender3D=s==="3d",this))}handleRender3D(){const t=this.getObject(),e=this.getFramePainter();if(this.use_2d){const s=e.convert3DtoPadNDC(t.fX,t.fY,t.fZ),r=this.axisToSvg("x",s.x,!0),n=this.axisToSvg("y",s.y,!0);f(this.getG(),r-this.pos_x,n-this.pos_y)}else e.get3DMeshes(this).forEach(s=>s.rotation.set(0,0,a(e.camera,s)))}static async draw(t,e,s){const r=new d(t,e,s);return r.use_2d=s==="2d"||s==="2D",x(r,r.use_2d?!0:"3d").then(()=>r.redraw())}}export{d as TAnnotation3DPainter};
|